私はフォームにポップアップメニューコントロールを持っています(grr、私はおそらくそれを動的にするつもりです-静的ツールを嫌います)。サブメニュー付きのアイテムがあります。SubMenuには3つのメニュー項目(TMenuItemクラス)があります。
プロシージャがSubMenuのItemまたはSubMenuItemsによって呼び出されたときはいつでも、if..thenステートメントでSenderparamを使用して確認する必要があります。
型キャストとスーパークラスの操作でさまざまなvraiationを試しましたが、うまくいきませんでした。私はこのようなことが可能だと思います:
if FindControl(MenuItemWithSubMenu.Handle) = TControl(Sender as TComponent).Parent then ...
しかし、もちろん、正しい型キャストとコマンドを使用します。
どんなアイデアでもありがたいです。
コミュニティのリクエストによる追加情報:
コードitsef(単にコンポーネント名propで確認した場合)は次のようになります。
procedure TForm1.xClick(Sender: TObject); // procedure that has attached onClick from PopupActionBar1 Items
begin
if ((TComponent(Sender).Name = 'Unloadresources1') or // PopupActionBar1.Items[3]
(TComponent(Sender).Name = 'VKPCache11') or // PopupActionBar1.Items[3].Items[0]
(TComponent(Sender).Name = 'VKPCache21') or // PopupActionBar1.Items[3].Items[1]
(TComponent(Sender).Name = 'AllCache31') or // PopupActionBar1.Items[3].Items[2]
(ActLoadVal = 2)) and (PopupActionBar1.Items[3].Caption = 'Delete VKP Cache') then begin .. end;
end;
問題は、それが弱いアプローチへの道であり、プログラムユーザーが実行時にコンポーネントまたはコントロールまたはオブジェクトを追加/ドラッグアンドドロップ/挿入したい場合は追加のコーディングが必要になることです。このようにして、プログラム自体が私の代わりに自動的に半分の仕事をします-何をいつ呼び出すかを知っています:)
On(static)Form1は(static)PopupActionBar1です。4つのアイテムがあります。4番目のアイテムにはサブメニューがあります-3つのアイテムがあります。
サブメニュー項目を含む4番目の項目(PopupActionBar1.Items [3])と3つのサブメニュー項目(PopupActionBar1.Items [3] .Items [0 .. 2] OnClickイベントハンドラーは、上記のIf..Thenステートメントを含むプロシージャに設定されます。
タスク-Senderパラメーターを評価し、そのOOP機能を使用して-ProcedureがPopupActionBar1.Items [3]メニュー項目またはそのサブメニュー項目(PopupActionBar1.Items [3] .Items[0]またはPopupActionBar1.Items[3])から呼び出されたかどうかを確認します.Items[1]またはPopupActionBar1.Items[3].Items [2])。
私はさまざまな構文を試しました...TControl、TWinControl、TComponentを使用した型キャスト操作も試しました..(TObjectを使用しない場合は、親がないため(OLEを除く)..