Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

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

AW: Firemonkey Workarounds

  Alt 6. Apr 2014, 14:33
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 = 'ObsedianStylethen 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 = 'ObsedianStylethen begin
    TSpeedButton (sender).FontColor := TAlphaColors.White;
  end;
  {$ENDIF}

  HintExit (self, sender);
end;
Die aktualisierte Unit habe ich beigefügt.
Angehängte Dateien
Dateityp: zip HS_FMXHints.zip (2,5 KB, 5x aufgerufen)

Geändert von Harry Stahl ( 6. Apr 2014 um 14:36 Uhr)
  Mit Zitat antworten Zitat