8. Hints in FireMonkey nutzen

Seit der ersten FireMonkey-Version gibt es keine Hints für die Controls. Gemeint sind die kleinen gelben Fenster, die aufpoppen, wenn Sie mit der Maus z.B. über einen Schalter fahren.

Eine nützliche Eigenschaft, die leider in FireMokey fehlt. Für den Anwender können die Hints wichtige Unterstützung zum Programmverständnis sein.
Warum diese Hints - auch immer noch - fehlen, ist mir ein Rätsel.

Interessanterweise hat das Object "TControl" aber sehr wohl eine Eigenschaft "Hint", nur wird diese nicht veröffentlicht, ist also privat. Das bedeutet, das man i.d.R. als Entwickler darauf keinen Zugriff hat.

Außer man benutzt einen Hack, wie wir das in meiner Unit "HS_FMXHints.pas" machen:

type
TControl = class (FMX.Controls.TControl);

Dadurch erhalten Sie Zugriff auf die Eigenschaft "Hint".

Wichtiges Detail
: Sie müssen die Unit "HS_FMXHints.pas" als letzte unit aufführen, da ja das TControl verändert wurde. Wenn Sie danach die Unit aufführen, welche die eigentliche Definition von TControl enthält, werden unsere Bemühungen wieder überschrieben und es funktioniert entweder gar nicht oder fehlerhaft.

Leider können wir die Eigenschaft "Hint" nicht im Objektinspektor bearbeiten, sondern müssen sie mit einem Aufruf der Funktion "SetAHint" setzen, was man am besten im Create-Event einer Form macht.

procedure SetAHint (ic: TObject; txt: string);

Als Wert für "ic" geben Sie das Control ein, dem Sie einen Hint verpassen wollen (z.B. TButton, TListbox, was auch immer) und für "txt" den Hintstring.

Die Unit richtet sich selber ein, wenn Sie nur eingebunden wird und nimmt dabei schon bestimmte Standardeinstellungen für den Hint vor. Diese Standardeinstellungen können Sie mit einem Aufruf der Procedure SetHintsetting überschreiben:

procedure SetHintSetting (TimeBeforeShow, TimeToShow: Integer; DynamicShow: Boolean; TC: TAlphaColor);

TimeBeforeShow gibt dabei in Millisekunden an, wie lange gewartet werden soll, bis der Hint angezeigt werden soll (nachdem Sie also die Maus über das Control geführt haben).

TimeToShow beschreibt, wie lange der Hint angegeben werden soll.

DynamicShow, wenn gesetzt, verändert die Anzeigedauer je nach Länge des Hint-Textes. Das ist besonders praktisch, wenn es sich um längere Hinweise handelt.

Procedure HindeHint sollten Sie in jeder Form zur Sicherheit im FormDesytroy-Event aufrufen, in welcher Sie die Hints verwenden. Sie stellt sicher, dass der Hint ausblendet ist und die zu zerstörender Form nicht mehr Parent des Hints ist.

Wichtige Randinformationen:

Die Hint-Funktionalität ist nur einsetzbar bei Controls, welche die Eigenschaft "HitTest" auf "True" gesetzt haben, denn ansonsten wird das Event "OnMouseEnter", welches die HS_FMSHints-Unit verwendet, nicht erzeugt.

Behandlung eines Sonderfallsl

Wenn Sie selber im Objectinspector für ein Control das Event OnMouseEnter (oder OnMouseLeave) auswerten, müssen Sie manuell die Funktion "HintEnter" aufrufen, damit der Hint angezeigt wird (bzw. HintExit, damit er wieder ausgeblendet wird).

Sie können die Unit hier downloaden.

Zur Verwendung der Unit gibt es auch 2 Videos, welche Sie über die nachfolgenden Links aufrufen können. Das erste Video zeigt die Funktionalität etwas ausführlicher, das 2. Video geht auf die letzte aktuelle Fassung der HS_FMXHints-Unit ein.

Video 1 hier klicken

Video 2 hier klicken

Für Anwender, die mein FireMonkey-Buch gekauft haben, gibt es noch ein Zusatzprogramm oben drauf, das Gethints-Programm. Es kann aus einer VCL-DFM-Datei alle Hints auslesen und Aufrufe generieren, die Sie direkt in der Firemonkey-Form für Ihre Controls verwenden können, wenn Sie z.B. die VCL-Form mit dem Mida-Converter in eine FMX-Form ungewandelt haben:

Viel Erfolg mit Delphi und FireMonkey!

Harry Stahl, 27.08.2014