AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HintPause in FireMonkey?

Ein Thema von schorsch666 · begonnen am 30. Okt 2023 · letzter Beitrag vom 6. Nov 2023
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 15:18
Zitat:
Wie gesagt, Dein Vorschlag lässt sich nicht kompilieren
Kann eigentlich nicht sein. (aber ich würde vorschlagen die VCL-Units als Ersts ins Uses zu schreiben)

Und, wie gesagt, das ist nur für Windows ... Android, iOS, OSX usw. nutzen ein anderes Backend.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 15:38
Hmmmm, gibt es überhaupt einen Timeout?
[edit]
Ups, falschrum ... HintPause, nicht HidePause.
Außerdem hab ich vergessen Max hochzusetzen

Und Vcl.Forms.Application.HintPause und .HintHidePause haben eh keine Wirkung.
[/edit]

Bei mir werden die Hints ewig angezeigt,
und bei ControlType=Platform werden garkeine Hints angezeigt.
Angehängte Dateien
Dateityp: 7z HintTest.7z (2,30 MB, 0x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Nov 2023 um 15:42 Uhr)
  Mit Zitat antworten Zitat
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
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 16:30
...hab mir das schon gedenkt. macht probs

(siehe anhang)
Weiterhin könntest Du auch, falls Dir bei der Aufteilung in Zeilen wichtig ist, wann der Zeilenumbruch stattfindet auch noch folgenden Code nach der Berechnung der Höhe des Callouts einfügen (= vor der Zeile "AcallHint.width := aw"):

Delphi-Quellcode:
if pos (slinebreak, lab.Text) <> 0 then begin
  ACallhint.Height := ACallHint.Height + (CountLineBreaks (lab.Text) * lab.canvas.textheight ('T'));
end;
Die Function "CountLinebreaks" sieht so aus (da gibt es wohl gar nichts fertiges in Delphi?):

Delphi-Quellcode:
function CountLinebreaks (S: string): Integer;
  var start: Integer;
  begin
    Result := 0;
    start := 1;

    while pos (sLineBreak, s, start) <> 0 do begin
      Inc (Result);
      start := pos (sLineBreak, s, start) + 2;
    end;
  end;

Wenn Dein Button hint, also so erstellt wurde:
button1.Hint := 'Zeile 1 ' + sLineBreak + 'Zeile 2 ' + slinebreak + 'Zeile 3'; sieht das Ergebnis dann wie im anliegenden Screenshot gezeigt aus.

Um diesen Fall der evtl. Gestaltung der Hints zu berücksichtigen baue ich das auch noch in meine Unit ein und lade die aktualisierte Fassung noch mal hoch.

Ich glaube ich habe noch nicht erwähnt, dass die Unit sowohl unter Windows, als auch unter Linux und MacOS funktioniert.
Miniaturansicht angehängter Grafiken
hints.png  

Geändert von Harry Stahl ( 1. Nov 2023 um 16:51 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#15

AW: HintPause in FireMonkey?

  Alt 2. Nov 2023, 15:06
Das findet anscheinend zentral in FMX.Forms.TApplication statt.

Delphi-Quellcode:
    /// <summary>Cancels the display of a hint for a control.</summary>
    procedure CancelHint;
    /// <summary>Hides the current hint.</summary>
    procedure HideHint;
    /// <summary>Occurs when the mouse pointer moves over a control or menu item that can display a Help Hint.</summary>
    property OnHint: TNotifyEvent read FOnHint write FOnHint;
Man könnte schlimmstenfalls OnHint abfangen und da seinen eigenen Timer laufen lassen,
der den Hint dann mit CancelHint oder HideHint brutal abbricht.
  Mit Zitat antworten Zitat
schorsch666

Registriert seit: 21. Apr 2011
81 Beiträge
 
#16

AW: HintPause in FireMonkey?

  Alt 2. Nov 2023, 16:55
hmmmm. finde ich irgendwie alles nicht prickelnd - und die unit von harry, ok, aber zb bei einem groesseren memo - da geht der hint auf, wo die maus gerade ist... ich moechte eigtl. auch ungern "fremde" units in meinen progs und was aufzublaehen, was im kern da ist - nee, will ich auch nicht. ausserdem bauen viele externe kompos auf der "normalen" hint-logik auf - und da will ich nix veraendern.

ich dachte halt, es gibt da etwas, analog zur vcl - und das unter allen bs laeuft. naja, muessen die leute halt schneller lesen

tks in die runde...

...de Schorsch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: HintPause in FireMonkey?

  Alt 2. Nov 2023, 18:49
naja, muessen die leute halt schneller lesen
Meinst du jetzt wirklich die HintPause (Verzögerung, bis angezeigt wird)
oder die HintHidePause (Dauer der Anzeige)

Wie schon gesagt, bleibt bei mir (im Windows) der Hint scheinbar unbegrenzt lange sichtbar.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
schorsch666

Registriert seit: 21. Apr 2011
81 Beiträge
 
#18

AW: HintPause in FireMonkey?

  Alt 6. Nov 2023, 10:43
HintHidePause (Dauer der Anzeige)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz