정보

TPopUp Delphi 메뉴에 항목 추가

TPopUp Delphi 메뉴에 항목 추가

Delphi 애플리케이션에서 메뉴 또는 팝업 메뉴로 작업 할 때 대부분의 시나리오에서 디자인 타임에 메뉴 항목을 만듭니다. 각 메뉴 항목은 TMenuItem Delphi 클래스로 표시됩니다. 사용자가 항목을 선택 (클릭)하면 OnClick 이벤트가 발생하여 (개발자로서) 이벤트를 가져 와서 응답합니다.

디자인 타임에 메뉴 항목을 알 수 없지만 런타임에 추가해야하는 상황이있을 수 있습니다 (동적 인스턴스화).

런타임에 TMenuItem 추가

이름이 TPopupMenu 구성 요소가 있다고 가정하십시오. "PopupMenu1" Delphi 양식에서 팝업 메뉴에 항목을 추가하려면 다음과 같이 코드를 작성할 수 있습니다.

var
menuItem : TMenuItem;
시작하다
menuItem : = TMenuItem.Create (PopupMenu1);
menuItem.Caption : = ''+ TimeToStr (now)에 추가 된 항목;
menuItem.OnClick : = PopupItemClick;
  // 맞춤 정수 값을 할당합니다…
menuItem.Tag : = GetTickCount;
PopupMenu1.Items.Add (menuItem);
종료;

노트

  • 위 코드에서 하나의 항목이 PopupMenu1 구성 요소에 추가되었습니다. 우리는 정수 값을 꼬리표 재산. Tag 속성 (Delphi 구성 요소마다 있음)은 개발자가 구성 요소의 일부로 저장된 임의의 정수 값을 할당 할 수 있도록 설계되었습니다.
  • 그만큼 GetTickCount API 함수는 Windows가 시작된 이후 경과 된 시간 (밀리 초)을 검색합니다.
  • OnClick 이벤트 핸들러의 경우, * correct * 서명이있는 함수 이름 인 "PopupItemClick"을 할당했습니다.

순서 TMenuTestForm.PopupItemClick (발신자 : TObject);
var
menuItem : TMenuItem;
시작하다
   그렇지 않다면 (송신기 이다 TMenuItem) 그때
   시작하다
ShowMessage ( 'Hm, 메뉴 클릭에 의해 호출되지 않은 경우 누가 이것을 호출 했습니까?!');
ShowMessage (Sender.ClassName);
     출구;
   종료;
menuItem : = TMenuItem (발신자);
ShowMessage (Format ( ' "% s"클릭, TAG 값 : % d', menuItem.Name, menuItem.Tag));
종료;

중대한

  • 동적으로 추가 된 항목을 클릭하면 "PopupItemClick"이 실행됩니다. 하나 이상의 런타임 추가 항목 (모든 PopupItemClick에서 코드 실행)을 구별하기 위해 Sender 매개 변수를 사용할 수 있습니다.

"PopupItemClick"메서드는 먼저 보낸 사람이 실제로 TMenuItem 개체인지 확인합니다. 메뉴 항목 OnClick 이벤트 핸들러의 결과로 메소드가 실행되면 메뉴 항목이 메뉴에 추가 될 때 태그 값이 지정된 대화 상자 메시지 만 표시됩니다.

사용자 정의 문자열 인 TMenuItem

실제 응용 프로그램에서는 더 많은 유연성이 필요할 수 있습니다. 각 항목이 웹 페이지를 "표시"한다고 가정합니다. 웹 페이지의 URL을 보유하려면 문자열 값이 필요합니다. 사용자가이 항목을 선택하면 기본 웹 브라우저를 열고 메뉴 항목에 지정된 URL로 이동할 수 있습니다.

다음은 커스텀 문자열 "Value"속성이있는 커스텀 TMenuItemExtended 클래스입니다.

유형
TMenuItemExtended = 수업(TMenuItem)
  은밀한
f 값 : ;
  출판
    재산 가치 : 문자열 읽기 f 값 쓰다 f 값;
  종료;

이 "확장 된"메뉴 항목을 PoupMenu1에 추가하는 방법은 다음과 같습니다.

var
menuItemEx : TMenuItemExtended;
시작하다
menuItemEx : = TMenuItemExtended.Create (PopupMenu1);
menuItemEx.Caption : = '확장 된'+ TimeToStr (now);
menuItemEx.OnClick : = PopupItemClick;
   // 맞춤 정수 값을 할당합니다…
menuItemEx.Tag : = GetTickCount;
   // 이것은 심지어 문자열 값을 가질 수 있습니다
menuItemEx.Value : = '//delphi.about.com';
PopupMenu1.Items.Add (menuItemEx);
종료;

이제이 메뉴 항목을 올바르게 처리하려면 "PopupItemClick"을 수정해야합니다.

순서 TMenuTestForm.PopupItemClick (발신자 : TObject);
var
menuItem : TMenuItem;
시작하다
   //… 같은 상기와
   만약 송신기 이다 TMenuItemExtended 그때
   시작하다
ShowMessage (Format ( 'Ohoho Extended item… here "는 문자열 값입니다. % s', TMenuItemExtended (Sender) .Value));
   종료;
종료;

그게 다야. 필요에 따라 TMenuItemExtended를 확장하는 것은 사용자의 책임입니다. 커스텀 델파이 컴포넌트를 생성하면 자신 만의 클래스 / 컴포넌트 생성에 대한 도움을 얻을 수 있습니다.

노트

기본 웹 브라우저를 실제로 열려면 Value 속성을 ShellExecuteEx API 함수의 매개 변수로 사용할 수 있습니다.