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:
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;
In den dann bereits verwendeten Events muss man die Aufrufe auf die Hintunit selber ergänzen, also in
OnMouseEnter mit HintEnter (self, sender)
OnMouseLeave mit HintExit (self, sender)
Konkretes Beispiel:
Delphi-Quellcode:
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;
Die aktualisierte
Unit habe ich beigefügt.