Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Record (https://www.delphipraxis.net/168458-problem-mit-record.html)

Back2Code 22. Mai 2012 15:38

Delphi-Version: 5

Problem mit Record
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP'ler,

ich habe mal wieder eine Frage an euch. Ich habe versucht mich mit Records auseinanderzusetzen nur so ganz durchblicken tue ich anscheinend noch nicht, ansonsten würde ich jetzt nicht dieses Thema eröffnen und nach Rat zu fragen :P.

Wie das Programm funktionieren sollte :

Man trägt einen Teamnamen ein sowie die Zeit die das Team gebraucht hat. Das Ganze wird dann in eine Listbox eingetragen. An dieser Stelle sollte dann von jedem Eintrag ein Record erstellt werden um dann oben in einem Label das Gewinnerteam mit der kürzesten Zeit auszugeben.

Code :

Code:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Panel1: TPanel;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    ListBox1: TListBox;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  liste:Record
    zeit:real;
end;

var
  Form1: TForm1;
  teamname: string;
  zeit: real;

implementation

{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    teamname := Edit1.Text;
    zeit := StrToFloat(Edit2.Text);
    Listbox1.Items.add('Team ' +  teamname + ' Zeit: ' + FloatToStr(zeit));
  except
    ShowMessage('Eingabe ist nicht korrekt! Bitte korrigieren!');
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  t:integer;
begin
  For t:=0 to Listbox1.Items.count-1 do
   Liste.Zeit:=ListBox1.Items[t];
end;

end.

Klaus01 22. Mai 2012 15:45

AW: Problem mit Record
 
Hallo,

ein Record kannst Du als Datensatz auffassen,
Er bringt mehrere Eigenschaften einer Sache zusammen.
Wie bei Dir eben Teamname und Zeit.

Delphi-Quellcode:
type
  TTeamDaten = record
    name : ansiString;
    zeit : double;
  end;
Wenn Du mehrere Records in einer Liste haben möchtest kannst Du
a) ein statisches Array nehmen
b) ein dynamisches Array
c) eine TList
d) eine eigene verkette Liste anfertigen.

Grüße
Klaus

Popov 22. Mai 2012 18:04

AW: Problem mit Record
 
Wenn du mehrere Daten an ein TStrings hänge willst, wobei TListBox Items sind TStrings, dann würde ich es mit Objekten machen, denn da kannst an jedes Item Daten anhängen wie du willst.

Hier ein kleines Beispiel. Es hängt nur ein Datum als Beispiel ran, aber du kannst es erweitern wie du willst.


Delphi-Quellcode:
type
  TInfo = class //Beispiel-Klasse
    DT: TDateTime;
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Info: TInfo;
  p: Integer;
begin
  with ListBox1 do
  begin
    Info := TInfo.Create; //Beispiel-Objekt Erstellen
    Info.DT := Now;

    p := Items.AddObject('Datum und Zeit', Info); //Zuweisen

    if p > -1 then
      ShowMessage(Format('Aktuelle Zeit im Item %d als Objekt gespeichert.',
      [p]));
  end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  DT: TDateTime;
  Info: TInfo;
begin
  with ListBox1 do
  begin
    if Count = 0 then Exit;
    if ItemIndex = -1 then Exit;
    if not (Items.Objects[ItemIndex] is TInfo) then Exit;

    Info := TInfo(Items.Objects[ItemIndex]); //Auslesen
    DT := Info.DT;

    ShowMessage('Im Objekt gespeicherte Zeit: ' + TimeToStr(DT));
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
  Info: TInfo;
begin
  with ListBox1 do //Objekte müssen separat freigegeben werden
    for i := 0 to Items.Count - 1 do
    begin
      Info := TInfo(Items.Objects[i]); //Freigeben
      Info.Free;
    end;
end;
Mit gewissem Aufwand geht es auch mit Records.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 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