Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Дублирование компонентов и их потомков во время выполнения приложения 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;

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay