Delphi - дубликаты tpanel и tbuttons во второй форме - PullRequest
3 голосов
/ 06 февраля 2010

В моей основной форме у меня есть TPanel, содержащий кнопки, которые действуют как панель инструментов. Я хочу клонировать / скопировать эту панель инструментов и кнопки и их функции во вторую форму.

Клонирование меню было простым с использованием newmenu.merge (mainmenu). Это был отличный способ дублировать Tmainmenu.

Но я затрудняюсь с тем, как легко дублировать мою панель инструментов без необходимости вручную назначать события и сохранять таймер для сравнения и отслеживания того, какие кнопки включены и отключены по сравнению с реальным основным меню в главной форме. В зависимости от того, что делает приложение, кнопки главной панели инструментов будут включаться и отключаться в разное время.

Есть идеи здесь? Спасибо за любые предложения или советы, чтобы сделать это проще.

Ответы [ 3 ]

4 голосов
/ 06 февраля 2010
  • Дублирование элементов управления

    В конструкторе форм выберите панель и нажмите Ctrl + C , чтобы скопировать ее и все ее дочерние элементы в буфер обмена. Перейдите ко второй форме и нажмите Ctrl + V , чтобы вставить.

    Если вы все еще работаете над дизайном и хотите поддерживать его согласованность между обеими формами, создайте TFrame и спроектируйте макет панели инструментов там. Затем поместите экземпляр этого фрейма в обе ваши формы. Изменения в дизайне рамы будут отражены в формах.

    См. Работа с фреймами в справке.

  • Убедиться, что оба набора кнопок включены последовательно

    Создать модуль данных. Поместите TActionList на него. Добавьте к нему действие для каждой кнопки в основной форме. Назначьте обработчики событий событиям OnUpdate действий. В них установите свойства actions ' Enabled. Наконец, присвойте каждой кнопке свойство Action для ссылки на соответствующий объект действия. Кнопки будут автоматически включаться и отключаться с действиями. Таймер не требуется.

    Кроме того, вы также можете обрабатывать события OnExecute действий. Очистите свойство OnClick каждой кнопки, а затем переместите код OnClick кнопки в соответствующий обработчик OnExecute соответствующего действия. Он будет автоматически вызываться при нажатии кнопки, даже если свойство OnClick пусто.

    Когда вы присваиваете Caption или Hint свойство TAction, соответствующие свойства любых связанных элементов управления также изменяются. Аналогично для изображений, если элемент управления их поддерживает. Действия могут быть также назначены пунктам меню.

    См. Использование списков действий в справке.

  • Действуя как панель инструментов

    Просто используйте TToolbar. Вот для чего это.

    Или, как только вы привыкли к действиям, вставьте TActionManager в ваш проект и используйте его с TActionToolbar и TActionMainMenuBar , См. Организация действий для панелей инструментов и меню в справке.

1 голос
/ 06 февраля 2010

Кнопки прикреплены к действиям? Если это так, вы можете использовать событие OnUpdate в TActionList, чтобы указать, что должно и не должно быть включено. Если нет, то это не слишком много работы, чтобы перейти к использованию действий.

Если вы пойдете по этому пути, чтобы перейти к использованию ActionList, рассмотрите возможность помещения ActionList в модуль данных, где различные единицы и формы могут ссылаться на него.

0 голосов
/ 13 сентября 2015

Вы можете использовать объект ClipBoard для копирования панели.

Clipboard.SetComponent (Panel1);
Clipboard.GetComponent (Form2, GroupBox1);

...