Q&A

  • Flat Form 만들기..?
일반적인 Form이 약간은 3D로 보니잖아요



이걸 Flat. 그러니깐 Form Style을 None으로 한것같이 표현 하고 싶어요



(None이면 타이틀바가 안나와서) 좀 구현 방법 좀 알려 주셔요

2  COMMENTS
  • Profile
    최용일 2000.04.29 09:54
    안녕하세요. 최용일입니다.



    다음과 같이 윈도우 영역을 3D영역을 제외한 폼의 영역을 재설정하시면 플랫스타일의



    크기조절이 가능한 폼을 만드실 수 있습니다.



    // 폼의 OnCreate이벤트

    procedure TForm1.FormCreate(Sender: TObject);

    var

    HRegion: THandle;

    begin

    // 현재의 윈도 영역에서 3D프레임을 제거한다.

    HRegion := CreateRectRgn(2, 2, Width - 2, Height - 2);

    SetWindowRgn(Handle, HRegion, True); // 새로운 윈도우 영역을 설정한다.

    end;



    // 폼의 OnResize 이벤트

    procedure TForm1.FormResize(Sender: TObject);

    var

    HRegion: THandle;

    begin

    // 현재의 윈도 영역에서 3D프레임을 제거한다.

    HRegion := CreateRectRgn(2, 2, Width - 2, Height - 2);

    SetWindowRgn(Handle, HRegion, True); // 새로운 윈도우 영역을 설정한다.

    end;



    ^^ 항상 즐코하세요.



    김혜원 wrote:

    > 일반적인 Form이 약간은 3D로 보니잖아요

    >

    > 이걸 Flat. 그러니깐 Form Style을 None으로 한것같이 표현 하고 싶어요

    >

    > (None이면 타이틀바가 안나와서) 좀 구현 방법 좀 알려 주셔요

  • Profile
    김일영 2000.04.29 08:57
    능력이 안되어서... 크기 조절 가능하게는 못하고 타이틀바만 일부 기능을 흉내낸 것을

    올려 드립니다. 참고로 이 소스는 나이렉스 인터내셔날에서 개발한 채팅 도우미 '투덜이'

    소스에서 거의 그대로 인용한 것입니다.



    CreateParams를 조정하는 것으로는 도저히 Form Style을 bsNone으로 한 것과

    똑같이 할 수는 없더군요. 그래서 Form Style은 bsNone으로 했습니다.

    그래서 크기 조절은 안되는 상태입니다.



    이나마 참고가 되시길.



    우선 .dfm 파일:

    object Form1: TForm1

    Left = 192

    Top = 107

    BorderStyle = bsNone

    Caption = 'Form1'

    ClientHeight = 613

    ClientWidth = 862

    Color = clBtnFace

    Font.Charset = DEFAULT_CHARSET

    Font.Color = clWindowText

    Font.Height = -11

    Font.Name = 'MS Sans Serif'

    Font.Style = []

    OldCreateOrder = False

    PixelsPerInch = 96

    TextHeight = 13

    object Panel1: TPanel

    Left = 0

    Top = 0

    Width = 862

    Height = 22

    Align = alTop

    Color = clActiveCaption

    TabOrder = 0

    object MinBtn: TSpeedButton

    Left = 810

    Top = 4

    Width = 16

    Height = 14

    Anchors = [akTop, akRight]

    Caption = '0'

    Font.Charset = SYMBOL_CHARSET

    Font.Color = clWindowText

    Font.Height = -9

    Font.Name = 'Marlett'

    Font.Style = []

    ParentFont = False

    Spacing = 0

    OnClick = MinBtnClick

    end

    object MaxBtn: TSpeedButton

    Left = 826

    Top = 4

    Width = 16

    Height = 14

    Anchors = [akTop, akRight]

    Caption = '1'

    Font.Charset = SYMBOL_CHARSET

    Font.Color = clWindowText

    Font.Height = -11

    Font.Name = 'Marlett'

    Font.Style = []

    ParentFont = False

    Spacing = 0

    OnClick = MaxBtnClick

    end

    object CloseBtn: TSpeedButton

    Left = 844

    Top = 4

    Width = 16

    Height = 14

    Anchors = [akTop, akRight]

    Caption = 'r'

    Font.Charset = SYMBOL_CHARSET

    Font.Color = clWindowText

    Font.Height = -9

    Font.Name = 'Marlett'

    Font.Style = []

    ParentFont = False

    Spacing = 0

    OnClick = CloseBtnClick

    end

    end

    object ApplicationEvents1: TApplicationEvents

    OnActivate = ApplicationEvents1Activate

    OnDeactivate = ApplicationEvents1Deactivate

    Left = 8

    Top = 32

    end

    end



    그리고 .pas 파일:

    unit border;



    interface



    uses

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

    AppEvnts, ExtCtrls, Buttons;



    type

    TForm1 = class(TForm)

    Panel1: TPanel;

    ApplicationEvents1: TApplicationEvents;

    MinBtn: TSpeedButton;

    MaxBtn: TSpeedButton;

    CloseBtn: TSpeedButton;

    procedure ApplicationEvents1Activate(Sender: TObject);

    procedure ApplicationEvents1Deactivate(Sender: TObject);

    procedure MinBtnClick(Sender: TObject);

    procedure MaxBtnClick(Sender: TObject);

    procedure CloseBtnClick(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.ApplicationEvents1Activate(Sender: TObject);

    begin

    Panel1.Color := clActiveCaption;

    end;



    procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);

    begin

    Panel1.Color := clinActiveCaption;

    end;



    procedure TForm1.MinBtnClick(Sender: TObject);

    begin

    Application.Minimize;

    end;



    procedure TForm1.MaxBtnClick(Sender: TObject);

    begin

    if WindowState <> wsMaximized then begin

    ShowWindow(Handle, SW_SHOWMAXIMIZED);

    TSpeedButton(Sender).Caption := '2';

    end

    else begin

    ShowWindow(Handle, SW_RESTORE);

    TSpeedButton(Sender).Caption := '1';

    end;

    end;



    procedure TForm1.CloseBtnClick(Sender: TObject);

    begin

    Close;

    end;



    end.



    이상입니다.

    =======================================================================

    김혜원 wrote:

    > 일반적인 Form이 약간은 3D로 보니잖아요

    >

    > 이걸 Flat. 그러니깐 Form Style을 None으로 한것같이 표현 하고 싶어요

    >

    > (None이면 타이틀바가 안나와서) 좀 구현 방법 좀 알려 주셔요