2012-05-01 6 views
4

私はTActionManagerの1つを共有し、TAction -sを割り当てたい2つのフォームがあります。別のフォームの名前を変更する

最初のフォームはメインフォームです - TActionManagerTActionのキャプション "アクション"を保持します。

Form1のメインメニューには、このアクションとmenuitemキャプションプロパティが「アクションA」に設定されています。 Form2にはForm1が含まれています。また、アクションはmenuitemに割り当てられ、キャプションは「アクションB」に設定されています。

デザイン時に、Form1とForm2のメニュー項目の名前が「アクションA」と「アクションB」になり、同じアクションが割り当てられます。また、実行時に正常に動作します(OnExecuteは両方のフォームに対して適切に処理されます)。

実行中、Form1メニュー項目には「Action A」というキャプションがあり、Form2にはアクションキャプションと同様にメニュー項目キャプション「Action」があります。

私はそれらを間違って含んでいますか?Form2にForm1を含めてアクションを共有したり、キャプションを変更することは可能ですか? D2010/CB2010のバグですか?

例:

  1. のForm1とForm2を作成し、Form1に両方
  2. ドロップTActionManagerにメインメニューを追加し、その中にアクション1を作成します。キャプションを変更Form1のアクション1およびその後
  3. 割り当てメニュー項目(Form1のTActionManagerから)もフォーム2アクション1で
  4. 割り当てメニュー項目(キャプションがデフォルト値からの変化を示す今太字示されている)と、デフォルトのキャプションを変更します。ランタイム中
  5. 現在、Form1が(Action1.Caption異なる)キャプションが変更されている、ステップ4
+1

Delphi 2009では、これはうまくいくようです。 'TAction.Caption'を変更すると、両方のテストフォームのメニュー項目の見出しが変更されました。 – TLama

+1

@TLamaメニューアイテムのキャプションが変更されていない場合(およびActionプロパティを設定した後)にのみ。 – NGLN

+0

@NGLN、それを忘れてしまった。ありがとう! – TLama

答えて

5

問題を再現しましたが、これは奇妙な動作です。なぜメニュー項目のキャプションを変更する明白な疑問のほかに、以下の作業する必要があります

は同じアクションに両方のメニュー項目のActionプロパティを設定します。メニューアイテムのキャプションはアクションのキャプションにリンクされ、それらはもう保存されません(オブジェクトインスペクタでは太字ではないように見えます)。その後、キャプションをメニュー項目から独立した値に変更し、それらが現在保存されており、メニュー項目が実際にデザイン時に変更されることに注意してください。

実行時に、2番目のメニュー項目のキャプションは、実際にはアクションのキャプションに再び従います。これは私の意見では起こらないはずです。

私が再現しなかったのは、実行時にそれを変更することができないことです。予想通り、次の作品(ここではD7):

procedure TForm2.FormCreate(Sender: TObject); 
begin 
    mnuAction1.Caption := 'Action B'; 
end; 

あなたの代わりに、アクションのそのメニュー項目のキャプションを変更していることを確認?

+0

2007年と同じ動作です。 –

+0

はい、それも私のために働いた...コンストラクタ(C + +で)とFormCreateに新しい名前を入れた後、適切なキャプションを使用しました。 – Coder12345

2

TAction.Captionに変化としてキャプションが新しい値をすべきであるForm2がAction1.Captionと同じキャプションを有しますアクションがメニュー項目にリンクされているとき、またはアクションキャプションが変更されたときにTMenuItem.Captionをオーバーライドします。フォームのLoadedメソッドでメニュー項目のキャプションを変更すると、両方のフォームで異なるキャプションを使用できるようになります。

+1

私は同意しません。 Actionプロパティを設定した後に変更されたメニュー項目のキャプションは変更されたままになります。 – NGLN

+0

これはForm1では実行しますが、Form2では実行しません。値がデフォルト値(この場合はデフォルトはAction1.Caption)から変更されていることを示す、下の回答で述べたように、IDEで太字で表示されます。これはおそらくDelphi/C++ Builderのバグです。 XE/XE2でこれをテストしていないのですが、まだこれが当てはまります。 – Coder12345

関連する問題