AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TList mit Record füllen und an weitere TList übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

TList mit Record füllen und an weitere TList übergeben

Ein Thema von dGeek · begonnen am 26. Aug 2016 · letzter Beitrag vom 26. Aug 2016
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
dGeek
(Gast)

n/a Beiträge
 
#1

TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 09:49
Entweder war ich gestern Abend zu müde oder das was ich vorhabe funktioniert nicht.

Ich habe folgenden Record:
Delphi-Quellcode:
type
 TDataType = (dtFile, dtDirectory);

type
 PFileEntry = ^TFileEntry;

 TFileEntry = packed record
  sFileName: String;
  aDataType: TDataType;
 end;

var
 aProcessFileEntry: PFileEntry;
 aProcessFileList_Record: TList; // Holder
Ich erzeuge mit New() die Datensätze (Records) füge sie der TList mit Add() hinzu.

An einer späteren Stelle muss ich die Liste aussortieren.
Ich erzeuge also eine neue TList und füge gewisse Teile der originalen Liste hinzu:

Delphi-Quellcode:
for j := 0 to iCnt - 1 do
 aTmpFileList_Record.Add(aProcessFileList_Record.Items[j]);
Mein Problem ist jetzt, dass irgendetwas nicht funktioniert und ich schätze mal es liegt an dieser zweiten Liste.
Die zweite Liste hat die korrekte Länge (Count) an Datensätzen aber beim eigentlichen Prozess, wo die Liste benötigt wird, gehts nicht weiter (keine AV, nichts).

Mache ich etwas falsch beim hinzufügen in die aTmpFileList ?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 10:32
Ich erzeuge mit New() die Datensätze (Records) füge sie der TList mit Add() hinzu.
Den Record oder den Pointer? Ich hoffe mal den Pointer...

Klar kann man noch mit New & Dispose arbeiten.. Aber warum nimmst Du keine Klasse und eine ObjectList mit OwnsValue und schon brauchst Du Dich um nix mehr kümmern...

Mavarik
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#3

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 10:37


Kannst du mir weiteres dazu erklären?
Das kenne ich noch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 10:43
Delphi-Quellcode:
type
  TFileEntry = class
  private
    FFileName: String;
    FDataType: TDataType;
  public
    property FileName: string read FFileName write FFileName;
    property DataType: TDataType read FDataType write FDataType;
  end;
Jetzt kannst Du beliebig viele Instanzen dieser Klasse erzeugen und einer TObjectList hinzufügen. Wenn deren Eigenschaft OwnsObjects true ist (Standard), musst Du die Objekte nicht einmal mehr selbst freigeben, dann kümmert sich die TObjectList selbst darum.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#5

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 10:47
Wie erzeuge ich denn Instanzen einer Klasse? Dumme Frage

Bin jetzt so weit:

Delphi-Quellcode:
type
 TDataType = (dtFile, dtDirectory);

type
 PFileEntry = ^TFileEntry;

 TFileEntry = class(TObject) // <= Object
  sFileName: String;
  aDataType: TDataType;
 end;

type
 TMyClass = class(TComponent)
 public
  FFileEntry: TObjectList;
  constructor Create; overload;
 end;

var
 aProcessFileList_ObjectList: TFileEntry;

implementation

procedure TMyClass.Create; // hier geht es nicht weiter
begin
 FFileEntry := TObjectList.Create;
 FFileEntry.OwnsObjects := true;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:07
Mal ein Beispiel im Editor heruntergetippt:
Delphi-Quellcode:
type
  TFileEntry = class
  private
    FFileName: String;
    FDataType: TDataType;
  public
    property FileName: string read FFileName write FFileName;
    property DataType: TDataType read FDataType write FDataType;
  end;
  
...

procedure TDeinForm.ButtonTestClick(Sender: TObject);
var
  Objects: TObjectList;
  FileEntry: TFileEntry;
  i: integer;
begin
  Objects := TObjectList.Create;
  try
    FileEntry := TFileEntry.Create;
    FileEntry.Filename := 'C:\Dings\Bums\Trallalla.txt';
    FileEntry.DataType := dtFile;
    Objects.Add(FileEntry);
    FileEntry := TFileEntry.Create;
    FileEntry.Filename := 'C:\Dings\Bums';
    FileEntry.DataType := dtDirectory;
    Objects.Add(FileEntry);
    for i := 0 to Objects.Count - 1 do
      ShowMessage((Objects[i] as TFileEntry).Filename);
  finally
    Objects.Free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:31
Wozu brauchst du unbedingt den Pointer? Man kann auch den Record einfach so in die Liste reinschmeißen (oder alternativ die Klasse wie von DeddyH beschrieben). Das ganze Pointer-Gedöns würde ich weglassen, wenn es nicht auf triftigen Gründen wirklich notwendig sein sollte.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:35
Wozu brauchst du unbedingt den Pointer? Man kann auch den Record einfach so in die Liste reinschmeißen (oder alternativ die Klasse wie von DeddyH beschrieben). Das ganze Pointer-Gedöns würde ich weglassen, wenn es nicht auf triftigen Gründen wirklich notwendig sein sollte.
Das ist hat alte Schule!

So hat man das früher eben gemacht...

BTW - Schneller ist es sowieso!!

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:40
Die nicht-generische TList enthält aber nun einmal Pointer. Wie willst Du da direkt einen Record reinschreiben?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#10

AW: TList mit Record füllen und an weitere TList übergeben

  Alt 26. Aug 2016, 11:41
Ich bin zwar ein totaler Nichtskönner was Delphi angeht, mit dem Pointer ist aber leider Angewohnheit.

Danke für eure Hilfe! Eine letzte Frage habe ich aber noch.

Kann es sein, dass MeineObjectList.Clear; direkt auc Free igendwo aufruft? Denn nachdem ich .Clear; aufgerufen habe, flattert mit eine AV ins Haus wenn ich auf die ObjectList zugreifen möchte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 22:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz