Q&A

  • ComboBox에서 Ctl3D를 False로???
안녕하십니까?



다른 모든 컴포넌트는 Ctl3D의 Property가 잘 동작이

되는데 ComboBox만 동작이 되지 않네요?

해결 방법이 있으면 부탁드립니다.





새해 복 많이 받으세요.



2  COMMENTS
  • Profile
    여영식 2000.02.03 18:32
    ComboBox의 경우는 Ctl3D 동작이 되질 않습니다.



    함께 첨부된 컴보박스 컴포넌트는 컴보박스의 외각선을 다시 그려

    Ctl3D 처리를 합니다. 추가된 프로퍼티는 다음과 같습니다.



    Ctl3DUseRoundColor: Boolean;

    Ctl3DRoundColor: TColor;



    이 프로퍼티의 컬러를 바탕색으로 맞추세요. 디폴트는 clBtnFace 입니다.



    류한규 wrote:

    > 안녕하십니까?

    >

    > 다른 모든 컴포넌트는 Ctl3D의 Property가 잘 동작이

    > 되는데 ComboBox만 동작이 되지 않네요?

    > 해결 방법이 있으면 부탁드립니다.

    >

    >

    > 새해 복 많이 받으세요.

    >

  • Profile
    여영식 2000.02.03 18:34
    unit C3DComboBox;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TC3DComboBox = class(TComboBox)

    private

    { Private declarations }

    FCtl3DUseRoundColor: Boolean;

    FCtl3DRoundColor: TColor;

    procedure SetCtl3DUseRoundColor(Value: Boolean);

    procedure SetCtl3DRoundColor(Value: TColor);

    protected

    { Protected declarations }

    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

    public

    { Public declarations }

    constructor Create(AOwner: TComponent); override;

    destructor Destroy; override;

    published

    { Published declarations }

    property Ctl3DUseRoundColor: Boolean read FCtl3DUseRoundColor write SetCtl3DUseRoundColor default False;

    property Ctl3DRoundColor: TColor read FCtl3DRoundColor write SetCtl3DRoundColor default clBtnFace;

    end;



    procedure Register;



    implementation



    constructor TC3DComboBox.Create(AOwner: TComponent);

    begin

    inherited Create(AOwner);

    FCtl3DUseRoundColor := False;

    FCtl3DRoundColor := clBtnFace;

    end;



    destructor TC3DComboBox.Destroy;

    begin

    inherited Destroy;

    end;



    procedure TC3DComboBox.WMPaint(var Message: TWMPaint);

    var

    DC : HDC;

    FrameBrush: HBRUSH;

    begin

    inherited;

    if not Ctl3D then

    begin

    DC := GetDC(Handle);

    FrameBrush := CreateSolidBrush(ColorToRGB(clBlack));

    FrameRect(DC, Rect(1, 1, Width - 2, Height - 1), FrameBrush);

    if not DroppedDown then

    begin

    if not FCtl3DUseRoundColor then

    FrameBrush := CreateSolidBrush(ColorToRGB(TWinControl(Parent).Brush.Color))

    else

    FrameBrush := CreateSolidBrush(ColorToRGB(FCtl3DRoundColor));

    FrameRect(DC, Rect(0, 0, Width, Height), FrameBrush);

    FrameRect(DC, Rect(0, 0, Width - 1, Height), FrameBrush);

    end

    else

    begin

    FrameBrush := CreateSolidBrush(ColorToRGB(clWhite));

    FrameRect(DC, Rect(1, Height - 1, Width - 2, Height), FrameBrush);

    end;

    ReleaseDC(Handle, DC);

    end;

    end;



    procedure TC3DComboBox.SetCtl3DUseRoundColor(Value: Boolean);

    begin

    FCtl3DUseRoundColor := Value;

    Invalidate;

    end;



    procedure TC3DComboBox.SetCtl3DRoundColor(Value: TColor);

    begin

    FCtl3DRoundColor := Value;

    Invalidate;

    end;



    procedure Register;

    begin

    RegisterComponents('Samples', [TC3DComboBox]);

    end;



    end.