Autor Beitrag
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Sa 28.08.04 12:35 
hallo users

ich möchte meine form an bestimmten stellen transparent machen. nicht ganz durchsichtig sondern nur halb mit ca 30% transparenz

ich hab mir schon folgenden code angeschaut:

www.swissdelphicente.../showcode.php?id=982

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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
private 
    { Private declarations } 
    FullRgn, ClientRgn, CtlRgn: THandle; 
    procedure MakeTransparent; 
    procedure UndoTransparent; 
  end

{...} 

implementation 

{...} 

procedure TForm1.MakeTransparent; 
var 
  AControl: TControl; 
  A, Margin, X, Y, CtlX, CtlY: Integer; 
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(Handle, FullRgn, True); 
end

procedure TForm1.UndoTransparent; 
begin 
  FullRgn := CreateRectRgn(00, Width, Height); 
  CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY); 
  SetWindowRgn(Handle, FullRgn, True); 
end

// Test it: 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  MakeTransparent 
end

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  UndoTransparent 
end;


das scheint genau das zu sein was ich brauche. nur ist der bereich der dort definiert wird voll transparent. gibt es eine möglichkeit für diesen bereich (wie bei TForm AlphaBlend) einen transparent wert zu übergeben?

danke schon einmal im vorraus

mfg cbs
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 29.08.04 10:53 
Guten Morgen!

Ich habe das jetzt nicht getestet aber versuche doch mal die Rect-Angabe in Zeile 20 zu ändern um zu schauen ob man so den Bereich bestimmen kann welcher Transparent dargestellt wird.

Gruß
Tino
cbs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: So 29.08.04 11:12 
hallo Tino

ja ich kann unter anderem mit dieser angabe den bereich bestimmen.

das ist auch genau das was ich brauche.

nur möchte ich diesen bereich halbtransparent machen. mit oben genannten code ist der bereich vollkommen durchsichtig. ich möchte aber die transparenz wie beim formular (alpablend und alphablendvalue) einstellen können, um z.b. eine 30% transparenz zu erreichen.

es geht also nicht um die definition des bereiches sondern um den grad der transparenz.

trotzdem danke für deine antwort :)
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 29.08.04 12:10 
Ich behaupte jetzt mal, dass es so nicht möglich ist. Alphablend ist ja eine Eigenschaft einer Form. Ich kann mir nicht vorstellen, dass man sozusagen für verschiedene Bereiche der Form auch verschiedene Alphablend werte setzen kann.

Die einige, aber recht komplizierte Lösung, die ich sehe, ist, mehrere Form zu erzeugen und die dann in die jetzigen "ganz durchsichtigen" Löcher maßgerecht reinzuschneidern. Dann kannst du bei denen jeweils die Alphablend Werte nach Belieben setzen.
cbs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: So 29.08.04 12:41 
hallo Elite*

wenn ich mehrere forms syncron verschieben kann wärs eine lösung.

mir ist aber grade der gedanke gekommen das es auch reichen würde wenn ich das ganze andersrum angehe. heißt das formular 30% tranzparent mache und ich einige elemente voll darstelle. ich brache nur ein paar linien (TShape oder über canvas gemahlt) ein paar labels (oder von mir aus auch über canvas gemahlt) und 2 oder 3 buttons.

ist also nicht viel.

gibs da eine möglichkeit?
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 29.08.04 13:17 
cbs hat folgendes geschrieben:
ich brache nur ein paar linien (TShape oder über canvas gemahlt) ein paar labels (oder von mir aus auch über canvas gemahlt) und 2 oder 3 buttons.


Tja, da gibt es nur ein Problem: All diese Steuerelemente haben auch 30% Transparenz. Oder kann man das irgendwie abstellen?

Ich würde nach wie vor zu Variante 1 tendieren.