ListView Hint-ы всплывают под формой
От: sined  
Дата: 13.04.05 09:44
Оценка:
Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой.
Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.
Re: ListView Hint-ы всплывают под формой
От: linker Россия  
Дата: 13.04.05 10:31
Оценка:
Здравствуйте, sined, Вы писали:

S>Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой.

S>Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.

Только ковырял combobox,с пожожей проблемой, у меня парент для этого хинта был не правильный.А вооще возьми пример готовый для listview их много.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Re[2]: ListView Hint-ы всплывают под формой
От: sined  
Дата: 13.04.05 10:42
Оценка:
Здравствуйте, linker, Вы писали:

L>Здравствуйте, sined, Вы писали:


S>>Кто нибудь уже бодался с такой проблемой , есть форма на ней TListView, у формы присовено свойство FormStyle:=fsStayOnTop, хинты ListView всплывают под формой.

S>>Очень хотелось бы чтобы всплывали как положено над формой. Пользую Delphi 5.

L>Только ковырял combobox,с пожожей проблемой, у меня парент для этого хинта был не правильный.А вооще возьми пример готовый для listview их много.


Так дело все в том что если форма имеет FormStyle:=fsNormal, то все Ок, неприятности возникают именно когда FormStyle:=fsStayOnTop. Хинты всплывают под формой вот в чем беда, я знаю что дельфовый fsStayOnTop кривой , может есть какой win32 — api-шный победить неприятность
Re[3]: ListView Hint-ы всплывают под формой
От: linker Россия  
Дата: 13.04.05 11:07
Оценка:
Здравствуйте, 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)или как то ещё?
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Re[4]: ListView Hint-ы всплывают под формой
От: sined  
Дата: 13.04.05 11:12
Оценка:
Здравствуйте, linker, Вы писали:


L>Мое предположение что все таки fsStayOnTop-значит поверх все окон,следовательно и поверх hint'а тоже.У тебя кстати hint все время од формой или только первый раз?Если первый раз то проблемы в паренте.А ты хинт вообще как показываешь THintWindow(ActivateHitn)или как то ещё?


Хинт все время под формой , хинт показывает ListView сам автоматически. А что можно его как то принудительно вытащить , можешь поподробнее сказать что это за THintWindow(ActivateHitn)
Re[5]: ListView Hint-ы всплывают под формой
От: Danchik Украина  
Дата: 13.04.05 13:07
Оценка: 3 (1)
Здравствуйте, 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.


Удачи!
Re[6]: ListView Hint-ы всплывают под формой
От: sined  
Дата: 13.04.05 13:34
Оценка: 4 (1)
Здравствуйте, 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-ые к сожалению нет. Так что способ не плохой.
Re[7]: ListView Hint-ы всплывают под формой
От: Danchik Украина  
Дата: 13.04.05 13:46
Оценка:
Здравствуйте, sined, Вы писали:

S>Ты просто крут!!!!!

S>Работает.
S>ListView — шные хинты как я понял , тянутся из comctrl, это не дельфовые хинты, потому как родные дельфовые хинтовые окна корректно просекают fStayOnTop, а вот эти window-ые к сожалению нет. Так что способ не плохой.

Ну да, мне сразу в голову пришло что связи с Делфовскими хинтами в comctrt — никакой . Оставалось только подловить comctrt хинт на взлете, а иначе как повесив хук (что бы всюду работало) сделать не представлялось возможным
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.