Autor Beitrag
Schmidti
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 2000 Prof., WIN XP Rrof.
D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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:

ausblenden volle Höhe Delphi-Quelltext
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:
{Formular transparent machen}
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(00, 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;

{Formular nicht transparent machen}
procedure UndoFormTransparent(Form: TForm);
var
  FullRgn: HRGN;
begin
 with Form do
 begin
  FullRgn := CreateRectRgn(00, 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
BeitragVerfasst: 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 :wink:

_________________
Bug oder Feature? Wir wissen es nicht so genau...
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: 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 :wink:

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: 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 :wink:


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



BeitragVerfasst: Sa 19.06.04 14:37 
Zumindest auf meinem System kann man bei beiden Varianten auch durch das Formular klicken :roll: