AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Records, Pointer, Listen & Co.

Ein Thema von Evian · begonnen am 21. Sep 2006 · letzter Beitrag vom 23. Sep 2006
 
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Records, Pointer, Listen & Co.

  Alt 22. Sep 2006, 07:27
Hi Leute,

das mit dem nil funzt nur, wenn man ein dynamisches Array anlegt. Hier kann man sicher folgendes machen:
Delphi-Quellcode:
type
  TMyData = Record
    Point : TPoint;
    Param1 : Boolean;
    Param2 : Boolean;
    Param3 : Boolean;
    Param4 : Boolean;
  end;

type
  TDataList = array of TMyData;


type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    FDataList : TDataList;
  public
    { Public-Deklarationen }
    procedure AddData(Data : TMyData);
    procedure Clear;
  end;


var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.AddData(Data: TMyData);
begin
  IF High(FDataList) = 0 then SetLength(FDataList, 1) else
    SetLength(FDataList, Length(FDataList) + 1);
  FDataList[High(FDataList)] := Data;
end;

procedure TForm1.Clear;
begin
  FDataList := nil;
end;
Das sieht sicher recht einfach aus. Ich persönich habe aber fest gestellt, dass man immer wieder zusätzliche Methoden für den Zugriff auf die einzelnen Elemente in der Liste benötigt.

Dann kommt man von selbst auf das was bttb930 sagt. Ich benutze übrigens nur noch diese Methode.
Der Vorteil ist unter anderem, dass du häufig benötigte Functionen in dein Listenobject integrieren kannst und nebenbei natürlich schon ne Menge Funktionalität vor findest.

Ein kleines Bsp. hier:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  contnrs;

type
  TMyData = class(TObject)
  private
    FParam1: Boolean;
    FParam4: Boolean;
    FParam2: Boolean;
    FParam3: Boolean;
    FPoint: TPoint;
  protected
  public
    Constructor Create(APoint : TPoint;
                       Param1, Param2, Param3, Param4 : Boolean); overload;
    property Point : TPoint read FPoint write FPoint;
    property Param1 : Boolean read FParam1 write FParam1;
    property Param2 : Boolean read FParam2 write FParam2;
    property Param3 : Boolean read FParam3 write FParam3;
    property Param4 : Boolean read FParam4 write FParam4;
  end;

type
  TDataList = class(TObjectList)
  private
  protected
  public
    Function GetPointfromIndex(Index : Integer):TPoint;
  end;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    FDataList : TDataList;
  public
    { Public-Deklarationen }
    procedure AddData(Data : TMyData);
  end;


var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.AddData(Data: TMyData);
begin
  IF not Assigned(FDataList) then Exit;
  FdataList.Add(Data);
end;

{ TMyData }

constructor TMyData.Create(APoint: TPoint; Param1, Param2, Param3,
  Param4: Boolean);
begin
  inherited create;
  FParam1 := Param1;
  FParam2 := Param2;
  FParam3 := Param3;
  FParam4 := Param4;
  FPoint := APoint;
end;

{ TDataList }

function TDataList.GetPointfromIndex(Index: Integer): TPoint;
var Data : TMyData;
begin
  // vorbelegen
  Result := Point(-1, -1);
  // bei blödsinnigem Index raus
  IF (Index < 0) or (Index >= self.Count) then Exit;
  // Typ-casting
  Data := TMyData(self.Items[Index]);
  try
    IF not assigned(Data) then Exit;
    Result := Data.Point;
  except
    Result := Point(-1, -1);
  end;
end;
o.k. ich hab mir hier jetzt das creieren und frei geben der Liste gespart, aber es soll nur mal die grundlegende Vorgehensweise zeigen. Wie in den vorherigen Beiträgen beschrieben wird jetzt mit der Freigabe der Liste automatisch auch jedes enthaltene Data-Objekt mit frei gegeben.

das wars von mir,

Gruß oki
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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