![]() |
AW: Hint überschreiben
Wieso muß man eigentlich einen eigenen Hint-Property erstellen?
Die VCL kennt nur "ihr" Property und nutzt auch dieses für die Anzeige. Was sie nicht kennt, das kann die VCL nicht nutzen. |
AW: Hint überschreiben
Zitat:
|
AW: Hint überschreiben
Zitat:
Ausserdem haben die Komponenten noch Eigenschaften, die sie mit der Steuerung verknüpfen, welches Eingangsbit, oder Merkerbit z.b. mit der Komponente angesprochen wird. Diese Info möchte ich zusätzlich zur eigentlichen Komponentenbedeutung im Hint anzeigen, also z. B. "Kontrollschalter Türe (Eingang 8.0)", aber nicht grundsätzlich, sondern wählbar. Gruß Rainer |
AW: Hint überschreiben
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:
das geht auch mit Teilen
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;
Delphi-Quellcode:
man kann aber auch über's Control gehn:
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;
Delphi-Quellcode:
ShowHint wird immer aufgerufen, kurz bevor irgendein Hint angezeigt wird.
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; 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; |
AW: Hint überschreiben
Zitat:
|
AW: Hint überschreiben
Klar könnte man im Prinzip alle Hints sofort anpassen, wo sich der Status ändert.
Also entweder bekommt man die Änderung mit und ändert da auch den Hint oder man pollt eben über 'nen Timer o.Ä. und fragt ständig alle Status (mit langem U oder halt Statusse :stupid:) abund setzt die Hints neu. Auch wenn die meisten der jedesmal gesetzten Hints wohl niemals angezeigt wird. (also könnte man das Ganze uch wieder als Pollen bezeichnen, was aus irgendwelchen unerfindlichen Gründen einige/viele nicht mögen :roll: ) Oder man reagiert eben auf das Anzeigen eines Hints, fragt kurz den aktuellen Status ab und setzt nur diesen einen Hint. |
AW: Hint überschreiben
Mal ein anderer Lösungsansatz:
Hints sind in der Regel zweigeteilt. Es gibt den Shorthint und den LongHint. Untergebracht sind beide im Hinttext, getrennt durch das Pipe-Symbol. WEnn man jetzt zur Laufzeit etwas einfach an den Hint dranhängt, dann hängt man eigentlich etwas an den Longhint-Anteil an. Ich habe nicht den blassesten Dunst eines Schimmers einer ahnung, wo und wann zum Henker der Longhint eigentlich angezeigt werden soll. Ich hab ihn jedenfals noch nie gesehen. Also muss der Hint zur Laufzeit von dem "|" befreit werden, dann sollte das IMHO auch klappen. Sherlock PS: Falls das alles Kokolores ist, bitte schnell wieder vergessen. PPS: Die OH sagt zum LongHint, der könne im OnHint mit GetLongHint extrahiert werden...für eine weitere Verwendung. S. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz