घर
Top.Mail.Ru Yandeks.Metrika
मंच: "शुरुआती";
वर्तमान संग्रह: 2019.01.13;
डाउनलोड करें: [xml.tar.bz2];

नीचे

TCollection परिवर्तन घटना इसी तरह की शाखाएँ खोजें


Artem78   (2016-10-20 02:09) [0]

Здравствуйте. Скажите пожалуйста, как у экземпляра класса TCollection получить уведомление при изменении (удалении/добавлении) элементов?

Приведу пример того, что мне нужно реализовать. Есть класс заданий, который наследуется от TCollection. Это как бы модель - через него в дальнейшем планируется манипуляция объектами заданий. И есть динамический ListView, в котором будет отображатьс список заданий. Собственно говоря, хотелось бы сделать так, чтобы при изменении в коллекции, вызывалась пользовательская функция и ей передавались ID изменённых элементов. А я в этой функции отправлю ListView запрос на обновление нужных строк.

Думаю понятно, что я имею ввиду. Подскажите как это реализовать в Delphi 7.

Свои наброски класса заданий:
unit UTasks;

interface

uses SysUtils, Classes;

type
TTask = class(TCollectionItem)
 private
   //FID: integer;
   FTime: string;
   FTitle: string;
   FActive: boolean;
 public
   constructor Create(Collection: TCollection); override;
   //destructor Destroy; override;
 published
 //  property ID: integer read FID write FID;
   property Time: string read FTime write FTime;
   property Title: string read FTitle write FTitle;
   property Active: boolean read FActive write FActive;
 end;

 TTasksList = class(TCollection)
 private
   function GetTask(index:integer): TTask;
   procedure SetTask(index:integer; Value:TTask);
 public
   function Add:TTask;
   property Items[Index:integer]:TTask read GetTask write SetTask; default;
 end;

 TTasks = class(TComponent)
 private
   FTasksList: TTasksList;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure Save(Path:String);
   procedure Load(Path:String);
 published
   property TasksList: TTasksList read FTasksList write FTasksList;
   // ...
 end;

implementation

{ TTask }

constructor TTask.Create(Collection: TCollection);
begin
 inherited create(Collection);
 // ID := ...
 Time := "";
 Title := "";
 Active := false;
end;

{ TTasksList }

function TTasksList.Add: TTask;
begin
 Result := TTask(inherited Add);
end;

function TTasksList.GetTask(index: integer): TTask;
begin
 //Result := TTask(Inherited Items[index]);
 Result := TTask(Inherited GetItem(index));
end;

procedure TTasksList.SetTask(index: integer; Value: TTask);
begin
 {Items[Index]}GetItem(index).Assign(Value);
end;

{ TTasks }

constructor TTasks.Create(AOwner: TComponent);
begin
 inherited create(AOwner);
 TasksList := TTasksList.Create(TTask);
 //FTasksList := TTasksList.Create(Self);
end;

destructor TTasks.Destroy;
begin
 TasksList.Free;
 inherited;
end;

procedure TTasks.Load(Path: String);
var
 ms: TMemoryStream;
 fs: TFileStream;
begin

 fs := TFileStream.Create(path, fmOpenRead);
 ms := TMemoryStream.Create;
 try
   ObjectTextToBinary(fs, ms);
   ms.position := 0;
   ms.ReadComponent(Self);
 finally
   ms.Free;
   fs.free;
 end;
end;

procedure TTasks.Save(Path: String);
var
 ms: TMemoryStream;
 fs: TFileStream;
begin
 fs := TFileStream.Create(path, fmCreate or fmOpenWrite);
 ms := TMemoryStream.Create;
 try
   ms.WriteComponent(Self);
   ms.position := 0;
   ObjectBinaryToText(ms, fs);
 finally
   ms.Free;
   fs.free;
 end;
end;

end.



Leonid Troyanovsky ©   (2016-10-20 10:45) [1]


> Artem78   (20.10.16 02:09)

TTasksList.Changed; override ?

--
सादर, LVT



Artem78   (2016-10-20 17:09) [2]

और अधिक विस्तार से आप कर सकते हैं?



Rouse_ ©   (2016-10-20 19:13) [3]

जो लिखा गया है उसे लागू करें और ब्रेकर को विधि हैंडलर में रखें, वहां आप समझेंगे



Artem78 ©   (2016-10-24 03:54) [4]

हाँ, धन्यवाद, यह काम करने लगता है।



पन्ने: 1 पूरी शाखा

मंच: "शुरुआती";
वर्तमान संग्रह: 2019.01.13;
डाउनलोड करें: [xml.tar.bz2];

ऊपर









मेमोरी: 0.57 एमबी
समय: 0.011 c
15-1476370435
उर्फ
2016-10-13 17:53
2019.01.13
टीवी पर फ्लैश ड्राइव से बाधित वीडियो


2-1476367396
दिमित्री
2016-10-13 17:03
2019.01.13
विचित्रता प्रदर्शन


4-1252357661
Moff20
2009-09-08 01:07
2019.01.13
काम ऊ स्कैनर


15-1476480602
यूरी
2016-10-15 00:30
2019.01.13
आपको जन्मदिन की शुभकामनाएं! अक्टूबर 15 2016 शनिवार


2-1476918568
Artem78
2016-10-20 02:09
2019.01.13
TCollection परिवर्तन घटना





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский