-
폼에 아무 Component 하나 올림. TImage 하나 올렸다고 가정.
-
TPopupMenu 하나 올림.
-
TPopupMenu 의 Items 를 클릭해서 샥샥 추가하자.
-
올려놨던 TImage 의 Object Inspector 중 Event 탭에서 PopupMenu 에서 만들어 놓은 PopupMenu1 을 선택하자.
멍청하게 그냥 Object Inspector 의 PopupMenu 에서 연결해 주면 될 것을 TImage 의 OnMouseUp 에서 일일이 처리했음.
덕분에 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;
'Delphi' 카테고리의 다른 글
[Delphi] 숫자를 소리로 알림 (0) | 2009.04.18 |
---|---|
[Delphi] 프로세스가 살아있는지 검사, 프로세스 죽이기 (0) | 2009.04.18 |
[Delphi] HTML 페이지의 태그 사이를 유랑하기 (0) | 2009.04.18 |
[Delphi] 바이너리 파일을 텍스트로 읽어들이기 (0) | 2009.04.18 |
[Delphi] TForm.Components[i] 사용 시 주의점 (0) | 2009.04.18 |