Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.11.2010, 22:26
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию Присвоение класса

вообщем то суть такая есть массив объктов А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  
Старый 12.11.2010, 02:23
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

create, assign?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 12.11.2010, 08:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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  
Старый 12.11.2010, 09:04
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Спасибо.
именно так вчера и решил.

Но все равно спасибо огромное за ответ.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter