Wenn du den Standard-Hint veränderst, gilt dieser für alle Komponenten der
VCL, da Tapplication immer nur diesen einen startet. Normalerweise ist dies THintwindow. Du kannst aber auch jederzeit eine andere Klasse als Standard-Hint "registrieren"/angeben. Das THintwindow lässt sich mit sauberer
OOP nicht wirklich mehr verändern. Es scheint dafür nicht ausgelegt wurden zu sein. Zum ändern der Transparenz über die
WinApi hilft uns auch kein Ereignis (TApplicationEvents.OnShowHint), da die
VCL unsere Änderungen gleich wieder zurücksetzt.
Folgende Möglichkeit ist ausreichend kurz:
Delphi-Quellcode:
type TmyHint=class(THintwindow)
procedure ActivateHint(Rect: TRect;
const AHint:
string);
override;
end;
procedure TmyHint.ActivateHint(Rect: TRect;
const AHint:
string);
var style:cardinal;
begin
inherited ActivateHint(rect,aHint);
//hier lassen wir erstmal die VCL werkeln
//und jetzt machen wir das Ding noch transparent
style:=GetWindowLong(
Handle,GWL_ExStyle);
SetWindowLong(
Handle,GWL_EXSTYLE,style
or WS_EX_LAYERED);
//hier noch etwas am Ex-Style ergänzen
SetLayeredWindowAttributes(
Handle,Color,100,LWA_ALPHA);
//alphablendvalue:=100
end;
so, und dann noch TmyHint als Standard-Hint angeben:
Hintwindowclass:=TmyHint;
Dummerweise macht dieses ActiveHint auch noch eine Animation, die kann man nur damit ausschalten (unter D7, könnte in späteren Versionen nicht mehr funktionieren)
Delphi-Quellcode:
procedure TmyHint.ActivateHint(Rect: TRect;
const AHint:
string);
var style:cardinal;
save_animatewindowproc:pointer;
begin
save_animatewindowproc:=addr(animatewindowproc);
animatewindowproc:=nil;
inherited ActivateHint(rect,aHint);
animatewindowproc:=save_animatewindowproc;
style:=GetWindowLong(
Handle,GWL_ExStyle);
SetWindowLong(
Handle,GWL_EXSTYLE,style
or WS_EX_LAYERED);
SetLayeredWindowAttributes(
Handle,Color,100,LWA_ALPHA);
end;
AnimatewindowProc ist ein Zeiger auf die entsprechende
WinApi-Funktion, wenn wir diesen Zeiger kurzfristig auf nil setzen wird die Animation nicht gestartet. Das sieht einfach besser aus, da die Animation darin besteht, das Fenster einzublenden.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.