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.


Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.