본문 바로가기

Delphi/꿀팁

투명 패널 만들기(Transparency Panel)

uses

  Windows;

procedure TransPanel(var panel : TPanel);

var

  I, X, Y : Integer;

  FullRgn, ClientRgn, ControlRgn : THandle;

  Margin, MarginX, MarginY : Integer;

begin

  Margin := (panel.Width - panel.ClientWidth) div 2;

  MarginX := Margin;

  MarginY := panel.Height - panel.ClientHeight - Margin;


  FullRgn   := CreateRectRgn(0, 0, panel.Width, panel.Height);

  ClientRgn := CreateRectRgn(MarginX, 

                                     MarginY, 

                                     MarginX + panel.ClientWidth, 

                                     MarginY + panel.ClientHeight);


  CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);

  for I := 0 to panel.ControlCount - 1 do

  begin

    X := MarginX + panel.Controls[I].Left;

    Y := MarginY + panel.Controls[I].Top;

    ControlRgn := CreateRectRgn(X,

                                         Y,

                                         X + panel.Controls[I].Width,

                                         Y + panel.Controls[I].Height);

    CombineRgn(FullRgn, FullRgn, ControlRgn, RGN_OR);

  end;

  SetWindowRgn(panel.Handle, FullRgn, True);

end;

begin

  TransPanel(Panel1);

end;


반응형