Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Transparenz bei eigener Komponente ein- bzw. ausschalten (https://www.delphipraxis.net/74384-transparenz-bei-eigener-komponente-ein-bzw-ausschalten.html)

Mazel 2. Aug 2006 11:55


Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Hallo,

um meine eigene Komponente transparent zu machen, nutze ich folgen Code:
Delphi-Quellcode:
procedure TMJGroupBox.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.ExStyle:=Params.ExStyle + WS_EX_Transparent;
end;
Das funktioniert auch, aber wie kann ich es einstellen, ob ich die Transparenz haben möchte oder nicht?
Ich dachte da an:
Delphi-Quellcode:
Transparent := False;
Nur weiss ich nicht, wie ich das abfragen soll? Muss ich diese CreateParms Prozedur erneut aber mit anderen Parametern aufrufen oder so umstellen das ich sie 2 mal verwenden kann?

Gruß
Mazel

jfheins 2. Aug 2006 12:01

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Ich glaube, du solltest dir mal MSDN-Library durchsuchenGetWindowLong in zusammenhang mit GWL_EXSTYLE anschauen ;)

Mazel 2. Aug 2006 12:09

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Hi,

danke. GetWindowLong ist mir bekannt, ich dachte aber das es eine andere Möglichkeit gibt. Bisher habe ich GetWindowLong nur für Forms verwendet um sie entweder volltransparent oder teiltransparent zu machen wie bei diesem Programm:

Wivi 06 - macht Fenster transparent.


Geht diese Funktion auch bei Komponenten? Und sie geht doch nur ab Windows 2000?

Gruß
Mazel

himitsu 2. Aug 2006 12:16

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
In Windows ist nahezu alles ein "Window" ... also Forms, Edit, Labels, Buttons ...

Es wird auch all dieses mit CreateWindows(Ex) erzeugt.


Windows heißt ja nicht umsonst so :zwinker:

jfheins 2. Aug 2006 12:18

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Zitat:

Zitat von himitsu
In Windows ist nahezu alles ein "Window" ... also Forms, Edit, Labels, Buttons ...

Es wird auch all dieses mit CreateWindows(Ex) erzeugt.

Also zumindest bei Delphis TLabel wäre mir neu dass das ein Fenster ist :mrgreen:

Der Rest stimmt ;)

Mazel 2. Aug 2006 12:22

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Ok,

stimmt. :)

(Labels sind keine Fenster :wink:)

Gibt es eine andere Möglichlkeit als mit GetWindowLong?

Gruß
Mazel

jfheins 2. Aug 2006 12:24

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Naja .... du könntest das Fenster zerstören und neu erstellen lassen, doch das wäre ungleich aufwändiger und weniger ...sexy... als den Wert für den Ex. Style einfach mit Get/SetWindowLong zu verändern ;)

Dein Setter würde jetzt ungeähr so aussehen:
Delphi-Quellcode:
procedure TDingsDa.SetTransparency(const Value: Boolean);
begin
  FTransparency := Value;

  if Value then
    SetWindowLong(Handle,GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_Transparent);
  else
    SetWindowLong(Handle,GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) and not WS_EX_Transparent);
end;

himitsu 2. Aug 2006 12:27

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Ok, dat war'n blödes Beispiel (hab'sch vor kurzem auch gemerkt, als ich das Handle daruf suchte. :wall:

Auch wenn "Labels" STATIC (nicht TLabel) in Windows Windows sind. :roll:

himitsu 2. Aug 2006 12:28

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
Zitat:

Zitat von jfheins
Naja .... du könntest das Fenster zerstören und neu erstellen lassen, doch das wäre ungleich aufwändiger und weniger ...sexy... als den Wert für den Ex. Style einfach mit Get/SetWindowLong zu verändern ;)

hast du dir mal die VCL angesehn ... die machen diesen Zerstörungstripp auch ständig :shock:

Mazel 2. Aug 2006 12:33

Re: Transparenz bei eigener Komponente ein- bzw. ausschalten
 
OK.

Dann werde ich das mal versuchenn nur weis ich nicht so recht wie ich das abfragen bzw. setzen soll.
In einer Komponente habe ich wie gesagt noch nicht mit GetWindowLong oder SetWindowLong gearbeitet.

Gruß
mazel


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.
Seite 1 von 2  1 2      

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