<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Хук на события мыши]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=303&amp;type=atom" />
	<updated>2019-11-07T12:53:51Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=303</id>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2496#p2496" />
			<content type="html"><![CDATA[<p>ну хачить квик чтобы отключить горячие клавиши - неправильно. впрочем, можно, наверное, установить свои пустые хоткеи, чтобы не срабатывали квиковые. но, повторюсь, идея - дрянь.</p>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2019-11-07T12:53:51Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2496#p2496</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2495#p2495" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>значит сам себе злобный буратино</p></blockquote></div><p>ну еще и претензии имеются, почему его алгоритм открыл позицию согласно алгоритма, не как думал буратино, когда писал ТЗ</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2019-11-07T08:58:35Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2495#p2495</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2494#p2494" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>kalikazandr, то что у вас метки клонируются, скорее всего проблема в вашем скрипте</p></blockquote></div><p>действительно так, в текущей реализации я не могу знать что метка &quot;отпущена&quot; и ее перерисовываю по новым координатам (округленный YVALUE) вот в этот момент SetLabelParams генерирует клона, не всегда, но бывает.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2019-11-07T08:47:29Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2494#p2494</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2493#p2493" />
			<content type="html"><![CDATA[<p>значит сам себе злобный буратино</p>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2019-11-07T08:44:16Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2493#p2493</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2492#p2492" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>и, кстати, разве при выключенной панели инструментов в стакане эти горячие кнопки работают?</p></blockquote></div><p>нет, но ее загадочным образом не отключают, с фразой: &quot;а если мне надо срочно принять решение...&quot;</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2019-11-07T08:41:40Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2492#p2492</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2491#p2491" />
			<content type="html"><![CDATA[<p>kalikazandr, то что у вас метки клонируются, скорее всего проблема в вашем скрипте. в остальном, все что вы написали - это мой текст, только своими словами и эмоционально. <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> насчет стакана - это другая проблема и решается она по-другому. и, кстати, разве при выключенной панели инструментов в стакане эти горячие кнопки работают?</p>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2019-11-07T08:16:49Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2491#p2491</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2490#p2490" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2019-11-07T07:42:38Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2490#p2490</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2489#p2489" />
			<content type="html"><![CDATA[<p>если я правильно понимаю документацию квика по поводу апи меток на графике, то метки устанавливаются в координатах время-цена, по-этому не важно, какой у графика масштаб. если стоит задача определить перетаскивание метки, то сейчас логичным решением выглядит мониторинг всех меток по таймеру, и если координаты изменились, то делаем что-то. но если наш таймер срабатывает в момент перетаскивания, то мы получаем промежуточное значение. если мы ставим по этому событию заявку, то заявка будет в цикле переставляться вместе с движением метки, что нехорошо. если мы перехватим отжатие мыши на графике, то, пролистав все метки и сравнив координаты сможем вычислить изменившуюся метку ПОСЛЕ перетаскивания. ну, предположим, над каким окном отжал - это как раз не проблема. проблема преобразовать хендл окна в ТЭГ графика, такой же, как в lua api. но, если подумать, то и это решаемо. даже без тэга однократно перебрать все метки недолго.<br />если пользователь ничего не делает, а просто тупо кликает мышкой по графику, то мы, конечно, пролистываем метки каждый раз, но тоже ничего не делаем, так как ни одна не поменялась.</p>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2019-11-07T06:28:41Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2489#p2489</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2486#p2486" />
			<content type="html"><![CDATA[<p>Мне не совсем понятно как это использовать.<br />Ну нажал / отпустил пользователь мышь.<br />А где нажал? над каким объектом? что и куда переместил? какой масштаб на графиках сейчас?</p><p>Т.е. отловить-то можно события мыши, но как интерпретировать эти события разумно?</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2019-11-07T04:14:35Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2486#p2486</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2485#p2485" />
			<content type="html"><![CDATA[<p>Спасибо, очень интересно.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2019-11-06T17:34:34Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2485#p2485</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2484#p2484" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2019-11-06T16:46:45Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2484#p2484</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2483#p2483" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2019-11-06T16:23:25Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2483#p2483</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Хук на события мыши]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2481#p2481" />
			<content type="html"><![CDATA[<p>Идея следующая, получать в скрипте событие нажатия кнопок мыши и дескриптор объекта, над которым это событие произошло.<br />Например, всем известная панель управления заявками в окне котировок:<br />Нажатие пользователем на кнопки &quot;C&quot;; &quot;R&quot; и прочие приводит к мгновенному закрытию/развороту позиции без всяких предупреждений и вопросов со стороны квика, потому что такие действия выгодны брокеру (арка упорно не хочет вешать на эти кнопки сообщение о подтверждении действия), а роботы и не в курсе, что юзер что-то там чудит/скальперит, просаживает депо одним словом.<br />Событие движения метки на графике из точки А в точку Б происходит при зажатой левой кнопки мыши (ЛКМ), соответсвенно проверку на изменение этой метки можно делать только, когда ЛКМ не нажата и не получать промежуточные значения меток.<br />Это удобно для реализации меточных стопов/профитов/реверсов/ программно созданных линий трендов.</p><p>Думаю, много чего можно еще отследить за пользователем, тыркающим всякие кнопочки в терминале.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2019-11-06T15:36:21Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2481#p2481</id>
		</entry>
</feed>
