Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array of TStringList erzeugen (https://www.delphipraxis.net/45195-array-tstringlist-erzeugen.html)

malo 2. Mai 2005 08:48

Re: Array of TStringList erzeugen
 
Zitat:

Zitat von Muetze1
Moin!

Und warum nicht einfacher mit einer TObjectList aus der Contnrs.pas anstatt einem dynamischen Arrays?

MfG
Muetze1

Vielleicht, weil ich mich damit nicht auskenne?

Das größte Verständnisproblem bei TList und TObjectList ist bei mir jedoch, wie man einen Typen festlegen kann in einer TList oder TObjectList ;)

Da hab ich nämlich noch nichts zu gefunden :oops:

Kedariodakon 2. Mai 2005 08:54

Re: Array of TStringList erzeugen
 
Du machst ne ableitung davon und machst für jede Methode ne neue mit deiner Klasse, da die ja von TObject abgeleitet ist, hast du damit kein Problem... :gruebel:

Kroko1999 2. Mai 2005 08:54

Re: Array of TStringList erzeugen
 
Delphi-Quellcode:
TObjectList.Items[Index: Integer]: TObject;
und mittels TypeCast
Delphi-Quellcode:
TStringList(TObjectList.Items[Index]);
ich verwende viel TObjectList, dann muss ich mich nicht um das Freigeben der Objecte kümmern
Delphi-Quellcode:
property OwnsObjects: Boolean;

maximov 2. Mai 2005 08:57

Re: Array of TStringList erzeugen
 
Zitat:

Zitat von malo
Zitat:

Zitat von Muetze1
Moin!

Und warum nicht einfacher mit einer TObjectList aus der Contnrs.pas anstatt einem dynamischen Arrays?

MfG
Muetze1

Vielleicht, weil ich mich damit nicht auskenne?

Das größte Verständnisproblem bei TList und TObjectList ist bei mir jedoch, wie man einen Typen festlegen kann in einer TList oder TObjectList ;)

Da hab ich nämlich noch nichts zu gefunden :oops:

Was gibt es denn auszukennen. Die methoden der listen sind selbbeschreibend. Und das die typen sind halt nicht festgelegt, da TObjectList alle TObjects aufnimmt, die es bekommt. Wenn du nun auf die objekte der liste zugreifst, dann musst du ganz normal casten:
Delphi-Quellcode:
var
  l:TObjectList;
...
  l.add(DeinObj);
...
  deinAnderesObj := l[0] as TDeineKlasse;
:-D Und schon hast du keinen stress mit irgendwelchen blöden pseudo-dynamischen arrays!

Kedariodakon 2. Mai 2005 09:02

Re: Array of TStringList erzeugen
 
Zitat:

Zitat von malo
Vielleicht, weil ich mich damit nicht auskenne?

Das größte Verständnisproblem bei TList und TObjectList ist bei mir jedoch, wie man einen Typen festlegen kann in einer TList oder TObjectList ;)

Da hab ich nämlich noch nichts zu gefunden :oops:



So da hast mal die wichtigsten:
Delphi-Quellcode:
Unit MaloUtils;

Interface

Uses   Classes, SysUtils, Contnrs;

Type
   TMaloObj   =   Class      //   Dein Obj halt...
   Private
      { Private-Deklarationen }
   Public
      { Public-Deklarationen }
   End;

Type
   TMaloObjList   =   Class( TObjectList )
   Private
      { Private-Deklarationen }
      Function GetItems( Index: Integer ):   TMaloObj;
   Public
      { Public-Deklarationen }
      Procedure   Insert( Const Index: Integer; Const MaloObj: TMaloObj );
      Function   Add( Const MaloObj: TMaloObj ): Integer;
      Property   Items[ Index: Integer ]: TMaloObj Read GetItems;   Default;
   End;

Implementation

{ TMaloObjList }

Function TMaloObjList.Add( Const MaloObj: TMaloObj ): Integer;
Begin
   Result   := Inherited Add( MaloObj );
End;

Function TMaloObjList.GetItems( Index: Integer ): TMaloObj;
Begin
   Result   := Inherited Items[ Index ] As TMaloObj;
End;

Procedure TMaloObjList.Insert( Const Index: Integer; Const MaloObj: TMaloObj );
Begin
   Inherited Insert( Index, MaloObj );
End;

End.
Den Rest kannst dir ja selbst machen ^^
Oder nimst Casts wie nen Blöder ^^
Meiner einer schreibt lieber ne Listen Klasse für, ist später lesbarer und schöner zu Warten :zwinker:

Bye

maximov 2. Mai 2005 09:12

Re: Array of TStringList erzeugen
 
@Kedariodakon: Dafür kann man lieber eins von diesen tollen delphi-pseudo-templates machen, dann hat man mit vier zeilen code eine solche klasse generisch erzeugt und kann sich den wirklich wichtigen sachen widmen. -> siehe dpCollection templatedpCollection template!

malo 2. Mai 2005 09:13

Re: Array of TStringList erzeugen
 
Irgendwie kapiere ich jetzt immer noch nichts... mit arrays geht das so:

Delphi-Quellcode:
type
  TMyType = string;

var: MeinArray: array of TMyType;
begin
  TMyType[0] := 'Hallo Welt';
end;
Und mit Klassen muss ich irgendwelche Umwege über irgendwelche Klassen gehen? Wo ist da der Vorteil? Ich sehe da nur unnötige Arbeit drin.

Kedariodakon 2. Mai 2005 09:16

Re: Array of TStringList erzeugen
 
Zitat:

Zitat von malo
Irgendwie kapiere ich jetzt immer noch nichts... mit arrays geht das so:

Delphi-Quellcode:
type
  TMyType = string;

var: MeinArray: array of TMyType;
begin
  TMyType[0] := 'Hallo Welt';
end;
Und mit Klassen muss ich irgendwelche Umwege über irgendwelche Klassen gehen? Wo ist da der Vorteil? Ich sehe da nur unnötige Arbeit drin.

Man kann sie einfacher sortieren...
Man kann sie einfacher erweitern...
Man kann einfacher Werte hinzufügen ( irgendwo irgendwan ^^ )...
Man kann einfacher Werte herrauslöschen ( irgendwo irgendwan ^^ )...
...

Bye

alcaeus 2. Mai 2005 09:16

Re: Array of TStringList erzeugen
 
Hallo malo,

das hat den Vorteil dass du ein Element aus dem Mitte der Liste loeschen kannst, ohne nachher das halbe Array verschieben musst. Das wird im Hintergrund fuer dich erledigt, und du kannst dich auf die wichtigen Dinge des Lebens konzentrieren :zwinker:
Aber wie maximov gesagt hat, ich kann auch nur die templated Collections empfehlen. Bei einem Blick drauf fuehlt man sich irgendwie frisch verliebt :love: :lol:

Greetz
alcaeus

maximov 2. Mai 2005 09:17

Re: Array of TStringList erzeugen
 
Zitat:

Zitat von malo
Irgendwie kapiere ich jetzt immer noch nichts... mit arrays geht das so:

Delphi-Quellcode:
type
  TMyType = string;

var: MeinArray: array of TMyType;
begin
  TMyType[0] := 'Hallo Welt';
end;
Und mit Klassen muss ich irgendwelche Umwege über irgendwelche Klassen gehen? Wo ist da der Vorteil? Ich sehe da nur unnötige Arbeit drin.

mal ehrlich! Schon das beispiel ist grob falsch, denn du hast vergessen das array zu vergrössern. Das zeigt auch schon warum eine klasse nicht so falsch wäre: Sie nimmt uns extrem viel arbeit ab, da sie sich selbst um solche sache kümmert und uns damit nicht belästigt. Was ist denn so schlimm an einer klasse?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Seite 2 von 3     12 3      

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