팝업메뉴 생성 및 연결
  1. 폼에 아무 Component 하나 올림. TImage 하나 올렸다고 가정.
  2. TPopupMenu 하나 올림.
  3. TPopupMenu 의 Items 를 클릭해서 샥샥 추가하자.
  4. 올려놨던 TImage 의 Object Inspector 중 Event 탭에서 PopupMenu 에서 만들어 놓은 PopupMenu1 을 선택하자.
 
 
 
 
 
실수 1.

멍청하게 그냥 Object Inspector 의 PopupMenu 에서 연결해 주면 될 것을 TImage 의 OnMouseUp 에서 일일이 처리했음.

 
 
 
 
실수 2.

덕분에 PopupMenu를 호출한 Component (=PopupMenu1.PopupComponent) 를 받아올 수가 없었음.

처음에는 동적생성한 놈이라서 그런가 했지만 그게 아니라 Object Inspector 의 Event 탭의 PopupMenu 에 걸려있지 않으면 안되는 듯.

참고로 동적생성했을 때에도 PopupMenu 라는 property 에 만들어놓은 PopupMenu 를 연결시켜 주면 됨.

예를 들어 아래와 같이...

 

 

procedure TfrmMain.Button1Click(Sender: TObject);

var btn: TButton;

begin

  btn:=TButton.Create(Self);

  btn.Name:='btn1';

  btn.Tag:=0;

  btn.Width:=100;

  btn.Height:=50;

  btn.Left:=200;

  btn.Top:=20;

  btn.PopupMenu:=PopupMenu1;

  btn.Parent:=Self;

end;

 
 
 
 
 
 
 
보너스

각 TMenuItem 에서 Popup 시킨 Component 를 알고 싶을 경우, 별 거 아니지만 좀 길다란 소스가 필요함.

예를 들어, 호출한 Component 가 TImage 이고 해당 TImage 의 Visible 을 False 로 하고 싶다면 아래처럼 하면 됨.

N1 의 Caption 은 적당히 '이미지 보이지 않기' 뭐 그딴식으로 되어 있다고 치고...

absolute 를 사용해서 나름대로 찔끔이라도 줄였음. 하지만 구질구질 보기 싫은 건 매한가지...

 

 

 

procedure TForm1.N1Click(Sender: TObject);
var MenuItem: TMenuItem absolute Sender;
begin
  TImage(TPopupMenu(MenuItem.GetParentComponent).PopupComponent).Visible:=False;
end;








Posted by bloodguy
,