Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой.
Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.
Здравствуйте, sined, Вы писали:
S>Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой. S>Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.
Только ковырял combobox,с пожожей проблемой, у меня парент для этого хинта был не правильный.А вооще возьми пример готовый для listview их много.
Здравствуйте, linker, Вы писали:
L>Здравствуйте, sined, Вы писали:
S>>Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой. S>>Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.
L>Только ковырял combobox,с пожожей проблемой, у меня парент для этого хинта был не правильный.А вооще возьми пример готовый для listview их много.
Так дело все в том что если форма имеет FormStyle:=fsNormal, то все Ок, неприятности возникают именно когда FormStyle:=fsStayOnTop. Хинты всплывают под формой вот в чем беда, я знаю что дельфовый fsStayOnTop кривой , может есть какой win32 — api-шный победить неприятность
Здравствуйте, sined, Вы писали:
S>Здравствуйте, linker, Вы писали:
L>>Здравствуйте, sined, Вы писали:
S>>>Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой. S>>>Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.
L>>Только ковырял combobox,с пожожей проблемой, у меня парент для этого хинта был не правильный.А вооще возьми пример готовый для listview их много.
S>Так дело все в том что если форма имеет FormStyle:=fsNormal, то все Ок, неприятности возникают именно когда FormStyle:=fsStayOnTop. Хинты всплывают под формой вот в чем беда, я знаю что дельфовый fsStayOnTop кривой , может есть какой win32 — api-шный победить неприятность
Мое предположение что все таки fsStayOnTop-значит поверх все окон,следовательно и поверх hint'а тоже.У тебя кстати hint все время од формой или только первый раз?Если первый раз то проблемы в паренте.А ты хинт вообще как показываешь THintWindow(ActivateHitn)или как то ещё?
L>Мое предположение что все таки fsStayOnTop-значит поверх все окон,следовательно и поверх hint'а тоже.У тебя кстати hint все время од формой или только первый раз?Если первый раз то проблемы в паренте.А ты хинт вообще как показываешь THintWindow(ActivateHitn)или как то ещё?
Хинт все время под формой , хинт показывает ListView сам автоматически. А что можно его как то принудительно вытащить , можешь поподробнее сказать что это за THintWindow(ActivateHitn)
Здравствуйте, sined, Вы писали:
S>Здравствуйте, linker, Вы писали:
L>>Мое предположение что все таки fsStayOnTop-значит поверх все окон,следовательно и поверх hint'а тоже.У тебя кстати hint все время од формой или только первый раз?Если первый раз то проблемы в паренте.А ты хинт вообще как показываешь THintWindow(ActivateHitn)или как то ещё?
S>Хинт все время под формой , хинт показывает ListView сам автоматически. А что можно его как то принудительно вытащить , можешь поподробнее сказать что это за THintWindow(ActivateHitn)
Написан вариант решения.
Я надеюсь подключить дадумаешся как
Идея в том чтобы ListView's Hint сделать тоже TopMost. Идея написана только что и может быть конечно более элегантной (класс хинта может быть совсем иным, может сообщение не совсем красивое выбрал...).
Но этот подход работает!
var
varWndProcHookHandle : HWND;
function HintWindowWndProcHook (Code: Integer; wParam: WParam; lParam: LParam): LRESULT; stdcall;
var
Buf : array [0..1000] of char;
HookStruct : PCWPStruct;
WindowPosStruct : PWindowPos;
begin
HookStruct := Pointer (lParam);
case HookStruct.message of
WM_WINDOWPOSCHANGING :
begin
WindowPosStruct := PWindowPos (Pointer (HookStruct.lParam));
GetClassName (WindowPosStruct.hwnd, @Buf, SizeOf (Buf));
if SameText ('tooltips_class32', Buf) then begin
SetWindowPos (WindowPosStruct.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOSENDCHANGING or SWP_NOACTIVATE);
end;
end;
end;
Result := CallNextHookEx(varWndProcHookHandle, Code, wParam, lParam);
end;
initialization
varWndProcHookHandle := SetWindowsHookEx(WH_CALLWNDPROC, HintWindowWndProcHook, 0, GetCurrentThreadId);
finalization
UnhookWindowsHookEx (varWndProcHookHandle);
end.
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, sined, Вы писали:
S>>Здравствуйте, linker, Вы писали:
L>>>Мое предположение что все таки fsStayOnTop-значит поверх все окон,следовательно и поверх hint'а тоже.У тебя кстати hint все время од формой или только первый раз?Если первый раз то проблемы в паренте.А ты хинт вообще как показываешь THintWindow(ActivateHitn)или как то ещё?
S>>Хинт все время под формой , хинт показывает ListView сам автоматически. А что можно его как то принудительно вытащить , можешь поподробнее сказать что это за THintWindow(ActivateHitn)
D>Написан вариант решения. D>Я надеюсь подключить дадумаешся как D>Идея в том чтобы ListView's Hint сделать тоже TopMost. Идея написана только что и может быть конечно более элегантной (класс хинта может быть совсем иным, может сообщение не совсем красивое выбрал...). D>Но этот подход работает!
D>
D>var
D> varWndProcHookHandle : HWND;
D>function HintWindowWndProcHook (Code: Integer; wParam: WParam; lParam: LParam): LRESULT; stdcall;
D>var
D> Buf : array [0..1000] of char;
D> HookStruct : PCWPStruct;
D> WindowPosStruct : PWindowPos;
D>begin
D> HookStruct := Pointer (lParam);
D> case HookStruct.message of
D> WM_WINDOWPOSCHANGING :
D> begin
D> WindowPosStruct := PWindowPos (Pointer (HookStruct.lParam));
D> GetClassName (WindowPosStruct.hwnd, @Buf, SizeOf (Buf));
D> if SameText ('tooltips_class32', Buf) then begin
D> SetWindowPos (WindowPosStruct.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOSENDCHANGING or SWP_NOACTIVATE);
D> end;
D> end;
D> end;
D> Result := CallNextHookEx(varWndProcHookHandle, Code, wParam, lParam);
D>end;
D>initialization
D> varWndProcHookHandle := SetWindowsHookEx(WH_CALLWNDPROC, HintWindowWndProcHook, 0, GetCurrentThreadId);
D>finalization
D> UnhookWindowsHookEx (varWndProcHookHandle);
D>end.
D>
D>Удачи!
Ты просто крут!!!!!
Работает.
ListView — шные хинты как я понял , тянутся из comctrl, это не дельфовые хинты, потому как родные дельфовые хинтовые окна корректно просекают fStayOnTop, а вот эти window-ые к сожалению нет. Так что способ не плохой.
Здравствуйте, sined, Вы писали:
S>Ты просто крут!!!!! S>Работает. S>ListView — шные хинты как я понял , тянутся из comctrl, это не дельфовые хинты, потому как родные дельфовые хинтовые окна корректно просекают fStayOnTop, а вот эти window-ые к сожалению нет. Так что способ не плохой.
Ну да, мне сразу в голову пришло что связи с Делфовскими хинтами в comctrt — никакой . Оставалось только подловить comctrt хинт на взлете, а иначе как повесив хук (что бы всюду работало) сделать не представлялось возможным