Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Дублирование компонентов и их потомков во время выполнения приложения 2

Delphi , Компоненты и Классы , RTTI

Дублирование компонентов и их потомков во время выполнения приложения 2

Автор: Xavier

Три подруги: одна вышла замуж за сотрудника компании IBM, вторая за сотрудника компании APPALE, третья за сотрудника Microsoft... После первой брачной ночи расказывают:
Первая: Класс.. Такая надежность, такая устойчивость, такое время наработки на отказ...
Вторая: Кайф просто... Такой дружественный интерфейс, такая совместимость, такая производительность...
Третья: А мой всю ночь расказывал как это будет хорошо...


interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables, Outline;

function Replicator(C: TComponent): TComponent;

implementation

{ Следующая процедура "клонирует" свойства C1 и записывает их в C2.
C1 и C2 должны иметь один и тот же тип. Используйте данный метод для
компонентов, не имеющих метода Assign. }

procedure CloneComponent(C1: TComponent; C2: TComponent);
var
  S: TMemoryStream;
begin
  if C1.ClassType <> C2.ClassType then
    raise EComponentError.Create('Типы объектов не совместимы');
  if C1 is TWinControl then
    TWinControl(C2).Parent := TWinControl(C1).Parent;
  S := TMemoryStream.Create; { создаем поток для работы с памятью }
  with S do
  begin
    WriteComponent(C1); { пишем свойства C1 в поток }
    Seek(0, 0); { перемещаемся в начало потока }
    ReadComponent(C2); { читаем свойства из потока в C2 }
    Free; { освобождаем поток }
  end;
end;

{ Следующая функция "реплицирует" компонент C и возвращает новый
компонент типа и со свойствами компонента C. }

function Replicator(C: TComponent): TComponent;
begin
  Result := TComponentClass(C.ClassType).Create(C.Owner); { создаем компонент }
  CloneComponent(C, Result); { клонируем его }
end;

end.

Вот как это использовать:


var
  BitBtn: TBitBtn;
begin
  { Если BitBtn1 уже существует }
  TComponent(BitBtn) := Replicator(BitBtn1);
end;

Статья Дублирование компонентов и их потомков во время выполнения приложения 2 раздела Компоненты и Классы RTTI может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: RTTI ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
19.04.2024 11:49:12/0.033169984817505/0