Советы по Delphi

         

Прозрачная форма


Dmitry V. Koreyba советует:

Высылаю прогу которая делает прозрачной форму. Может кому-нибудь поможет в его дизайнерских изысканиях.

    var   FullRgn, ClientRgn, CtlRgn : THandle;

procedure TForm1.DoInvisible;
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.FormDestroy(Sender: TObject);
begin
DeleteObject(ClientRgn); DeleteObject(FullRgn); DeleteObject(CtlRgn); end;

procedure TForm1.DoVisible;
begin
FullRgn := CreateRectRgn(0, 0, Width, Height); CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY); SetWindowRgn(Handle, FullRgn, TRUE); end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DoInvisible;
end;

[001150]



Содержание раздела