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;