Q&A

  • 판넬을 투명하게 ...답변이 없군
판넬에서 파생된 콤포넌트를 만들려고 하는데



그 판넬이 투명했으면 합니다.



그 방법을 좀 알려주신다면 감사하..



bevel을 쓰자니

그 위에 어떤 컴포넌트를 올릴 수 가 없고,



Panel을 쓰닌 투명이 안되고 ..



이찌 하오리까 ?





[부탁]힌트라도 좀 줘여...

1  COMMENTS
  • Profile
    김영대 1999.11.02 03:01
    배재민 wrote:

    > 판넬에서 파생된 콤포넌트를 만들려고 하는데

    > 그 판넬이 투명했으면 합니다.

    > 그 방법을 좀 알려주신다면 감사하..

    > bevel을 쓰자니

    > 그 위에 어떤 컴포넌트를 올릴 수 가 없고,

    > Panel을 쓰닌 투명이 안되고 ..

    > 이찌 하오리까 ?

    > [부탁]힌트라도 좀 줘여...



    전에 받아둔 소스인데 참고해 보세요



    Type

    TTransparentPanel = Class(TPanel)

    Private

    Procedure SetParent(AParent:TWinControl); Override;

    Procedure WMEraseBkGnd(Var Message:TWMEraseBkGnd); Message WM_EraseBkGnd;

    Protected

    Procedure CreateParams(Var Params:TCreateParams); Override;

    Procedure Paint; Override;

    Public

    Constructor Create(AOwner:TComponent); Override;

    Procedure Invalidate; Override;

    End;



    Constructor TTransparentPanel.Create(AOwner:TComponent);

    Begin

    Inherited Create(AOwner);

    ControlStyle:= ControlStyle - [csOpaque];

    End;



    Procedure TTransparentPanel.CreateParams(Var Params:TCreateParams);

    Begin

    Inherited CreateParams(Params);

    Params.ExStyle:= Params.ExStyle or WS_EX_TRANSPARENT;

    End;



    Procedure TTransparentPanel.Paint;

    Begin

    Canvas.Brush.Style:= bsClear;

    Canvas.Rectangle(0, 0, Width, Height);

    Canvas.TextOut(Width div 2, Height div 2, 'Transparent');

    End;



    Procedure TTransparentPanel.WMEraseBkGnd(Var Message:TWMEraseBkGnd);

    Begin

    {Do Nothing}

    Message.Result:= 1;

    End;



    Procedure TTransparentPanel.SetParent(AParent:TWinControl);

    Begin

    Inherited SetParent(AParent);

    {

    The trick needed to make it all work!

    I don't know if changing the parent's style is a good idea, but it only

    removes the WS_CLIPCHILDREN style which shouldn't cause

    any problems.

    }

    If Parent <> Nil then

    SetWindowLong(Parent.Handle, GWL_STYLE,

    GetWindowLong(Parent.Handle, GWL_STYLE) And Not WS_ClipChildren);

    End;



    Procedure TTransparentPanel.Invalidate;

    Var

    Rect :TRect;

    Begin

    Rect:= BoundsRect;

    If (Parent <> Nil) and Parent.HandleAllocated then

    InvalidateRect(Parent.Handle, @Rect, True)

    Else

    Inherited Invalidate;

    End;