2012-05-01 4 views
4

У меня есть 2 формы, которые я хотел бы поделиться с одним TActionManager и назначил TAction-s.Переименование TAction для другой формы

Первый вид основной формы - содержит TActionManager, TAction с надписью «Действие».

Главное меню Form1 имеет свойство action и menuitem caption, установленное в «Action A». Form2 включает Form1, а также назначает действие для элемента menuitem, а подпись имеет значение «Действие B».

Во время разработки все выглядит хорошо - пункты меню называются «Действие A» и «Действие B» в Form1 и Form2 и назначается одно и то же действие. Он также отлично работает во время выполнения (OnExecute правильно обрабатывается для обеих форм).

Однако во время выполнения элемент меню Form1 имеет заголовок «Действие A» и Form2 имеет заголовок элемента «Действие», как и надпись действия.

Я включаю их неправильно, можно ли включить Form1 в Form2 для обмена действиями и для изменения заголовка? Это ошибка в D2010/CB2010?

Пример:

  1. Создать Form1 и Form2 и добавьте главное меню как
  2. отброшенных TActionManager к Form1 и создать ДЕЙСТВИЙ1 в нем.
  3. пункт меню Присвоить в Form1 действий1 и после этого изменить заголовок (заголовок показан жирным шрифтом теперь, как указывает на изменение от значения по умолчанию)
  4. пункт меню Назначить в Form2 также действие1 (от Form1 TActionManager), а также изменить по умолчанию заголовок.
  5. Во время выполнения Теперь Form1 изменился подпись (отличной от Action1.Caption) и Form2 имеет одинаковую подпись к Action1.Caption хотя заголовок должен быть новое значение, как изменился на шаге 4.
+1

В Delphi 2009 это похоже на работу. Если вы измените «TAction.Caption», подписи элементов меню на обеих моих тестовых формах были изменены. – TLama

+1

@TLama Только в тех случаях, когда заголовки пунктов меню не изменяются раньше (и после установки свойства Action, конечно). – NGLN

+0

@NGLN, забыл упомянуть об этом. Благодаря! – TLama

ответ

5

Я воспроизвел вашу проблему, и действительно, это странное поведение. Помимо очевидного вопроса, почему следует изменить подписи к пунктам меню, следующие должен работы:

Установите оба свойства Action элемента меню в то же действие. Теперь подписи элементов меню связаны с типом действия и отмечают, что они больше не сохраняются (они не выделены жирным шрифтом в инспекторе объектов). Впоследствии измените подписи из пунктов меню на независимые значения и обратите внимание, что они теперь сохранены и что пункты меню действительно изменяются соответствующим образом во время разработки.

Но во время выполнения заголовок второго элемента меню действительно следует за действиями снова. Это не должно произойти, на мой взгляд.

То, что я не воспроизвел, - это неспособность изменить его во время выполнения. Следующие работы, как и ожидалось (D7 здесь):

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

Конечно, вы меняете заголовок пунктов меню вместо того, что действия?

+0

То же поведение с 2007 годом. –

+0

Да, это сработало и для меня ... после ввода нового имени в конструкторе (на C++) и в FormCreate он использовал правильную подпись. – Coder12345

2

TAction.Caption переопределяет TMenuItem.Caption, когда действие связано с пунктом меню или когда надпись действия изменяется. Если вы измените заголовок элемента меню в формах Loaded method, вы должны иметь разные подписи для обеих форм.

+1

Я не согласен. Измененные заголовки пунктов меню после установки свойства Действие должны оставаться изменены. – NGLN

+0

И они делают для Form1, но не Form2. Они также выделены жирным шрифтом в IDE, как вы сказали в ответ ниже, указав, что значение изменяется от значения по умолчанию (по умолчанию в этом случае Action1.Caption). Так что это, вероятно, ошибка в Delphi/C++ Builder. Не протестировали это в XE/XE2, это все равно. – Coder12345

 Смежные вопросы

  • Нет связанных вопросов^_^