Autor Beitrag
VT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 31.12.02 20:42 
Hi!

Ich möchte eine Komponente programmieren die an bestimmten Stellen transparent ist, d.h. Objekte die unter dem Steuerelement sind sollen an den transparenten Stellen durchscheinen. Meine Komponente ist von TCustomControl abgeleitet. Nun macht aber diese Klasse keine transparenten Darstellungen weil der Hintergrund standardmäßtig mit BtnFace Color belegt wird. Ich benötige jedoch die EIgenschaften von CustomControl (speziell die doulbebuffered Eigenschaft) und kann deswegen nicht auf TGraphicControl ausweichen welches z.B. die Transparenz anbietet. Nun wie mache ich das der Hintergrund nicht standardmaeßig mit BtnFace gefüllt wird?

MfG
Daniel
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 02.01.03 22:53 
Das ist nur ein Gedankenspiel:
Lade dir ein Bild deines Formulars in eine Bitmap und lasse die Komponente aus der Bitmap lesen. Das ist zwar nicht so schnell, sollte aber funktionieren.

Mit GetFormImage kannst du das Form laden und mit CopyRect kannste das dann kopieren.

Ich hoffe das dir das erstmal hilft!

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
VT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Do 02.01.03 22:58 
Fette Idee. Danke. Wär ich nie drauf gekommen...

*Freu* :P

MfG
Daniel
Thunderman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 26



BeitragVerfasst: Fr 03.01.03 01:13 
Hallo!

Bei von TCustomControl abgeleiteten Komponenten geht das auch mit Überschreiben der Prozedur CreateParams
Hier ein Beispiel von mir:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TSkinButton.CreateParams(var Params: TCreateParams);
begin
  { call the create of the params }
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle + WS_EX_Transparent;
  ControlStyle := ControlStyle - [csOpaque] + [csAcceptsControls];
end;


Allerdings habe ich bei dieser Art der Transparenz noch Probleme, wenn ich ne eigene Paint-Methode verwende. Vielleicht weiß dafür ja noch jemand ne Lösung.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?