Вася, это только начало длинного пути в который мы посланы разработчиками очень давно.
Не только с проблемой открытия таблицы в нужной вкладке, но и той что при перезапуске квика любая таблица открывается в последней открытой вкладке вместо нужной. Скоро отпразднуем 10-летний юбилей регистрации этих предложений.
Огромное спасибо Sverg и еще ребятам за то, что помогли частично закрыть эти проблемы.
Ниже функция которую я использую. Требуется библиотека w32
Код |
---|
function OpenTable(Name,kid,pos) -- функция открытия таблицы (kid) с координатами (pos) в нужной вкладке (Name)
local mmes=""
local hQuikWnd = GetQuikMainWindowHandle() -- handle главного окна QUIK
local hTabWnd = 0 -- handle окна вкладок
if hQuikWnd > 0 then
hTabWnd = w32.FindWindowEx(hQuikWnd, 0, "SysTabControl32", "")
if hTabWnd ~= 0 and not w32.IsWindowVisible(hTabWnd) then -- отображение вкладок отключено
hTabWnd = 0
end
end
if hTabWnd > 0 then -- вкладки в терминале отображаются
local prevIdx = w32.TabCtrl_GetCurFocus(hTabWnd) -- индекс текущей активной вкладки
local idxGr = w32.TabCtrl_GetItemIndexByText(hTabWnd, Name) -- индекс заданной вкладки
if idxGr >= 0 then -- вкладка найдена
w32.TabCtrl_SetCurFocus(hTabWnd, idxGr) -- переключение на найденную вкладку
local txt = w32.TabCtrl_GetItemText(hTabWnd) -- название текущей активной вкладки
mmes=" Вкладка " .. 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=" Вкладка не найдена. Текущая" .. tostring(txt)
end
else -- вкладки не отображены, открываем в текущей
CreateWindow(kid)
SetWindowPos(kid, pos.a, pos.b, pos.c, pos.d)
mmes=" Вкладка текущая"
end
return mmes
end
|