Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Копировать контрол в рантайме


Автор: XperT 6.10.2010, 21:23
Программа должна в рантайме создавать вкладки на которых находятся гриды класса TcxGrid. Трудность состоит в том, что я не знаю как создавать грид на основании уже существующего. Можно было бы конечно копировать все свойства грида по одному, но это очень муторный и долгий процесс. Есть ли способ скопировать контрол целиком назначив ему лишь другого родителя?

Автор: Akella 6.10.2010, 22:06
Посмотри здесь, оно, нет? http://www.devexpress.com/Support/Center/p/CQ62901.aspx

И ещё в справке
ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_Fundamentals_PatternCloneViews.htm

http://www.google.com.ua/#hl=ru&expIds=17259,26885,27016&xhr=t&q=delphi+clone+component&cp=22&pf=p&sclient=psy&site=&source=hp&aq=f&aqi=&aql=&oq=delphi+clone+component&gs_rfai=&pbx=1&fp=6d4302199366d1a5

http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.language.objectpascal/2004-01/0032.html

https://forums.codegear.com/thread.jspa?messageID=247631

Добавлено через 8 минут и 5 секунд
http://www.rsdn.ru/article/delphi/serialization.xml

Автор: okkonst 6.10.2010, 22:34
модуль typinfo. Там дофига интересных процедур. В частности, можно получить список имен всех published свойств (GetPropList) и в цикле скопировать их значения (по имени (текстовому) свойства) - GetPropValue - SetPropValue. Это называется "работа через RTTI" - Runtime Type Info

Добавлено через 4 минуты и 38 секунд
Кроме того, можно легко копировать компоненты заранее неизвестного класса. Для этого можно использовать замечательное свойство (или функцию - не смотрел) ClassType. Примерно так:
Код

type
  TControlClass=class of TControl;
var
  ctrl:TControl;
begin
    ctrl:=TControlClass(AnyControlForCopy.ClassType).Create(Self);
    ctrl.свойство:=значение;

Автор: XperT 6.10.2010, 23:55
Всем спасибо, разобрался.

Автор: Xenag 7.10.2010, 02:55
Может я чего-то не понял,
но для копирования свойств, существует метод Assign.

Автор: Akella 7.10.2010, 11:30
Ну да smile
Цитата


В общем случае, утверждение "Destination := Source" не идентично утверждению "Destination.Assign(Source)".

Утверждение "Destination := Source" принуждает Destination ссылаться на тот же объект, что и Source, а "Destination.Assign(Source)" копирует содержание объектных ссылок Source в объектные ссылки Destination.

Если Destination является свойством некоторого объекта (тем не менее, и свойство не является ссылкой на другой объект, как, например, свойство формы ActiveControl, или свойство DataSource элементов управления для работы с базами данных), тогда утверждение "Destination := Source" идентично утверждению "Destination.Assign(Source)". Это объясняет, почему LB.Items := MemStr работает, когда MemStr := LB.Items нет. 

ист: delphisources.ru


Просто "настоящие герои всегда идут в обход" (с) Бармалей  smile 

Автор: XperT 7.10.2010, 11:42
Но но но, не нужно из меня дурачка делать. smile 
Если бы всё можно было решить обычным Assign - то я бы не стал заморачиваться, только у TcxGrid она не определена. И как оказалось в результате - клонирование как раз было менее затратным решением проблемы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)