Autor Beitrag
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Di 28.03.06 15:30 
Tach auch Community!

Ich brauch mal eure Augen/Erfahrung und zwar habe ich um Zuweisungen zu vereinfachen eine eigene Liste von TObjectList abgeleitet TFileList.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
TFileList = class(TObjectList)
  private
    fSize:int64;
  protected
    function GetItem(Index: Integer): TFile;
    procedure SetItem(Index: Integer; AFile: TFile);
  public
    function Add(aFile: TFile): Integer;
    property Items[Index: Integer]: TFile read GetItem write SetItem;default; <span style="color: red"><-da gibt es wohl ein Problem</span>
    property FileSize:int64 read fSize write fSize;
  end;


Und so sind die einzelnen Methoden implementiert worden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
{ TFileList }

function TFileList.Add(aFile: TFile): Integer;
begin
  inherited Add(aFile);
  fSize:=fSize+aFile.FileSize;
end;

function TFileList.GetItem(Index: Integer): TFile;
begin
  inherited GetItem(index);
end;

procedure TFileList.SetItem(Index: Integer; AFile: TFile);
begin
  inherited Setitem(index,Afile);
end;


Die eigentlichen TFile Objekte sind nur Primitivlinge zur Datenhaltung.
Nun ergibt sich aber das Problem, das ich eine Zugriffsverletzung bekomme, wenn ich
ausblenden Delphi-Quelltext
1:
memo1.Lines.Add(Source.Files[i].FileName);					

aufrufe. Source gehört einer Klasse an, die ein Nachkomme von TFolderist, die wiederum eine TFileListals Attribut hat. Eine einfache Dateihierachie ebend.

So geht es aber: memo1.Lines.Add(TFile(TObjectList(Source.Files)[i]).FileName);

Ich denke ich habe bei der ItemsProperty was falsch gemacht :(
KidPaddle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: Di 28.03.06 19:09 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TFileList.GetItem(Index: Integer): TFile;
begin
  inherited GetItem(index);
end;

Da fehlt eine "Result := ", der Rückgabepointer ist immer NIL oder undefiniert.

Es müßte lauten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TFileList.GetItem(Index: Integer): TFile;
begin
  Result := (inherited GetItem(index) as TFile);
end;
digi_c Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 29.03.06 07:11 
Mist, ich Schussel, bei TFolder hatte ich das natürlich so :roll: Dank dir!