AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Record zu TStringlist hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

Record zu TStringlist hinzufügen

Ein Thema von EWeiss · begonnen am 12. Jun 2017 · letzter Beitrag vom 14. Jun 2017
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#51

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 10:40
So würde ich das ansatzweise machen. Minimale Implementation:

Delphi-Quellcode:
type
  // Du nimmst natürlich Deinen Record
  TDataRecord = record
    Name : string[20];
    Zahl : Integer;
  end;

  PDataRecord = ^TDataRecord;


  TDataRecordList = class(TList)
  protected
    function GetItem(AIndex: Integer): PDataRecord;
    procedure SetItem(AIndex: Integer; const Value: PDataRecord);
  public
    function Add(AData: TDataRecord): Integer;
    procedure Clear; override;
    property Items[AIndex : Integer] : PDataRecord read GetItem write SetItem; default;
  end;

implementation

{ TDataRecordList }

function TDataRecordList.Add(AData: TDataRecord): Integer;
var
  PData : PDataRecord;
begin
  New(PData);
  // Record-Inhalt kopieren (evtl. auch mit move). So bleibt Erzeugung und Freigabe in der Klasse.
  // Natürlich könnte man ein Overload von Add mit PData machen.
  PData.Name := AData.Name;
  PData.Zahl := AData.Zahl;
  Result := inherited Add(PData);
end;

procedure TDataRecordList.Clear;
var
  PData : PDataRecord;
  I : Integer;
begin
  for I := 0 to Count - 1 do
  begin
    PData := Items[I];
    Dispose(PData);
  end;
  inherited;
end;

// Setter und Getter geben jeweils wieder den Pointer zurück, um sich Kopiervorgänge zu ersparen
function TDataRecordList.GetItem(AIndex: Integer): PDataRecord;
begin
  Result := inherited Items[AIndex];
end;

procedure TDataRecordList.SetItem(AIndex: Integer; const Value: PDataRecord);
begin
  inherited Items[AIndex] := Value;
end;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#52

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 11:04
Danke für das Beispiel.. Im Moment scheint es zu gehen obwohl in der Liste 2 Einträge mehr addiert werden als ich initialisiert habe.
Macht Probleme wenn ich den Count überprüfe.

Siehe Pic!
Warum werden mehr Einträge addiert?

gruss

Geändert von EWeiss (11. Jul 2019 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#53

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 11:06
Dem Screenshot nach steht Count auf "6", was den Einträgen #0 bis #5 entspricht. Alles korrekt.
Wie die Liste sich intern verwaltet, manchmal dimensioniert sie das interne Array eine Idee größer (Stichwort Eigenschaft "Grow"), ist nur für sie selbst von Bedeutung.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#54

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 11:09
Dem Screenshot nach steht Count auf "6", was den Einträgen #0 bis #5 entspricht. Alles korrekt.
Wie die Liste sich intern verwaltet, manchmal dimensioniert sie das interne Array eine Idee größer (Stichwort Eigenschaft "Grow"), ist nur für sie selbst von Bedeutung.
Hmmmm bekomme aber einen falschen Count das führt zum Absturz.
Habe ja noch 6 und 7 auch wenn sie NIL sind.

Werden diese mitgezählt beim Sprites.Count ?.
Sorry habe mich mit dem Kram noch nie beschäftigt.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 11:11
Nein, Count sollte in Deinem Fall 6 ergeben (man darf Count nicht mit Capacity verwechseln).
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
EWeiss
(Gast)

n/a Beiträge
 
#56

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 11:22
Nein, Count sollte in Deinem Fall 6 ergeben (man darf Count nicht mit Capacity verwechseln).
Ok Danke

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#57

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 12:26
Habe da jetzt ein kleines Problem
Wie kann ich die Einträge in der Liste verschieben ?

Delphi-Quellcode:
                  if (Item + ID_MAIN) <> FlagFound then
                  begin
                    if Prop.ShortCutfound > 0 then
                      NewLen := Sprites.Count + Prop.ShortCutfound
                    else
                      NewLen := Sprites.Count;

                    Sprites.Add(TSprite.Create);
                    CreateRecycleBin(MainHandle, NewLen);
                    for x := ID_FIRST to NewLen do
                    begin
                      Sprites[x] := Sprites[x + 1];
                      if x = (NewLen - Prop.ShortCutfound) then
                      begin
                        for X1 := (NewLen - 1) downto (NewLen - Prop.ShortCutfound) do
                          Sprites.Delete(X1);
                      end;
                    end;
                    FlagFound := count;
                  end;
vorher mit dem Array war das kein Problem.

Delphi-Quellcode:
                  if (Item + ID_MAIN) <> FlagFound then
                  begin
                    if Prop.ShortCutfound > 0 then
                      NewLen := High(Sprite) + Prop.ShortCutfound
                    else
                      NewLen := High(Sprite) + 1;

                    Setlength(Sprite, NewLen);
                    CreateRecycleBin(MainHandle, NewLen);
                    for x := ID_FIRST to NewLen do
                    begin
                      Sprite[x] := Sprite[x + 1];
                      if x = (NewLen - Prop.ShortCutfound) then
                      begin
                        for X1 := (NewLen - 1) downto (NewLen - Prop.ShortCutfound) do
                          Delete(Sprite, X1);
                      end;
                    end;
                    FlagFound := count;
                  end;
gruss
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#58

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 12:30
TList<>.Move bzw. TList<>.Exchange .
http://docwiki.embarcadero.com/Libra...TList.Exchange
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#59

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 12:34
Danke werde es mal versuchen

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#60

AW: Record zu TStringlist hinzufügen

  Alt 13. Jun 2017, 18:13
Noch ein einfache frage.. reicht ein einfaches Free damit alle Classen freigegeben werden oder muss ich da
noch etwas besonderes beachten?

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 10   « Erste     456 78     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 11:45 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