TPopupMenuをフォームの右側にどのように配置できますか?問題は、Popup(X, Y: Integer)
を呼び出す前に、ポップアップメニューの幅を取得する方法がないように見えることです。TPopupMenuをフォームの右側に揃えますか?
Chromeのシステムメニューのような動作をしようとしています。
TPopupMenuをフォームの右側にどのように配置できますか?問題は、Popup(X, Y: Integer)
を呼び出す前に、ポップアップメニューの幅を取得する方法がないように見えることです。TPopupMenuをフォームの右側に揃えますか?
Chromeのシステムメニューのような動作をしようとしています。
最も簡単な解決策は、ポップアップメニューを自分で起動するには、次のようになります。
procedure TForm1.Panel1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
var
PopupPt: TPoint;
begin
PopupPt := ClientToScreen(Point(ClientWidth, 0));
TrackPopupMenu(PopupMenu1.Handle, TPM_RIGHTALIGN or TPM_TOPALIGN,
PopupPt.X, PopupPt.Y, 0, PopupList.Window, nil);
end;
TrackPopupMenu
や意味、様々なものをフラグのTrackPopupMenuEx
のマニュアルを参照してください。 [Windowsの場合:
重複を
paRight
にAlignment
を設定して呼び出すことができます。ドロップダウンメニューの位置を変更する](http://stackoverflow.com/q/4721989) –@Sertac - これは重複する質問ではありません。 a)Delphiでタグ付けされています。 b)単にポップアップを動かすことではありません。位置を計算できるように、メニューの幅を知る必要があります。 – norgepaul
メニューウィンドウを移動する前に、サイズ/位置を取得できます。 VCLはあなたが求める機能を提供していないため、APIコールを使用する必要があります。私はそれが重複していると思うが、おそらく.. –