AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi wie transparentes hint? auch verallgemeinerbar?
Thema durchsuchen
Ansicht
Themen-Optionen

wie transparentes hint? auch verallgemeinerbar?

Ein Thema von s.h.a.r.k · begonnen am 23. Okt 2007 · letzter Beitrag vom 23. Okt 2007
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

wie transparentes hint? auch verallgemeinerbar?

  Alt 23. Okt 2007, 15:08
hallo,

mich würde es interessieren, ob es möglich ist den hint einer komponente transparent zu schalten? ich will hierbei aber keine andere komponente verwenden! es soll der standard-hint sein.

ebenso müsste es doch evtl. möglich sein jede komponente irgendwie transparent zu bekommen?! wie machen das andere komponenten?

mit freundlichen grüßen
der hai
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: wie transparentes hint? auch verallgemeinerbar?

  Alt 23. Okt 2007, 16:38
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz