(gelöst) Hints mit TIPHtmlPanel darstellen?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

(gelöst) Hints mit TIPHtmlPanel darstellen?

Beitragvon fliegermichl » 5. Nov 2018, 06:45 (gelöst) Hints mit TIPHtmlPanel darstellen?

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
Zuletzt geändert von fliegermichl am 6. Nov 2018, 09:58, insgesamt 1-mal geändert.
fliegermichl
 
Beiträge: 213
Registriert: 9. Jun 2011, 08:42

Beitragvon pluto » 5. Nov 2018, 15:02 Re: Hints mit TIPHtmlPanel darstellen?

Kann man diese Funktionalität auch für die Hints von eigenen Anwendungen verwenden und falls ja wie?

Im Prinzip ja:
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";


Edit: Ich glaube aber das hast du nicht gemacht, ich habe das Packet mal Nachinstalliert bei mir konnte es aber nicht bemerken... was du meinen könntest.... kannst du mal ein Bild davon machen?
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6702
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon wp_xyz » 5. Nov 2018, 16:13 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:
  • 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.
Im Anhang findest du ein lauffähiges Demo-Projekt.

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 ... Components#JvJans) der JVCL.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
wp_xyz
 
Beiträge: 2669
Registriert: 8. Apr 2011, 08:01

Beitragvon fliegermichl » 6. Nov 2018, 09:32 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
fliegermichl
 
Beiträge: 213
Registriert: 9. Jun 2011, 08:42

Beitragvon wp_xyz » 6. Nov 2018, 09:42 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:

Code: Alles auswählen
procedure THtmlHintWindow.ActivateHint(ARect: TRect; const AHint: String);
begin
  FHtmlPanel.SetHtmlFromStr('<html>' + AHint + '</html>');
  inherited ActivateHint(ARect, '');
end;

Die Checkbox ist nur für einen Test eingebaut, um zur Laufzeit zwischen der normalen und HTML-Hint-Variante umschalten zu können.
wp_xyz
 
Beiträge: 2669
Registriert: 8. Apr 2011, 08:01

Beitragvon fliegermichl » 6. Nov 2018, 09:53 Re: Hints mit TIPHtmlPanel darstellen?

Ja cool, genau danach hatte ich gesucht.
Vielen Dank!
fliegermichl
 
Beiträge: 213
Registriert: 9. Jun 2011, 08:42

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried