Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stress mit Record aber warum? (https://www.delphipraxis.net/90148-stress-mit-record-aber-warum.html)

fwsp 12. Apr 2007 13:58

Re: Stress mit Record aber warum?
 
Zitat:

Zitat von Chilled86
Un nu?

:wall:
greifst du irgendwo auf einen ungültigen bereich zu? alles was keinen index zwischen 0 und 19 hat weist ins nirvana und schmeißt nen fehler.

Chilled86 12. Apr 2007 14:01

Re: Stress mit Record aber warum?
 
Wie gesagt, ich mache nur das was oben steht. Wenn ich dann die Zeile auskommentiere, in der ich 'test' ins Array schreiben will, ist alles in Butter. :freak:

Matze 12. Apr 2007 14:02

Re: Stress mit Record aber warum?
 
Hast du überprüft, ob i auch wirklich nur Werte zwischen 0 und 19 annehmen kann?

ErazerZ 12. Apr 2007 14:04

Re: Stress mit Record aber warum?
 
Delphi-Quellcode:
type
  THistoryData = record
    FileName: string; // oder größe gleich reservieren mit filename: string[50]
    OldSize, NewSize: int64;
  end;
var
  HistoryData: array of THistoryData;
  i: Integer;
  s: string;
begin
  SetLength(HistoryData, 20);
  for i := 0 to Length(HistoryData) -1 do
    HistoryData[i].FileName := Format('Filename #%d', [i]);
  for i := 0 to Length(HistoryData) -1 do
    s := s + HistoryData[i].FileName + #13#10;
  ShowMessage(s);

Jelly 12. Apr 2007 14:08

Re: Stress mit Record aber warum?
 
Nicht
Delphi-Quellcode:
for i := 0 to Length(HistoryData) -1
sondern
Delphi-Quellcode:
for i := low(HistoryData) to High(HistoryData)

Klaus01 12. Apr 2007 14:11

Re: Stress mit Record aber warum?
 
Alternativ kannst Du acu anstelle des Array eine TList nehmen.
Die hat Methoden zum hinzufügen und löschen von Elementen.
Und auch eine Eigenschaft die die Größe der Liste beinhaltet.

Der Vollständigkeit halber ergänzt:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
   ....
  private
    { Private-Deklarationen } 
    type
      PHistory = ^THistory
      THistoryData = record
        FileName: string;
        OldSize, NewSize: int64;
      end;
    HistoryData : PHistory;
    HistoryList : TList;
  public
    { Public-Deklarationen } 
  end;
erstellen von Einträgen:
Delphi-Quellcode:
new(HistoryData);
HistoryData^.FileName:='...';
HistoryList.add(HistoryData);
Ausgabe von Einträgen:
Delphi-Quellcode:
for i:=0 to HistoryList.count -1 do
  begin
    HistoryData:=HistoryList.items[i]
    ShowMessage(HistoryData^.FileName);
  end;
Löschen der Liste:
Delphi-Quellcode:
While HistoryList.count > 0 do
  begin
    HistoryData:= HistoryList.items[0];
    Dispose(HistoryData);
    HistoryList.delete(0);
  end;
HistoryList.free;
Grüße
Klaus

Chilled86 12. Apr 2007 15:03

Re: Stress mit Record aber warum?
 
Zitat:

Zitat von Matze
Hast du überprüft, ob i auch wirklich nur Werte zwischen 0 und 19 annehmen kann?

Ja hab ich, hat damit aber absolut nix zu tun da der Fehler ja auch kommt, wenn ich das Array ohne for-Schleife beschreibe

Matze 12. Apr 2007 15:08

Re: Stress mit Record aber warum?
 
Das Beispiel von ErazerZ mit Jellys Änderungen funktioniert bei mir ohne Probleme (mal die komplette Unit):

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    type
      THistoryData = record
      FileName: string;
      OldSize, NewSize: int64;
    end;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  HistoryData: array of THistoryData;
  i: Integer;
  s: string;
begin
  SetLength(HistoryData, 20);

  // Array füllen
  for i := Low(HistoryData) to High(HistoryData) do
    HistoryData[i].FileName := 'Hallo';

  // Array ausgeben
  for i := Low(HistoryData) to High(HistoryData) do
    s := s + HistoryData[i].FileName + #13#10;
  ShowMessage(s);
end;

end.

Chilled86 12. Apr 2007 15:13

Re: Stress mit Record aber warum?
 
Thema erledigt. Danke Leute, dass ihr euch so viel Zeit für meine Unfähigkeit genommen habt :wall: :wiejetzt:

Hab obendrüber in ner Schleife "begin ... end" vergessen, dadurch ist dort was schief gelaufen und hat mir irgendwie alles möglich im Programm versäbelt :idea:


DANKE NOCHMAL AN ALLE!!! :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.
Seite 2 von 2     12   

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