kan man få delar av en TForm transparent? Dvs så man ser ex skrivbordet, använder Delphi 7 personal ed.
Transparent
2 svar · 256 visningar · startad av msossna
Så här kan du göra:
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(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(Handle, FullRgn, True);
end;
procedure TForm1.UndoTransparent;
begin
FullRgn := CreateRectRgn(0, 0, Width, Height);
CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn(Handle, FullRgn, True);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MakeTransparent
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
UndoTransparent
end;
du kan även sätta Alphablend på forumläret.
Sätt alpahblend till true och ändra på AlphaBlendValue för att ange hur genomskinligt formuläret ska vara.
Skillnaden mellan mitt exempel och SBs exempel är att med SBs kod så blir formuläret inte bara genomskinligt utan forumläret (exkl. komponenterna på det) "försvinner" så man kan klicka "genom" formuläret för att komma åt grejorna bakom det.
Genom att ändra alphablend så blir allting genomskinligt inkl. komponterna. Formuläret finns fortfarande kvar så du kan inte klicka "genom" formuläret.
/Ante S