![]() |
|
|
#1
|
|||
|
|||
|
вообщем то суть такая есть массив объктов А1 класса С1
одно из свойств P1 которого объект класса С2 есть объект O1 класса С3 одно из свойств P1 которого объект класса С2 есть действия выполняемое над массивом объектов: при клике мыши на элементе массива А1[i,j] выполняется A1[i,j].P1:=O1.P1; теперь сообственно вопрос: в данном случае в A1[i,j].P1 содержится ссылка на O1.P1 а мне надо чтоб в нем содержались значения пропертей класса, но чтоб не было ссылки на объект О1. Кроме банального переприсваивания свойст есть какой нить еще способ? что то я туплю ![]() |
|
#2
|
||||
|
||||
|
create, assign?
|
|
#3
|
||||
|
||||
|
1. наследовать С2 от TPersistent
2. переопределить метод Assign в С2 3. использовать в дальнейшем Assign Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TC2 = class(TPersistent)
public
SProp: String;
IProp: Integer;
procedure Assign(Source: TPersistent); override;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TC2 }
procedure TC2.Assign(Source: TPersistent);
begin
SProp:=TC2(Source).SProp;
IProp:=TC2(Source).IProp;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
c21: TC2;
c22: TC2;
begin
c21:=TC2.Create;
c22:=TC2.Create;
c21.SProp:='hello world';
c21.IProp:=255;
c22.Assign(c21);
c21.Free;
ShowMessage(c22.SProp+' '+IntToStr(c22.IProp));
c22.Free;
end;
end.Последний раз редактировалось NumLock, 12.11.2010 в 08:59. |
|
#4
|
|||
|
|||
|
Спасибо.
именно так вчера и решил. Но все равно спасибо огромное за ответ. |