AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Record

Ein Thema von Back2Code · begonnen am 22. Mai 2012 · letzter Beitrag vom 22. Mai 2012
Antwort Antwort
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#1

Problem mit Record

  Alt 22. Mai 2012, 15:38
Delphi-Version: 5
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 .

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.
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Problem mit Record

  Alt 22. Mai 2012, 15:45
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
Klaus

Geändert von Klaus01 (22. Mai 2012 um 18:06 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Problem mit Record

  Alt 22. Mai 2012, 18:04
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.

Geändert von Popov (22. Mai 2012 um 18:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:18 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