![]() |
TObjectList-Descendant mit Templates
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo ihr,
nachdem Robert_G ![]() Ich habe mir den Code von Robert_G geschnappt, dazu das Collection-Template von maximov, und habe eine template-Version dieses TObjectList-Descendants erstellt. Fuer alle die sich mit Templates nicht auskennen: ![]() Die Verwendung koennte nicht einfacher sein. Ich deklariere mir meine Item-Klasse:
Delphi-Quellcode:
Anschliessend deklariere ich mir mein Template:
type TMyItemClass = class(TObject)
private fFoo: String; fBar: Integer; published property Foo: String read fFoo; property Bar: String read fBar; end;
Delphi-Quellcode:
Jeder der schon mal mit den Collection templates gearbeitet hat, wird dieses Verfahren kennen und auch schaetzen ;)
_LIST_ITEM_ = TMyItemClass;
{$DEFINE TYPED_LIST_TEMPLATE} {$INCLUDE objlist_tmpl.pas} TTypedList = _LIST_; TListItemClass = _LIST_ITEM_CLASS_; implementation {$INCLUDE objlist_tmpl.pas} Anschliessend kann ich ganz normal drauf zugreifen, so wie ich es mit TObject bei einer ObjectList tun kann:
Delphi-Quellcode:
In Delphi 2005 wuerde der letzte Teil natuerlich so aussehn:
fTypedList := TTypedList.Create;
fTypedList.Add(TListItem.Create); fTypedList.Add(TListItem.Create); fTypedList.Add(TListItem.Create); fTypedList.Add(TListItem.Create); with fTypedList.GetIEnumerator() do begin while MoveNext() do begin Current.Foo := 'Bar'; end; end;
Delphi-Quellcode:
Die Klasse kann natuerlich alles, was TObjectList auch kann, nur mit dem Vorteil dass ich mir saemtliche Typecasts spare, und die Funktionalitaet nicht mehr implementieren muss. Ich muss dem Ding einfach nur noch meine Klasse geben, und fertig :)
for SomeItem in fTypedList do
SomeItem.Foo := 'Bar'; Zum Kompilieren braucht ihr natuerlich die objlist_tmpl.pas sowie die Jedi-Include-Datei. Ich haenge beides mal hier an, falls ich die Jedi-Datei hier nicht anhaengen darf sagt es mir, und sie fliegt raus. Greetz alcaeus [edit=Dax]Dämliches Highlighting :roll: Mfg, Dax[/edit] |
Re: TObjectList-Descendant mit Templates
stoxx hat in
![]()
Delphi-Quellcode:
Ein kleines Beispiel in Form einer streng typisierten Liste von Labels hat er auch gleich mitgeliefert:
{$IFDEF DEVELOP_NEVER} // never define
unit templateTListU; interface uses Sysutils, Classes, Contnrs; type _TObjectListItem = TObject; {$ENDIF DEVELOP_NEVER} {$IFDEF _DECLARE_SECOND_PASS} {$DEFINE _SECOND_PASS} {$UNDEF _DECLARE_SECOND_PASS} {$ENDIF _DECLARE_SECOND_PASS} {$IFNDEF _SECOND_PASS} type _TObjectlist = class private protected fList: TObjectList; function GetItems(_Idx: integer): _TObjectListItem; function GetCount: integer; public constructor Create; destructor Destroy; override; function Add(_Item: _TObjectListItem): integer; function Remove(_Item: _TObjectListItem): integer; procedure Clear; property Items[_Idx: integer]: _TObjectListItem read GetItems; default; property Count: integer read GetCount; end; {$DEFINE _DECLARE_SECOND_PASS} {$ENDIF _SECOND_PASS} {$IFDEF DEVELOP_NEVER} implementation {$ENDIF DEVELOP_NEVER} {$IFDEF _SECOND_PASS} { _TObjectlist } constructor _TObjectlist.Create; begin inherited Create; fList := TObjectList.Create; end; destructor _TObjectlist.Destroy; begin fList.Free; inherited; end; function _TObjectlist.Add(_Item: _TObjectListItem): integer; begin Result := fList.Add(_Item); end; function _TObjectlist.Remove(_Item: _TObjectListItem): integer; begin Result := fList.Remove(_Item); end; procedure _TObjectlist.Clear; begin fList.clear; end; function _TObjectlist.GetItems(_Idx: integer): _TObjectListItem; begin Result := fList[_Idx] as _TObjectListItem; end; function _TObjectlist.GetCount: integer; begin Result := fList.Count; end; {$UNDEF _SECOND_PASS} {$ENDIF _Second_PASS} //{$WARNINGS off}
Delphi-Quellcode:
unit u_MemoList;
interface uses Sysutils, Classes, Contnrs, StdCtrls; type _TObjectListItem = TMemo; {$I templateTListU.pas} TMemoList = class(_TObjectList) end; implementation {$I templateTListU.pas} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz