копирование компонента на лету в mse

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Ответить
Аватара пользователя
minoshi
постоялец
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

копирование компонента на лету в mse

Сообщение minoshi »

Доброго времени суток!

Возник вот такой вопрос, можно ли скопировать компонент при выполнении программы?
имеем flv0 : tfilelistview, который расположен на tabpage0, нужно создать полную его копию при нажатии клавиши на вкладке tabpage1

я попробывал вот так:

Код: Выделить всё

var 
  flv : tfilelistview;

begin
   flv := tfilelistview.create(self);
   flv := flv0;
   flv.name := 'flv1';
   flv.parentwidget := tabpage1;


компонент на вкладке 1 появился, но на вкладке 0 исчез (я так понял, что он не скопировался, а переносся).
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

нельзя.

надо создать новый и настроить его также как первый.
Аватара пользователя
minoshi
постоялец
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Сообщение minoshi »

либо создавать через .create(self)
и копировать все свойства

печально, столько "лишних" строк ...
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Use copycomponent() procedure.

Martin
Аватара пользователя
minoshi
постоялец
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Сообщение minoshi »

это не процедура, а функция

где-то так ...

Код: Выделить всё

uses ... mseclasses;
...
procedure tmainfo.copy_component(const sender: TObject);
var b : tbutton;
begin
 b := tbutton.create(self);
 b := copycomponent(tbutton2,nil,nil,nil,nil,nil) as tbutton;
 with b do
   begin
    name := 'sss';
    caption := 'new';
    bounds_y := 70;
    parentwidget := mainfo;
   end;
end;

работает, однако.
свойство name менять в обязательном порядке, иначе нарветесь на ошибку "dublicate name"

Добавлено спустя 6 минут 30 секунд:
p.s. осталось сообразить, как все это прикрутить к своей программе :-\
Ответить