In der Lazarus IDE werden (wenn man das Package turbopoweriprodsgn installiert hat), die Hints als HTML mit Links usw. dargestellt.
Kann man diese Funktionalität auch für die Hints von eigenen Anwendungen verwenden und falls ja wie?
Viele Grüße
Michael
(gelöst) Hints mit TIPHtmlPanel darstellen?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
(gelöst) Hints mit TIPHtmlPanel darstellen?
Zuletzt geändert von fliegermichl am Di 6. Nov 2018, 09:58, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Hints mit TIPHtmlPanel darstellen?
Im Prinzip ja:Kann man diese Funktionalität auch für die Hints von eigenen Anwendungen verwenden und falls ja wie?
Du musst von der Komponente ShowHint anschalten und dann mit Hint einen string vergeben....
Jede Sichtbare Komponente sollte so eine Eigenschaft haben.
Code: Alles auswählen
Panel1.ShowHint:=True;
Panel1.Hint:="Ein Hinweis";
MFG
Michael Springwald
Michael Springwald
Re: Hints mit TIPHtmlPanel darstellen?
Wenn du im Code von forms.pp herumstöberst, findest du die Klasse THintWindow, die für die Darstellung der Hints zuständig ist. Insbesondere gibt es auch eine Variable HintWindowClass = class of THintWindow. Damit kann offenbar THintWindow durch eine eigene Klasse für die Darstellung der Hints ersetzt werden.
Also:
Es hängt natürlich von dem Komplexität des HTML-Codes ab, der in deinen Hint-Texten vorkommen wird, ob IpHtmlPanel die optimale HTML-Komponente ist. Wenn es nur um die Auszeichnung einzelner Zeichen/Wörter etc mit Fett-/Kursiv-Schrift, Unterstreichung oder anderen Farben geht, ist der komplette "Möchte-Gern"-Browner IpHtmlPanel wahrscheinlich Overkill, und mit einem selbstgeschriebenen Renderer für einfachstes HTML ist man wahrscheinlich besser bedient (siehe z.B. JvHTControls aus dem JvCtrls-Package (http://wiki.freepascal.org/JVCL_Components#JvCtrls) oder JvMarkupViewer aus dem JvJans-Package (http://wiki.freepascal.org/JVCL_Compone ... nts#JvJans) der JVCL.
Also:
- Deklariere eine Klasse THtmlHintWindow, die von THintWindow abgeleitet ist: class THtmlHintWindow = class(THintWindow)
- Diese Klasse erhält ein IpHtmlPanel, das die Html-Texte rendert. Das IpHtmlPanel wird im Constructor von THtmlHintWindow erzeugt und client-alignt, damit es das das ganze HintWindow ausfüllt.
- Das HintWindow wird intern durch seine Methode ActivateHint angezeigt. Diese ist virtuell und muss von THtmlHintWindow überschrieben werden, um den als Parameter übergebenen Hint-Text ans IpHtmlPanel weiterzugeben: IpHtmlPanel.SetHtmlFromStr(AHintText)
- Nun muss man sich noch um die Größe des Fensters kümmern. Das IpHtmlPanel hat sicher irgendwo eine Methode versteckt, wie man die Größe der HTML-Ausgabe ermitteln kann - nur kann ich die gerade nicht finden. Feste Werte tun's ersatzweise auch. Diese kann man in der ebenfalls virtuellen Methode CalcHintRect des THintWindow festlegen.
- Letztendlich muss man nun nur noch THtmlHintWindow an die globale HintWindowClass-Variable übergeben, so dass künftig alle Hints als HTML-Texte erwartet und interpretiert werden.
- Achtung: IpHtmlPanel erwartet als minimalen HTML-Frame die Tags <html> und </html>. Um also in dem Hint-Text "Mit diesem Button kann man eine Datei öffnen" die Worte "Datei" und "öffnen" fett darzustellen, muss dem Button der HintText '<html>Mit diesem Button kann man eine <b>Datei öffnen</b></htm>' zugewiesen werden (oder, nach dem die html-Tags immer benötigt werden, setzt man diese erst im ActivateHint.
Es hängt natürlich von dem Komplexität des HTML-Codes ab, der in deinen Hint-Texten vorkommen wird, ob IpHtmlPanel die optimale HTML-Komponente ist. Wenn es nur um die Auszeichnung einzelner Zeichen/Wörter etc mit Fett-/Kursiv-Schrift, Unterstreichung oder anderen Farben geht, ist der komplette "Möchte-Gern"-Browner IpHtmlPanel wahrscheinlich Overkill, und mit einem selbstgeschriebenen Renderer für einfachstes HTML ist man wahrscheinlich besser bedient (siehe z.B. JvHTControls aus dem JvCtrls-Package (http://wiki.freepascal.org/JVCL_Components#JvCtrls) oder JvMarkupViewer aus dem JvJans-Package (http://wiki.freepascal.org/JVCL_Compone ... nts#JvJans) der JVCL.
- Dateianhänge
-
htmlhintwindow.zip
- (2.24 KiB) 132-mal heruntergeladen
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Hints mit TIPHtmlPanel darstellen?
Hallo,
erstmal vielen Dank für die ausführliche Erläuterung.
Dein Beispielprojekt funktioniert bei mir nicht. Wenn die Checkbox unchecked ist, erscheint der Hint mit den Tags also "Das ist ein <b>Button</b>".
Wenn die Checkbox angehakt ist, erscheint nichts. Man sieht aber eine Veränderung des Symbols in der Taskleiste und das Formular verliert auch den Fokus.
Aber ich hab damit schonmal einen Startpunkt.
Viele Grüße
Michael
erstmal vielen Dank für die ausführliche Erläuterung.
Dein Beispielprojekt funktioniert bei mir nicht. Wenn die Checkbox unchecked ist, erscheint der Hint mit den Tags also "Das ist ein <b>Button</b>".
Wenn die Checkbox angehakt ist, erscheint nichts. Man sieht aber eine Veränderung des Symbols in der Taskleiste und das Formular verliert auch den Fokus.
Aber ich hab damit schonmal einen Startpunkt.
Viele Grüße
Michael
Re: Hints mit TIPHtmlPanel darstellen?
Sorry, da ist eine Testversion ins Archiv gerutscht, bei der ich die Höhe der HTML-Ausgabe ermitteln wollte. Entferne die Zeile mit "ARect.Bottom := ..." aus ActivateHint:
Die Checkbox ist nur für einen Test eingebaut, um zur Laufzeit zwischen der normalen und HTML-Hint-Variante umschalten zu können.
Code: Alles auswählen
procedure THtmlHintWindow.ActivateHint(ARect: TRect; const AHint: String);
begin
FHtmlPanel.SetHtmlFromStr('<html>' + AHint + '</html>');
inherited ActivateHint(ARect, '');
end;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Hints mit TIPHtmlPanel darstellen?
Ja cool, genau danach hatte ich gesucht.
Vielen Dank!
Vielen Dank!