Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#13

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 15:57
Unter Windows wird direkt die WinAPI benutzt.

Hab gesehn, dass der Hint ein tooltips_class32 ist, also im Code danach gesucht und gefunden.

Delphi-Quellcode:
unit FMX.Controls.Win;

const
  TOOLTIPS_CLASS = 'tooltips_class32';

constructor TWindowsHint.Create(const AHandle: TWindowHandle);
var
  LToolInfo: TOOLINFO;
begin
  inherited;
  FWindowHandle := AHandle;
  FNativeControlHandle := WindowHandleToPlatform(AHandle).Wnd;
  if FNativeControlHandle <> 0 then
  begin
    FToolTipHandle := CreateWindowEx(0, TOOLTIPS_CLASS, nil, WS_POPUP or TTS_ALWAYSTIP, 0, 0, 300, 300,
      FNativeControlHandle, 0, hInstance, nil);

    SetWindowPos(FToolTipHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);

    FillChar(LToolInfo, SizeOf(TOOLINFO), 0);
    LToolInfo.cbSize := SizeOf(TOOLINFO);
    LToolInfo.uFlags := TTF_SUBCLASS or TTF_IDISHWND or TTF_PARSELINKS;
    LToolInfo.hinst := hInstance;
    LToolInfo.hwnd := FNativeControlHandle;
    LToolInfo.uId := FNativeControlHandle;
    LToolInfo.lpszText := nil;

    SendMessage(FToolTipHandle, TTM_ADDTOOL, 0, LPARAM(@LToolInfo));
    SendMessage(FToolTipHandle, TTM_ACTIVATE, NativeInt(False), LPARAM(@LToolInfo));
  end;
end;
Die Wrapper-Klasse dazu hat auch nicht viele oder komplizierte Funkionen.



Also weiter siehe Hilfe:
https://learn.microsoft.com/en-us/wi...oltip-controls

Es läuft ein WM_TIMER, welcher für's Anzeigen und Ausblenden zuständig ist. (den könnte man vielleicht manipulieren)

Tja, TTM_SETDELAYTIME
https://learn.microsoft.com/en-us/wi...m-setdelaytime

Jetzt mußt du nur noch rausbekommen, wie du an dessen Handle kommst.
Oder an den Systemeinstellungen rumpfuschen ... siehe Remarks
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Nov 2023 um 16:13 Uhr)
  Mit Zitat antworten Zitat