![]() |
AW: Firemonkey Workarounds
Liste der Anhänge anzeigen (Anzahl: 2)
So, ich habe mal einen weiteren Workaround entwickelt und zwar für die fehlenden Hints in FireMonkey. Zwar hatte himitsu da auch schon mal was gemacht, das war aber eine Komponente und wenn ich das richtig sehe, wurde die nicht für XE4 bzw. XE5 weiterentwickelt (wenn ich hier was übersehen haben sollte, bitte Info).
Die Komponente von himitsu (eine tolle Leistung, wie ich finde) hatte zwar noch einige weitere Fähigkeiten, wie etwa Grafikanzeige im Hint. Aber ich denke für die meisten Anwendungsfälle wird das gar nicht benötigt und ich persönlich ziehe immer die Verwendung einfacher units vor, alles in einer Datei, da gibt es auch keine Probleme beim Wechsel von einer Delphi-Version zur nächsten (also nicht erneut Package / Komponenten installieren, usw). Meine Lösung ist denkbar einfach (gerade mal 200 Zeilen) und bei Bedarf erweiterbar und funktioniert für XE2 bis XE5 sowohl unter Windows als auch auf dem MAC. Mann muss nur die Unit HS_FMXHints.pas in die jeweiligen Forms einbinden, wo man Hints verwenden möchte. Im Oncreate-Ereignis der Form (oder in einer separaten Form-Procedure) setzt man dann die Hints mit einfachen Aufrufen wie
Delphi-Quellcode:
Bei Bedarf kann man vorgegebene Standardeinstellungen für die Hints mit der Procedure
SetAHint (Button1, 'Dies ist ein Hint für Button1');
Delphi-Quellcode:
überschreiben.
SetHintSetting (TimeBeforeShow, TimeToShow: Integer; DynamicShow: Boolean; TC: TAlphaColor);
Bevor ich mir hier noch einen Wolf schreibe, verweise ich der Einfachheit halber auf ein kurzes Video, das ich auf YouTube gepostet habe. Hier ist der Link: ![]() Die Lösung hat 1-2 kleinere Einschränkungen, wird im Video angesprochen. Die Unit könnt Ihr frei verwenden wie Ihr wollt, Nutzung natürlich auf eigene Verantwortung. Das Teil ist sicher noch ausbaufähig (und kann man wohl auch ein wenig "schicker" schreiben), aber ich denke, dennoch ganz nützlich, insbesondere, wenn man sonst keine Möglichkeit kennt, Hints in FMX-Anwendungen zu verwenden. Ich gebe ja die Hoffnung nicht auf und erwarte das von Haus aus in einer der nächsten Delphi XE-Versionen. Screenshot und Unit anbei. |
AW: Firemonkey Workarounds
Liste der Anhänge anzeigen (Anzahl: 1)
Na, kaum gemacht, schon hat mich eine der "Einschränkungen" eingeholt. Ich benötige in einem Projekt doch die OnMouseEnter und OnMouseLeave Ereignisse, da wär es dann blöd, wenn die überschrieben werden.
Habe die HS_FMXHints.pas daher geändert, so dass eine Überschreibung nicht stattfindet, wenn für die Controls schon Events vorhanden sind:
Delphi-Quellcode:
In den dann bereits verwendeten Events muss man die Aufrufe auf die Hintunit selber ergänzen, also in
procedure SetAHint (ic: TObject; txt: string);
begin if ic is TButton then begin TButton (ic).Hint := txt; if not Assigned (TButton (ic).OnMouseEnter) then TButton (ic).OnMouseEnter := EventEnter; if not Assigned (TButton (ic).OnMouseLeave) then TButton (ic).OnMouseLeave := EventExit end; if ic is TSpeedbutton then begin TSpeedButton (ic).Hint := txt; if not Assigned (TSpeedButton (ic).OnMouseEnter) then TSpeedButton (ic).OnMouseEnter := EventEnter; if not Assigned (TSpeedButton (ic).OnMouseLeave) then TSpeedButton (ic).OnMouseLeave := EventExit end; if ic is TLabel then begin TLabel (ic).Hint := txt; if not Assigned (TLabel (ic).OnMouseEnter) then TLabel (ic).OnMouseEnter := EventEnter; if not Assigned (TLabel (ic).OnMouseLeave) then TLabel (ic).OnMouseLeave := EventExit; end; end; OnMouseEnter mit HintEnter (self, sender) OnMouseLeave mit HintExit (self, sender) Konkretes Beispiel:
Delphi-Quellcode:
Die aktualisierte Unit habe ich beigefügt.
procedure Tfrm_Main.sbNewMouseEnter(Sender: TObject);
begin TSpeedButton (sender).StyleLookup := 'sbNewStyle2'; {$IFDEF MSWINDOWS} if AktFormStyle = 'ObsedianStyle' then begin TSpeedButton (sender).FontColor := TAlphaColors.Black; end; {$ENDIF} HintEnter (self, sender); end; procedure Tfrm_Main.sbNewMouseLeave(Sender: TObject); begin TSpeedButton (sender).StyleLookup := 'sbNewStyle1'; {$IFDEF MSWINDOWS} if AktFormStyle = 'ObsedianStyle' then begin TSpeedButton (sender).FontColor := TAlphaColors.White; end; {$ENDIF} HintExit (self, sender); end; |
AW: Firemonkey Workarounds
Zitat:
Die viel sinnvollere Variante ist aber TVirtualMethodInterceptor zu benutzen und die Prozeduren MouseDown usw. direkt abzufangen ohne die Events überhaupt anzutasten... ![]() Denn die Events sollten wirklich nur für die direkte Benutzung einer spezifischen Komponente benutzt werden, nicht für so allgemeine Funktionalität. // EDIT: Höchstens ist die Frage, ob das ganze die Performance zu stark beeinträchtigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz