<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Хук на события мыши]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=303</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=303&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Хук на события мыши».]]></description>
		<lastBuildDate>Thu, 07 Nov 2019 12:53:51 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2496#p2496</link>
			<description><![CDATA[<p>ну хачить квик чтобы отключить горячие клавиши - неправильно. впрочем, можно, наверное, установить свои пустые хоткеи, чтобы не срабатывали квиковые. но, повторюсь, идея - дрянь.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Thu, 07 Nov 2019 12:53:51 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2496#p2496</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2495#p2495</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>значит сам себе злобный буратино</p></blockquote></div><p>ну еще и претензии имеются, почему его алгоритм открыл позицию согласно алгоритма, не как думал буратино, когда писал ТЗ</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Thu, 07 Nov 2019 08:58:35 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2495#p2495</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2494#p2494</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>kalikazandr, то что у вас метки клонируются, скорее всего проблема в вашем скрипте</p></blockquote></div><p>действительно так, в текущей реализации я не могу знать что метка &quot;отпущена&quot; и ее перерисовываю по новым координатам (округленный YVALUE) вот в этот момент SetLabelParams генерирует клона, не всегда, но бывает.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Thu, 07 Nov 2019 08:47:29 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2494#p2494</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2493#p2493</link>
			<description><![CDATA[<p>значит сам себе злобный буратино</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Thu, 07 Nov 2019 08:44:16 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2493#p2493</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2492#p2492</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>и, кстати, разве при выключенной панели инструментов в стакане эти горячие кнопки работают?</p></blockquote></div><p>нет, но ее загадочным образом не отключают, с фразой: &quot;а если мне надо срочно принять решение...&quot;</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Thu, 07 Nov 2019 08:41:40 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2492#p2492</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2491#p2491</link>
			<description><![CDATA[<p>kalikazandr, то что у вас метки клонируются, скорее всего проблема в вашем скрипте. в остальном, все что вы написали - это мой текст, только своими словами и эмоционально. <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> насчет стакана - это другая проблема и решается она по-другому. и, кстати, разве при выключенной панели инструментов в стакане эти горячие кнопки работают?</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Thu, 07 Nov 2019 08:16:49 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2491#p2491</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2490#p2490</link>
			<description><![CDATA[<p>Ребята, вы сильно заморочились, в скрипте я знаю заранее все id меток и их привязку на графике,<br />и отслеживаю конкретную метку в каждой итерации, не все, хотя их там есть более одной.<br />Делаю проверку, что YVALUE совпадает с его прошлым значением, если это так, то ничего не делаю, иначе, начинаю менять цены, которые нужно округлить и поправить саму метку по округленной цене. <br />Мало того, когда я меняю параметры метки может создаться ее клон, ну вот такой вот квик.<br />На практике не получается сместить метку быстро и точно! естественно бот видит все промежуточные значения (может быть несколько десятков или даже сотен), которые могут быть ошибочными или создать несколько дубликатов метки, которые нужно удалить руками (с десяток другой).<br />Если я буду знать, что сейчас нажата левая кнопка мыши, то конкретно за метками я не буду следить и не важно над каким компонентом сейчас указатель мыши. Если ЛКМ не нажата, то посмотрю.<br />Знание компонента для этого не нужно, оно нужно для кнопок стакана. Т.к. на кнопку стакана никто не нажимает и не держит нажатой левую кнопку мыши, то и событие там несколько другое, точнее оно будет в прошлом - была нажата ЛКМ над кнопкой стакана &quot;R&quot; или &quot;С&quot; после чего квик сгенерирует свою заявку без trans_id, без broker_ref, которая как минимум приведет к полному закрытию позиции, открытую десятком роботов. И вот тут нужно понимание, что это кнопка стакана и возвращать caption стакана: {была нажата R, BRZ9 [FORTS: Фьючерсы] Котировки} вот такое сообщение бот должен увидеть в новой итерации и декскриптор объекта как бы и не нужен. Если это не его инструмент, то и не будет ничего делать. Такое собщение я не могу удалять, т.к. какой робот должен это сделать? Но их много и не будет, ну максимум десяток за день.<br />Сейчас приходится отслеживать все пользовательские заявки, которые не имеют trans_id и делать проверку, что позиция не закрыта полностью или не развернулась, и эта проверка не быстрая и ее не хочется делать.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Thu, 07 Nov 2019 07:42:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2490#p2490</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2489#p2489</link>
			<description><![CDATA[<p>если я правильно понимаю документацию квика по поводу апи меток на графике, то метки устанавливаются в координатах время-цена, по-этому не важно, какой у графика масштаб. если стоит задача определить перетаскивание метки, то сейчас логичным решением выглядит мониторинг всех меток по таймеру, и если координаты изменились, то делаем что-то. но если наш таймер срабатывает в момент перетаскивания, то мы получаем промежуточное значение. если мы ставим по этому событию заявку, то заявка будет в цикле переставляться вместе с движением метки, что нехорошо. если мы перехватим отжатие мыши на графике, то, пролистав все метки и сравнив координаты сможем вычислить изменившуюся метку ПОСЛЕ перетаскивания. ну, предположим, над каким окном отжал - это как раз не проблема. проблема преобразовать хендл окна в ТЭГ графика, такой же, как в lua api. но, если подумать, то и это решаемо. даже без тэга однократно перебрать все метки недолго.<br />если пользователь ничего не делает, а просто тупо кликает мышкой по графику, то мы, конечно, пролистываем метки каждый раз, но тоже ничего не делаем, так как ни одна не поменялась.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Thu, 07 Nov 2019 06:28:41 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2489#p2489</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2486#p2486</link>
			<description><![CDATA[<p>Мне не совсем понятно как это использовать.<br />Ну нажал / отпустил пользователь мышь.<br />А где нажал? над каким объектом? что и куда переместил? какой масштаб на графиках сейчас?</p><p>Т.е. отловить-то можно события мыши, но как интерпретировать эти события разумно?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 07 Nov 2019 04:14:35 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2486#p2486</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2485#p2485</link>
			<description><![CDATA[<p>Спасибо, очень интересно.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Wed, 06 Nov 2019 17:34:34 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2485#p2485</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2484#p2484</link>
			<description><![CDATA[<p>вот, есть заготовка в виде проекта multilist: [url]https://www.dropbox.com/s/7efuodbysetlxu8/lua_multilist.zip?dl=0[/url] из этой темы: [url]https://quik2dde.ru/viewtopic.php?pid=2474#p2474[/url]</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Wed, 06 Nov 2019 16:46:45 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2484#p2484</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2483#p2483</link>
			<description><![CDATA[<p>на самом деле, механика не очень мудреная, сделать это довольно просто, если владеешь си, или, скажем, delphi.<br />1. делаем helper-dll:<br />1.1 создаем dll, которая на DLL_PROCESS_ATTACH определяет hwnd основного окна квика, имеющего класс InfoClass, в том процессе, в котором эта dll загружена.<br />1.2 там же, находим все уже созданные дочерние окна, имеющие класс CHART, находящиеся в окне HostWindow, находящиеся в MDIClient, который уже в окне InfoClass.<br />1.3 для всех найденных окон ставим хук на wndproc<br />1.4 субклассируем класс CHART, чтобы вновь созданные окна имели нужный нам wndproc<br />1.5 в этом wndproc мы перехватываем, ну скажем, WM_LBUTTONUP, делаем postmessage в некое окно, о котором ниже. далее аккуратно вызываем прежний wndproc, аккуратно возвращаем результат прежнего wndproc.</p><p>2. делаем lua-dll:<br />2.1 при загрузке lua-dll загружаем helper-dll, в случае, если она не была ранее загружена другим экземпляром lua-dll.<br />2.2 создаем окно, в котором мы хотим получать нотификации.<br />2.3 сообщаем helper-dll хендл этого окна (например, через экспортируемую helper-dll функцию)<br />2.4 создаем lua-функцию process(), в которой мы крутим messageloop этого окна, полученные сообщения - есть сообщения посланные из helper-dll. вызываем callback&#039;и lua OnLButtonUp(x,y...).<br />2.5 при выгрузке lua-dll не забываем сообщить нулевой хендл в helper-dll, иначе сообщения будут уходить случайному новому окну.<br />2.6 helper-dll никогда не выгружаем. выгрузится вместе с квиком.</p><p>3. в QLUA скрипте:<br />3.1 загружаем lua-dll<br />3.2 определяем колбэк OnLButtonUp, пишем что нам там нужно.<br />3.3 в main() крутим process()</p><p>мне лень это программировать, есть желающие?</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Wed, 06 Nov 2019 16:23:25 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2483#p2483</guid>
		</item>
		<item>
			<title><![CDATA[Хук на события мыши]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2481#p2481</link>
			<description><![CDATA[<p>Идея следующая, получать в скрипте событие нажатия кнопок мыши и дескриптор объекта, над которым это событие произошло.<br />Например, всем известная панель управления заявками в окне котировок:<br />Нажатие пользователем на кнопки &quot;C&quot;; &quot;R&quot; и прочие приводит к мгновенному закрытию/развороту позиции без всяких предупреждений и вопросов со стороны квика, потому что такие действия выгодны брокеру (арка упорно не хочет вешать на эти кнопки сообщение о подтверждении действия), а роботы и не в курсе, что юзер что-то там чудит/скальперит, просаживает депо одним словом.<br />Событие движения метки на графике из точки А в точку Б происходит при зажатой левой кнопки мыши (ЛКМ), соответсвенно проверку на изменение этой метки можно делать только, когда ЛКМ не нажата и не получать промежуточные значения меток.<br />Это удобно для реализации меточных стопов/профитов/реверсов/ программно созданных линий трендов.</p><p>Думаю, много чего можно еще отследить за пользователем, тыркающим всякие кнопочки в терминале.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Wed, 06 Nov 2019 15:36:21 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2481#p2481</guid>
		</item>
	</channel>
</rss>
