Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Brennende Hinweise (FMX-Hints)

  Alt 17. Aug 2012, 23:33
Nur noch eine kleine Erweiterung.

- Im OnShowHint kommt man nun auch an das ElternControl ran, wo der Hint dran hängt, wenn es Eines geben sollte.

- Und der nachfolgende Code für http://www.delphipraxis.net/169822-f...iremonkey.html

Delphi-Quellcode:
procedure TForm9.Edit3Exit(Sender: TObject); // OnExit des Edit3
begin
  if Edit3.Text = 'then
    TExitManager.DontExit(Sender); // TExitManager.DontExit(Sender, 'Bitte einen Wert eingeben.');
end;
Der Code entspricht in etwa Folgendem, so wie man es aus der VCL kennt, was aber im FMX nicht mehr funktioniert.
Delphi-Quellcode:
// im OnExit des Edit3
if Edit3.Text = 'then begin
  ShowMessage('Fehlerhafte Eingabe');
  Edit1.SetFocus;
end;
Delphi-Quellcode:
type
  TExitManager = class abstract
  private class var
    FManager: THintManager;
    FGlow: TGlowEffect;
  private
    class procedure HideHint(Sender: TObject);
    class function ShowHint(Sender: TObject; Form: TCustomForm; Position: TRectF; Text: string; Image: THintImage; AssignedComp: TControl): Boolean;
  public
    class procedure DontExit(Sender: TObject; UserMessage: string = '');
    class destructor Destroy;
  end;

class destructor TExitManager.Destroy;
begin
  FreeAndNil(FManager);
  FreeAndNil(FGlow);
end;

class procedure TExitManager.DontExit(Sender: TObject; UserMessage: string);
begin
  if not (Sender is TControl) then
    raise Exception.Create('nee, so nich');
  if not Assigned(FManager) then begin
    FManager := THintManager.Create(nil);
    FManager.GlowColor := TAlphaColorRec.Firebrick;
    FManager.GlowEnabled := True;
    FManager.OnShowHint := ShowHint;
    FManager.OnHideHint := HideHint;
    FGlow := TGlowEffect.Create(nil);
    FGlow.GlowColor := TAlphaColorRec.Firebrick;
  end;
  if Trim(UserMessage) = 'then
    UserMessage := 'Fehlerhafte Eingabe';
  FManager.ShowHint(TControl(Sender), UserMessage, hiDefault, True);
  (TControl(Sender) as IControl).DoEnter;
  Abort;
end;

class procedure TExitManager.HideHint(Sender: TObject);
begin
  FGlow.Parent := nil;
end;

class function TExitManager.ShowHint(Sender: TObject; Form: TCustomForm; Position: TRectF; Text: string; Image: THintImage; AssignedComp: TControl): Boolean;
begin
  //AssignedComp.InsertObject(0, FGlow); // FGlow.Parent := AssignedComp; FGlow.BringToFront;
  Result := False;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat