Q&A

  • 메뉴와 버튼등의 색상을 바꾸려면
제 Application을 Windows에서 지원하는 것이 아니라 고유의 색상을 가지게 하고 싶어서 색상을 지정하려고 합니다. Form과 다른 Component의 색상은 변경을 해주었만 메뉴와 버튼등은 그대루 남아 있어서 보기가 좀 이상하더 군요...

어떤 방법을 사용해야 할지 조언 을 부탁 드립니다.

그럼 좋은 하루 되싶시요...

1  COMMENTS
  • Profile
    김영대 1999.09.03 23:53
    노유승 께서 말씀하시기를...

    > 제 Application을 Windows에서 지원하는 것이 아니라 고유의 색상을 가지게 하고 싶어서 색상을 지정하려고 합니다. Form과 다른 Component의 색상은 변경을 해주었만 메뉴와 버튼등은 그대루 남아 있어서 보기가 좀 이상하더 군요...

    > 어떤 방법을 사용해야 할지 조언 을 부탁 드립니다.

    > 그럼 좋은 하루 되싶시요...



    TButton 이나 TMenuItem 은 원도우즈 표준 콘트롤로 "owner-draw" 를

    지원하지 못하는걸로 알고 있습니다

    그래서 원도우즈 제어판에서 설정된 값에 영항을 받습니다

    TButton을 TBitBtn 으로 바꾸어서 사용하신다면 "owner-draw" 를

    사용할 수 있습니다

    TMenuItem은 그림(Bitemap) 정도는 올릴 수 있습니다



    아래 소스는 "메뉴 아이템의 동적 추가와 그림넣기" 입니다

    unit Unit1;



    interface



    uses

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

    Menus, ExtCtrls, StdCtrls;



    type

    TForm1 = class(TForm)

    PopupMenu1: TPopupMenu;

    Button1: TButton;

    Button2: TButton;

    Image1: TImage;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    newitem : TMenuItem;

    i: Integer;

    begin

    // Popup menu의 이전 item을 clear 한다

    for i := PopupMenu1.Items.Count -1 downto 0 do

    PopupMenu1.Items.Delete(i);



    for i := 0 to 9 do // 임의로 10개만 만들어 본것임

    begin

    newitem := TMenuItem.Create(PopupMenu1); // menu item 생성

    newitem.Caption := IntTostr(i)+' 번째 Item'; // menu item 의 캡션

    newitem.MenuIndex := i;

    PopupMenu1.Items.Add(newitem); // Popup menu 에 추가

    end;



    // 추가된 item의 각 이미지를 그린다

    for i := 0 to PopupMenu1.Items.Count - 1 do

    SetMenuItemBitmaps(PopupMenu1.Handle,

    i, // 이미지를 넣을 item의 위치

    MF_BYPOSITION,

    Image1.Picture.BitMap.Handle, // handle of unchecked bitmap

    Image1.Picture.BitMap.Handle); // handle of checked bitmap

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    var

    P: TPoint;

    begin

    // 수동으로 popup 하기

    P.X := Button2.Left;

    P.Y := Button2.Top;

    P := Self.ClientToScreen(P); // form 기준의 좌표를 desktop 기준의 좌표로 계산

    PopupMenu1.PopUp(P.X, P.Y);

    end;



    end.