Thema: Delphi Hint überschreiben

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Hint überschreiben

  Alt 3. Aug 2010, 21:37
Entweder du mußt ständig/regelmäßig alle Hint-Texte anpassen, also vorsorglich bevor sie angezeigt werden könnten, oder ...


entweder man definiert einen Marker, welcher dann ersetzt wird:
Delphi-Quellcode:
Label1.Hint := ':MyHint:'; // natürlich im OI deklariert
Label1.ShowHint := True;

procedure TForm5.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := ShowHint;
end;

procedure TForm5.ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: Controls.THintInfo);
begin
  if HintStr = ':MyHint:then
    HintStr := 'die aktuelle Zeit ist ' + TimeToStr(Now);
  if HintStr = ':MyOtherHint:then
    HintStr := 'das aktuelle Datum ist ' + DateToStr(Now);
end;
das geht auch mit Teilen
Delphi-Quellcode:
Label1.Hint := 'die aktuelle Zeit ist :MyHint:';
Label1.ShowHint := True;

procedure TForm5.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := ShowHint;
end;

procedure TForm5.ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: Controls.THintInfo);
begin
  HintStr := StringReplace(HintStr, ':MyHint:', TimeToStr(Now), []);
  HintStr := StringReplace(HintStr, ':MyOtherHint:', DateToStr(Now), []);
end;
man kann aber auch über's Control gehn:
Delphi-Quellcode:
procedure TForm5.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := ShowHint;
end;

procedure TForm5.ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: Controls.THintInfo);
begin
  if HintInfo.HintControl = Label1 then
    HintStr := 'die aktuelle Zeit ist ' + TimeToStr(Now);
end;
ShowHint wird immer aufgerufen, kurz bevor irgendein Hint angezeigt wird.


Aber schöner wäre es natürlich, wenn in jeder Komponente auch ein OnHint existieren würde, damit man vor Ort reagieren und sich dort entsprechende Eventhandler schreiben könnte.

Gut, man könnte auch ein anderes Event mißbrauchen, welches man sonst nirgends in der Anwendung verwendet hat.
> OnEndDock bietet sich oftmals an
Delphi-Quellcode:
Label1.ShowHint := True;
Label1.OnEndDock := Label1EndDock;

procedure TForm5.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := ShowHint;
end;

procedure TForm5.ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: Controls.THintInfo);
begin
  if Assigned(TForm(HintInfo.HintControl).OnEndDock) then
  begin
    TForm(HintInfo.HintControl).OnEndDock(HintInfo.HintControl, nil, 0, 0);
    HintStr := TForm(HintInfo.HintControl).Hint;
  end; // TForm wurde nur verwendet, da .Hint und
end; // .OnEndDock in TControl als protected deklariert sind

procedure TForm5.Label1EndDock(Sender, Target: TObject; X, Y: Integer);
begin
  TLabel(Sender).Hint := 'die aktuelle Zeit ist ' + TimeToStr(Now);
  // oder Label1.Hint := 'die aktuelle Zeit ist ' + TimeToStr(Now);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Aug 2010 um 21:56 Uhr)
  Mit Zitat antworten Zitat