ポップアップメニューの表示有無を取得するには?

解決


SON705  2006-10-17 21:07:44  No: 23582

お世話になります。
ポップアップメニューの表示有無を取得する方法はないでしょうか?
具体的な処理は地図をクリックした位置にマークを表示し、ポップアップが
消えたらマークを消したいのです。
ポップアップメニュー項目をクリックした時は良いのですが、メニュー外を
クリックしてメニューが消えた時の処理に困っています。

方法を御存知の方が居られましたら、宜しくお願いします。


鳴かずんば ...  2006-10-18 21:27:42  No: 23583

鳴かせて見せようホトトギス♪ (秀吉)

※PopupMenuコンポに OnDestroyイベント追加
type
  TPopupMenuEx = class(TPopupMenu)
  private
    FOnDestroy: TNotifyEvent;
  published
    property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

constructor TPopupMenuEx.Create(AOwner: TComponent);
begin
  Inherited Create(AOwner);
  AutoPopup := False;
  FOnDestroy := nil;
end;

destructor TPopupMenuEx.Destroy;
begin
  Inherited Destroy;
  if Assigned(FOnDestroy) then FOnDestroy(Self);
end;

// OnDestroyイベントはんどら
procedure TForm1.PopupMenuExDestroy(Sender: TObject);
begin
  // マークを消す
end;

procedure TForm1.ほにゃ(...; X,Y: Integer);
begin
  ...
  with TPopupMenuEx.Create(Self) do try
    OnPopup := PopupMenuExPopup;
    OnDestroy := PopupMenuExDestroy;
    ... //メニュー項目作成、追加
    with ClientToScreen(Point(X,Y)) do
      Popup(X, Y);
  finally
    Free;
  end;
  ...
end;


SON705  2006-10-18 23:05:51  No: 23584

鳴かずんば ...さん、有り難うございました。

表示状態を取得できるプロパティでもあれば良いなと思っていたのですが、
拡張PopupMenuを作成し、OnDestroyイベントを作成するとは確かに力業です。

提供して頂いたコードでサンプルを作成し、デバッグ中に気づいたのですが、
実は非常に簡単に自分の質問内容を解決する方法が解りました。

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
        pp: TPoint;
begin
    if (Button in [mbRight]) then begin     {右クリック時}
        Form1.Caption := 'PopupMenu表示';
        pp := PaintBox1.ClientToScreen( Point(X,Y) );
        PopupMenu1.Popup( pp.x, pp.y );
        Form1.Caption := 'PopupMenu消去';
    end;
end;

上記の様にPopupメソッドの後にPopupMenu消去時の処理を行えば良かった様です。
PopupメソッドはShowメソッドの様な動作かと思っていたのですが、ShowModalと
同じ動作だったのですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加