Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

объект в property


.code ©   (2011-04-25 12:25:00) 

Есть класс TMyClass, есть форма у которой есть проперти типа TMyClass. Вопрос как правильно написать метод SetValue:


property MyClass: TMyClass read FMyClass write SetMyClass;



TMyForm.SetMyClass(Value: TMyClass);
begin
 FMyClass.Assign(Value);  
end;


или


TMyForm.SetMyClass(Value: TMyClass);
begin
 FMyClass := Value;  
end;


Германн   (2011-04-26 02:26:00) [1]


> Amoeba_   (25.04.11 22:51) [10]
>
>
> > почему срабатывает эксепшн.
>
> Как раз прямо по сабжу и с подробностями

Как раз не прямо, хоть и с подробностями. Чем вынудили ЮЗ на необдуманный топик.
Тут на ДМ вопрос о самописном наследнике TPersistent. Там на королевстве вопрос о компоненте из палитры Дельфи.


Amoeba_   (2011-04-25 22:51:00) [2]


> почему срабатывает эксепшн.

Как раз прямо по сабжу и с подробностями:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=79517


Юрий Зотов   (2011-04-25 19:14:00) [3]

> почему срабатывает эксепшн

Перекройте метод AssignTo. Иначе откуда будет известно, как Вы хотите копировать начинку объекта?


MBo   (2011-04-25 18:46:00) [4]

>почему срабатывает эксепшн.
Так и положено делать неперекрытомуTPersistent.AssignTo


.code   (2011-04-25 18:17:00) [5]

почему срабатывает эксепшн.


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TMyClass = class(TPersistent)
 public
   constructor Create(AOwner: TComponent);
 end;

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TMyClass }

constructor TMyClass.Create(AOwner: TComponent);
begin

end;

{ TForm }

procedure TForm1.FormCreate(Sender: TObject);
var
A, B: TMyClass;
begin
 A := TMyClass.Create(nil);
 B := TMyClass.Create(nil);

 B.Assign(A); //<-EXCEPTION CANNOT ASSIGN ...

end;

end.


Ega23   (2011-04-25 16:21:00) [6]

По-идее, совсем по-православному нужно событие генерить, типа OnGetADOConnection, но на практике я напрямую в форму/фрейм объект передавал.


Ega23   (2011-04-25 16:16:00) [7]


> Как-то я не вижу применения для второго варианта, если честно.

Да сплошь и рядом. Самое первое, что в голову пришло - передать в форму коннект к БД.


Юрий Зотов   (2011-04-25 16:01:00) [8]


> KSergey ©   (25.04.11 15:50) [3]
> Как-то я не вижу применения для второго варианта, если честно.

Например, любая ссылка на внешний компонент (PopupMenu и пр.)


KSergey   (2011-04-25 15:50:00) [9]

Как-то я не вижу применения для второго варианта, если честно. Особенно, если в деструкторе TMyForm написано FMyClass.Free


Юрий Зотов   (2011-04-25 13:35:00) [10]

> .code   (25.04.11 12:25)  

В первом случае копируется "начинка" объекта - то есть, имеем два экземпляра объекта: источник и приемник.

Во втором случае копируется ссылка на объект - то есть, имеем один экземпляр объекта.

Какой вариант выбрать - тот, который в данном случае нужен.


Ega23   (2011-04-25 12:29:00) [11]


>  Вопрос как правильно написать метод SetValue:


Оба варианта правильны. А какое поведение ты хочешь - зависит от тебя.


Наверх

Титульная страница Поиск, карта сайта Написать письмо