Скопируйте TPanel и все его элементы управления во время выполнения

Delphi-версия 5. У меня есть приложение для сравнения файлов, которое я собираю вместе, и у него есть левая и правая панели в основной форме. Каждая панель (pnlLeft и pnlRight) имеет идентичный диапазон элементов управления и событий, разделенных только именем. то есть btnCheckLeft (... и btnCheckRight (... и у меня проблемы с синхронизацией изменений кода между двумя панелями.

Мне интересно, могу ли я создать одну панель (в отдельной форме) со всеми элементами управления и событиями, а затем во время выполнения скопировать ее дважды, один раз для pnlLeft, а другой - pnlRight в основную форму. В этой единственной форме я могу управлять кодированием только один раз, вместо того, чтобы пытаться дублировать все.

Во время процесса установите имена выравнивания и события, которые будут применяться к каждой копии, как в ...

Первая копия пустой основной формы ...

pnlLeft.Align:=alLeft;
pnlLeft.Button1Click(Sender)...

вторая копия

pnlRight.Align:=alLeft;
pnlRight.Button1Click(Sender)...

Как это возможно? Я думаю, что мне нужен Компонент полной панели, но я еще не достаточно опытен, чтобы создать Компонент такой сложности.

Я проверил это как скопировать все TLabel, связанные с TPanel на delphi, в другой TPanel?

и это дублирование компонентов во время выполнения

но не думаю, что ни один из них сделает то, что мне нужно.

Спасибо за все, с чем вы можете помочь.


person user2445336    schedule 06.06.2013    source источник


Ответы (1)


Решение вашей проблемы не заключается в дублировании элемента управления во время выполнения. Вместо этого создайте объект TFrame. Поместите туда весь код вашей панели, включая все необходимые элементы управления. Затем просто создайте его дважды и дайте каждому другое имя. Затем вы можете обратиться к LeftPanel.btnCheck и RightPanel.btnCheck.

person Rob Kennedy    schedule 06.06.2013
comment
Спасибо, но я думаю, что объяснил это плохо, я постараюсь написать более подробное объяснение и повторно опубликовать. - person user2445336; 07.06.2013
comment
Действительно? Описанная вами проблема точно решена с помощью фреймов. Определите один фрейм во время разработки, а затем поместите два экземпляра в форму. Если вы хотите внести изменения, измените определение кадра. Изменения будут автоматически применены к обоим фреймам, уже присутствующим в вашей форме. - person Rob Kennedy; 07.06.2013