<?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=329</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=329&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Создание таблиц из скриптов на нужной вкладке».]]></description>
		<lastBuildDate>Thu, 13 Jun 2024 06:34:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4347#p4347</link>
			<description><![CDATA[<p>Задача ваша понятна, но вот идей как это сделать лучше у меня так и не придумалось...</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 13 Jun 2024 06:34:34 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4347#p4347</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4345#p4345</link>
			<description><![CDATA[<p>Здесь идея проста. Если каждую вкладку привязать к определённому инструменту, то чтобы скрипт знал, с каким инструментом ему работать, он должен знать, какая вкладка активна в данный момент.<br />Я не знаю, какая тут может быть идея, кроме периодического вызова TabCtrl_GetItemText. Можно было бы не циклически вызывать эту функцию, а например по клику левой кнопки мыши. Но тогда надо каким-то образом перехватить нажатие левой кнопки мыши...<br />Но пока у меня такая идея - создать вспомогательный скрипт, который и будет периодически вызывать TabCtrl_GetItemText и передавать имя активной вкладки в основной скрипт с помощью StaticVar. Я думаю, что в этом случае эта функция не будет подвешивать основной скрипт.<br />Время обновления названия активной вкладки, равное 100мс (и даже 200мс) вполне бы устроило. Главное чтобы это не подвешивало основной скрипт (там итак есть много чего, что могло бы его подвесить)).</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Wed, 12 Jun 2024 16:43:41 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4345#p4345</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4335#p4335</link>
			<description><![CDATA[<p>Я думаю, что не смотря на выполнение TabCtrl_GetItemText в другом потоке, она, однако, синхронизируется с основным потоком терминала в том смысле, что Windows синхронизирует обращения к оконной функции (а для получения результата Windows вызывает оконную функцию). Соответственно если основной поток занят (например, перерисовывает графики, обновляет таблицы в терминале при получении торговых данных), то и TabCtrl_GetItemText останавливается до замершения других обработчиков (не Lua, обработчиков терминала и Windows). Могу предположить, что в эти моменты и происходят &quot;провалы&quot; по скорости её ответа.</p><p>Так что думаю надо просто придумать другую идею вместо &quot;затрахивания&quot; вызовами TabCtrl_GetItemText.</p><p>Хотя я примерно могу предположить для какой задачи у вас сделана такая работа робота.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 10 Jun 2024 11:18:32 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4335#p4335</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4334#p4334</link>
			<description><![CDATA[<p>Да, я из main() вызываю w32.TabCtrl_GetItemText(hTabWnd).<br />Миллисекунды действительно не критичны. Но здесь речь идёт о величине &gt; 100мс (если не больше). А это уже может быть заметно. Ведь это подвешивает и весь остальной скрипт.<br />Мне это чем-то напоминает ситуацию с функцией Sleep(1), задержка от которой тоже колеблется от 1мс до ~16мс, а иногда и ещё больше (решается с помощью NtSetTimerResolution).<br />Вот я и подумал, что может быть аналогичная ситуация и с функцией w32.TabCtrl_GetItemText(hTabWnd). Т.е. возможно она, чтобы отработать, ожидает какого-то сигнала от Windows. И может быть здесь тоже есть какое-нибудь решение, аналогичное решению с функцией Sleep(1).</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Sun, 09 Jun 2024 06:35:52 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4334#p4334</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4333#p4333</link>
			<description><![CDATA[<div class="quotebox"><cite>igor пишет:</cite><blockquote><p>Задача - сделать так, чтобы скрипт постоянно знал, какая вкладка активна в данный момент времени.</p></blockquote></div><p>У вас &quot;данный момент&quot; наступает так часто, что критичны миллисекунды?</p><p>Вообще &quot;под капотом&quot; там простой вызов непосредственно WinAPI функции, так что если и тормозит - то сама Windows в этом месте, видимо нет надобности для пользовательского интерфейса делать это супер быстро и стабильно.</p><p>Кстати, а вы не из main() случайно вызываете w32.TabCtrl_GetItemText(hTabWnd)?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 07 Jun 2024 04:31:48 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4333#p4333</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4330#p4330</link>
			<description><![CDATA[<p>Обнаружил, что время выполнения оператора w32.TabCtrl_GetItemText(hTabWnd) очень большое. Точнее оно колеблется от 1мс до ~130мс (непонятно, от чего это зависит).<br />Никто не знает, чем это вызвано, и можно ли как-нибудь с этим бороться?<br />Задача - сделать так, чтобы скрипт постоянно знал, какая вкладка активна в данный момент времени.</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Wed, 05 Jun 2024 10:48:07 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4330#p4330</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3005#p3005</link>
			<description><![CDATA[<p>Это я про запуск после загрузки квика.</p><p>Выделяешь все скрипты и запускаешь выделенные. В итоге часть окон не в тех вкладках.<br />Понятно почему и это не критично, можно запускать по одному.<br />Наверное если вдруг получится через меню &quot;переместить во вкладку&quot; то этого не будет.&nbsp; Если что я первый в очереди )</p>]]></description>
			<author><![CDATA[null@example.com (Kolossi)]]></author>
			<pubDate>Sun, 14 Feb 2021 17:46:15 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3005#p3005</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3004#p3004</link>
			<description><![CDATA[<p>У вас несколько скриптов одновременно создают окна? Именно одновременно?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sun, 14 Feb 2021 16:33:25 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3004#p3004</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3003#p3003</link>
			<description><![CDATA[<p>Однако если запущены одновременно несколько скриптов, то окно таблицы запросто может влететь в чужую вкладку. Текущую для другого вызова функции.</p>]]></description>
			<author><![CDATA[null@example.com (Kolossi)]]></author>
			<pubDate>Sun, 14 Feb 2021 10:32:43 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3003#p3003</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3002#p3002</link>
			<description><![CDATA[<p>А, понял! <br />Координаты таблицы надо передавать в текущее окно.<br />Получилось так:<br /></p><div class="codebox"><pre><code>function OpenTable(Name,kid,pos) -- функция открытия таблицы (kid) с координатами (pos) в нужной вкладке (Name)
    local mmes=&quot;&quot;
    local hQuikWnd = GetQuikMainWindowHandle() -- handle главного окна QUIK
    local hTabWnd = 0 --  handle окна вкладок
        if hQuikWnd &gt; 0 then
            hTabWnd = w32.FindWindowEx(hQuikWnd, 0, &quot;SysTabControl32&quot;, &quot;&quot;)
            if hTabWnd ~= 0 and not w32.IsWindowVisible(hTabWnd) then -- отображение вкладок отключено
                hTabWnd = 0
            end
        end
    if hTabWnd &gt; 0 then --  вкладки в терминале отображаются
        local prevIdx = w32.TabCtrl_GetCurFocus(hTabWnd)  --  индекс текущей активной вкладки
        local idxGr = w32.TabCtrl_GetItemIndexByText(hTabWnd, Name) -- индекс заданной вкладки
        if idxGr &gt;= 0 then -- вкладка найдена
            w32.TabCtrl_SetCurFocus(hTabWnd, idxGr) -- переключение на найденную вкладку
            local txt = w32.TabCtrl_GetItemText(hTabWnd) --  название текущей активной вкладки
            mmes=&quot;   Вкладка &quot; .. tostring(txt)
            CreateWindow(kid)
            SetWindowPos(kid, pos.a, pos.b, pos.c, pos.d)
            w32.TabCtrl_SetCurFocus(hTabWnd, prevIdx) -- назад на исходную вкладку
        else
            CreateWindow(kid)
            SetWindowPos(kid, pos.a, pos.b, pos.c, pos.d)
            local txt = w32.TabCtrl_GetItemText(hTabWnd)
            mmes=&quot;   Вкладка не найдена. Текущая &quot; .. tostring(txt)
        end
    else -- вкладки не отображены, открываем в текущей
        CreateWindow(kid)
        SetWindowPos(kid, pos.a, pos.b, pos.c, pos.d)
        mmes=&quot;   Вкладка текущая&quot;
    end
    return mmes
end</code></pre></div><p>...<br />&nbsp; &nbsp; local pos={a=0,b=0,c=600,d=990}<br />&nbsp; &nbsp; local addtxt=OpenTable(&quot;Дивиденды&quot;,table_id,pos)<br />&nbsp; &nbsp; SetWindowCaption(table_id,&quot;&nbsp; Закрытие дивидендных реестров. &quot;..addtxt)<br />...<br /> Все супер, спасибо swerg!</p>]]></description>
			<author><![CDATA[null@example.com (Kolossi)]]></author>
			<pubDate>Sun, 14 Feb 2021 08:32:07 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3002#p3002</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3001#p3001</link>
			<description><![CDATA[<p>Добрый день.<br />Все вроде отлично, но что-то не так в датском королевстве c позиционированием окна.<br />Сделал из вашего кода функцию в свою библиотечку:<br />--<br /></p><div class="codebox"><pre><code>function OpenTable(Name,kid) -- функция открытия таблицы (kid) в нужной вкладке (Name)
    local mmes=&quot;&quot;
    local hQuikWnd = GetQuikMainWindowHandle() -- handle главного окна QUIK
    local hTabWnd = 0 --  handle окна вкладок
        if hQuikWnd &gt; 0 then
            hTabWnd = w32.FindWindowEx(hQuikWnd, 0, &quot;SysTabControl32&quot;, &quot;&quot;)
            if hTabWnd ~= 0 and not w32.IsWindowVisible(hTabWnd) then -- отображение вкладок отключено
                hTabWnd = 0
            end
        end
    if hTabWnd &gt; 0 then --  вкладки в терминале отображаются
        local prevIdx = w32.TabCtrl_GetCurFocus(hTabWnd)  --  индекс текущей активной вкладки
        local idxGr = w32.TabCtrl_GetItemIndexByText(hTabWnd, Name) -- индекс заданной вкладки
        if idxGr &gt;= 0 then -- вкладка найдена
            w32.TabCtrl_SetCurFocus(hTabWnd, idxGr) -- переключение на найденную вкладку
            local txt = w32.TabCtrl_GetItemText(hTabWnd) --  название текущей активной вкладки
            mmes=&quot;   Вкладка &quot; .. tostring(txt)
            CreateWindow(kid)
            w32.TabCtrl_SetCurFocus(hTabWnd, prevIdx) -- назад на исходную вкладку
        else
            CreateWindow(kid)
            local txt = w32.TabCtrl_GetItemText(hTabWnd)
            mmes=&quot;   Вкладка не найдена. Текущая&quot; .. tostring(txt)
        end
    else -- вкладки не отображены, открываем в текущей
        CreateWindow(kid)
        mmes=&quot;   Вкладка текущая&quot;
    end
    return mmes
end</code></pre></div><p>Главный код:<br />&nbsp; &nbsp; &nbsp; &nbsp; ...<br />&nbsp; &nbsp; local addtxt=OpenTable(&quot;Дивиденды&quot;,table_id)<br />&nbsp; &nbsp; SetWindowCaption(table_id,&quot;&nbsp; Закрытие дивидендных реестров. &quot;..addtxt)<br />&nbsp; &nbsp; SetWindowPos(table_id, 0,0, 600, 990)<br />&nbsp; &nbsp; &nbsp; &nbsp; local a,b,c,d=GetWindowRect(table_id)<br />&nbsp; &nbsp; &nbsp; &nbsp; message(tostring(a)..&quot;-&quot;..tostring(b)..&quot;-&quot;..tostring(c)..&quot;-&quot;..tostring(d))</p><p>Вроде все отлично, таблица попадает прямиком во вкладку &quot;Дивиденды&quot; и message() возвращает 0-0-600-990</p><p>Однако левый верхний угол таблицы в окне &quot;Дивиденды&quot; где угодно, только не в 0,0<br />Что я не понимаю ?</p>]]></description>
			<author><![CDATA[null@example.com (Kolossi)]]></author>
			<pubDate>Sun, 14 Feb 2021 08:17:33 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3001#p3001</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2875#p2875</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>а если через пункт меню &quot;переместить на вкладку&quot;?</p></blockquote></div><p>Да, вариант. Надо будет поискать подходы. Спасибо за идею!</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 21 Nov 2020 04:03:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2875#p2875</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2874#p2874</link>
			<description><![CDATA[<p>а если через пункт меню &quot;переместить на вкладку&quot;?</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Fri, 20 Nov 2020 14:58:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2874#p2874</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2873#p2873</link>
			<description><![CDATA[<p><span style="color: #CCCCCC">&lt; reserved &gt;</span></p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 17 Nov 2020 20:47:09 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2873#p2873</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создание таблиц из скриптов на нужной вкладке]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2871#p2871</link>
			<description><![CDATA[<p>При переключении вкладок из скрипта всё моргает, конечно, но куда деваться...</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 17 Nov 2020 20:42:45 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2871#p2871</guid>
		</item>
	</channel>
</rss>
