Autor |
Beitrag |
Schmidti
Beiträge: 17
Win 2000 Prof., WIN XP Rrof.
D7
|
Verfasst: Sa 01.05.04 23:01
Hallo,
wie bekomme ich denn den Hintergund meiner DELPHI-Anwendung am Besten transparent, so dass die ganzen Objekte dann wie in der Luft schweben?
Danke.
MfG
|
|
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 02.05.04 10:46
Schmidti hat folgendes geschrieben: | wie bekomme ich denn den Hintergund meiner DELPHI-Anwendung am Besten transparent, so dass die ganzen Objekte dann wie in der Luft schweben? |
Hallo, das hier ist sicher das, was du suchst:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure MakeFormTransparent(Form: TForm); var AControl: TControl; A, Margin, X, Y, CtlX, CtlY: Integer; ClientRgn, FullRgn, CtlRgn: HRGN; begin with Form do begin Margin := (Width - ClientWidth) div 2; FullRgn := CreateRectRgn(0, 0, Width, Height); X := Margin; Y := Height - ClientHeight - Margin; ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight); CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF); for A := 0 to ControlCount - 1 do begin AControl := Controls[A]; if (AControl is TWinControl) or (AControl is TGraphicControl) then with AControl do begin if Visible then begin CtlX := X + Left; CtlY := Y + Top; CtlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height); CombineRgn(FullRgn, FullRgn, CtlRgn, RGN_OR); end; end; end; SetWindowRgn(Form.Handle, FullRgn, True); end; end;
procedure UndoFormTransparent(Form: TForm); var FullRgn: HRGN; begin with Form do begin FullRgn := CreateRectRgn(0, 0, Width, Height); CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY); SetWindowRgn(Handle, FullRgn, True); end; end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Bedaahr14
Hält's aus hier
Beiträge: 2
Win XP
D6 Prof
|
Verfasst: Sa 19.06.04 14:00
Sehr edel gelöst, du könntest allerdings auch nur die Trasparentcolorvalue von der Form auf z.B. schwarz setzen und dann die color auf das gleiche, und transparentcolor:= true. Fertig
_________________ Bug oder Feature? Wir wissen es nicht so genau...
|
|
raziel
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Sa 19.06.04 14:04
Bedaahr14 hat folgendes geschrieben: | Sehr edel gelöst, du könntest allerdings auch nur die Trasparentcolorvalue von der Form auf z.B. schwarz setzen und dann die color auf das gleiche, und transparentcolor:= true. Fertig |
Was aber afaik nur unter W2k und später funktioniert...
//edit: könnte aber auch sein, dass das nur auf die Alpha-Eigenschaft der Form zutrifft, bin mir nich mehr sicher... Hab grad leider weder W9x mit Delphi drauf zur Hand
_________________ JSXGraph
|
|
MartinPb
Beiträge: 698
|
Verfasst: Sa 19.06.04 14:31
Bedaahr14 hat folgendes geschrieben: | Sehr edel gelöst, du könntest allerdings auch nur die Trasparentcolorvalue von der Form auf z.B. schwarz setzen und dann die color auf das gleiche, und transparentcolor:= true. Fertig |
Nicht fertig!
Das sind zwei verschiedene Methoden mit zwei verschiedenen Ergebnissen. Deine Methode, Bedaahr14, macht nur das Fourmular durchsichtig. In älteren Windowsversionen kommt an dieser Stelle eine Fehlermeldung, wenn man es nicht abfängt oder Versionsabhängig programmiert. Die Methode von Galagher arbeitet mit Windowsregionen. Alles was innerhalb einer Region ist, ist sichtbar. Alles was außerhalb einer Version ist, ist nicht nur unsichtbar, sondern auch nicht vorhanden. Man kann also nicht nur durch diese leeren Bereiche durchsehen, sondern auch durchklicken. Bei der ersten Variante hat man nur eine durchsichtige Form, bei der zweiten eine Sonderform.
_________________ Gruß
Martin
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 19.06.04 14:37
Zumindest auf meinem System kann man bei beiden Varianten auch durch das Formular klicken :roll:
|
|
|