Delphi – дублирование tpanel и tbuttons во второй форме
Вопрос
В моей основной форме есть TPanel, содержащий кнопки, которые действуют как панель инструментов.Я хочу клонировать/скопировать эту панель инструментов, кнопки и их функциональность во вторую форму.
Клонировать меню было просто с помощью newmenu.merge(mainmenu).Это был отличный способ дублировать Tmainmenu.
Но я не знаю, как легко дублировать мою панель инструментов без необходимости вручную назначать события и хранить таймер для сравнения и отслеживания того, какие кнопки включены и отключены по сравнению с реальным главным меню в главной форме.В зависимости от того, что делает приложение, кнопки основной панели инструментов могут включаться и отключаться в разное время.
Есть идеи?Спасибо за любые предложения или советы, которые помогут сделать это проще.
Решение
Дублирование элементов управления
В конструкторе форм выберите панель и нажмите Ctrl+С скопировать его и все его дочерние элементы в буфер обмена.Перейдите во вторую форму и нажмите Ctrl+V вставить.
Если вы все еще работаете над дизайном и хотите, чтобы обе формы были одинаковыми, создайте
TFrame
и создайте там макет панели инструментов.Затем поместите экземпляр этого фрейма в обе формы.Изменения в дизайне рамок отразятся на формах.Видеть Работа с фреймами в помощи.
Убедитесь, что оба набора кнопок включены последовательно.
Создайте модуль данных.Поставьте
TActionList
в теме.Добавьте к нему действие для каждой кнопки главной формы.Назначьте обработчики событий действиям.OnUpdate
события.В них установите действия'Enabled
характеристики.Наконец, назначьте каждую кнопкуAction
свойство для ссылки на соответствующий объект действия.Кнопки будут автоматически включить и отключить с помощью действий.Таймер не требуется.Кроме того, вы можете обрабатывать действия
OnExecute
события тоже.Очистите каждую кнопкуOnClick
свойство, а затем переместите кнопкуOnClick
код в соответствующее действиеOnExecute
обработчик.Он будет автоматически вызван при нажатии кнопки, даже еслиOnClick
недвижимость пуста.Когда вы назначаете
Caption
илиHint
собственностьTAction
, соответствующие свойства любых связанных элементов управления также изменяются.Аналогично и с изображениями, если элемент управления их поддерживает.Действия также можно назначить пунктам меню.Видеть Использование списков действий в помощи.
Работаем как панель инструментов
Просто используйте
TToolbar
.Вот для чего это нужно.Или, когда вы привыкнете к действиям, поставьте
TActionManager
в своем проекте и используйте его сTActionToolbar
иTActionMainMenuBar
.Видеть Организация действий для панелей инструментов и меню. в помощи.
Другие советы
Кнопки привязаны к действиям?Если это так, вы можете использовать событие OnUpdate TActionList, чтобы указать, что следует включать, а что нет.Если нет, то переход к использованию действий не составит большого труда.
Если вы пойдете по этому пути, чтобы перейти к использованию ActionList, рассмотрите возможность размещения ActionList в модуле данных, где на него могут ссылаться различные модули и формы.
Вы можете использовать объект ClipBoard для копирования панели.
Буфер обмена.SetComponent(Panel1);
Буфер обмена.GetComponent(Form2,GroupBox1);