델파이

TButton Style 종류와 TPopupMenu 연결

미스터몽키 2017. 8. 24. 22:18

기본 버튼인 TButton은 그림처럼 3가지 Style 속성이 있다.

기본은 bsPushButton 이다.




다음은 버튼을 클릭했을 때 팝업메뉴를 연결한 모습이다.


그림1)  

procedure TForm3.Button1Click(Sender: TObject);

begin

  //팝업메뉴가 현재 마우스커서 위치에 보인다.

  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);

end;




그림2)

procedure TForm3.Button2Click(Sender: TObject);

var p: TPoint;

begin

  //팝업메뉴가 버튼아래쪽에 보기 좋게 보인다.

  p := Button2.ClientToScreen(Point(0, Button2.Height));

  PopupMenu1.Popup(p.X, p.Y);

end;




그림3)  

Style 속성을  bsSplitButton 으로 설정한 경우다.

버튼과 콤보박스가 결합된 형대로

이경우 직접 팝업창을 호출하는 소스코딩은 작성하지 않고 버튼 속성의 DropDownMenu를 팝업메뉴로 연결하면 알아서 콤보부분 클릭시 팝업창이 뜬다.


여기서 좀더 효율적으로 버튼 클릭시 최종 선택된 TItemMenu 를 클릭하게 하면 콤보를 클릭해서 팝업메뉴에서 선택해도 되고 버튼부분을 클릭해서 최종 메뉴를 바로 클릭할 수 도 있다.


방법은 전역변수로  변수를 설정하고


FMenuItem: TMenuItem;

...


버튼 클릭시 다음처럼 작성한다.


1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm3.Button3Click(Sender: TObject);
begin
  if FMenuItem <> nil then
    FMenuItem.Click;
end;

procedure TForm3.N1Click(Sender: TObject);
begin
  ShowMessage(TMenuItem(Sender).Caption);
  Button3.Caption := TMenuItem(Sender).Caption;   //버튼캡션에 최종 선택된 메뉴 할당되게
  FMenuItem := TMenuItem(Sender);                  //전역변수에 설정하여 버튼클릭시 바로 작동되게
end;
cs



그림4)


버튼 클릭시 TEdit 아래부분에 팝업메뉴를 나타나게 한 경우다.





그림5) 


스타일이 bsCommandLink 일 경우의 모습이다. 캡션에 작성할 내용이 많을 때 사용한다.



그림3번 처럼 처리하는 것이 가장 효율적인 것 같다.



그림6)


메뉴아이템을 라디오버튼 그룹처럼 사용하기

procedure TForm3.N1Click(Sender: TObject);

begin

  ShowMessage(TMenuItem(Sender).Caption);

  Button3.Caption := TMenuItem(Sender).Caption;

  FMenuItem := TMenuItem(Sender);


  // 그룹지을 TMenuItem의 GroupIndex를 동일한 값 예를 들어 1로 하고  RadioItem 속성을 True로 하고

  // 아래 코드를 작성하면 라디오버튼 처럼 작동한다.

  TMenuItem(Sender).Checked := True;


end;