Autor Beitrag
Grimsch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 03.09.09 06:44 
Moin moin ;)
ich habe da ein Problem bezüglich Records in Delphi... und zwar muss ich mir bis nächste Woche die Grundstruktur von Records selbst beigebracht haben und dies mit einem kleinen Programm vorstellen.
Mein Problem dabei ist, dass ich zwar schon weiß was Records sind usw. aber nirgends im Internet gefunden habe wie man ein ganz einfaches und simples Programm erstellt. Desweiteren hab ich auch nirgends Quelltexte gefunden, welche Verknüpfungen mit Buttons, Panels usw beinhalten. Also ganz kurz und knapp: Ich weiß nicht wie ich einen Record zum "Laufen" bringe.

Würde mich über Eure Hilfe sehr freuen!

MfG
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 03.09.09 07:39 
Der Klassiker für eine Records-Beispielanwendung ist wohl eine Mini-Adressverwaltung.
Mach Dir einen Record, der die Daten enthält (Name, Vorname, Straße, etc). Und speichere diese Records in einem Array.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 03.09.09 11:06 
1) Record definieren

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
TMyRecord = record
 Feld1 : Datentyp; // z.b. integer, String, etc.
 Feld2 : Datentyp;
 usw.
end;


2) Record verwenden

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var MyRecord : TMyRecord; // Variable Anlegen
begin
 // zuweisen:
 MyRecord.Feld1 := Wert;
 // auslesen
 Wert := MyRecord.Feld1;


den Rest darfst du dir selber erarbeiten ;)

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 03.09.09 12:18 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  Tschueler = record
  name: string;
  nummer:integer;
  end;

var
  Form1: TForm1;
  schueler: Tschueler;


implementation

{$R *.dfm}

begin
schueler.name:=  'Peter';
Peter:= schueler.name;

end.


erstmal danke für die schnelle antwort aber noch fehlt mir da irgendwie etwas.
1. ich weiß noch nicht genau wie ich die reihenfolge machen soll. ist sie soweit in ordnung?
2. die zeile Peter:= ... da wird mir peter als undeclared identifier angezeigt, da ich diesen ja nicht als variable angegeben habe. Außerdem ist das ganze auch wenn es funktioniert doch nichts weiter als quelltext, welcher nichts mit der oberfläche macht zB durch buttonklick die daten in edits wiederzugeben.
Soetwas würde ich gerne machen können
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 03.09.09 12:24 
Was die Zeile mit der Zuweisung an Peter bewirken soll, entzieht sich meinem Verständnis. Aber zu den Edits: Du hast ja in Deinem Record mehrere verschiedene Datenfelder (Name und Nummer). Um diese nun auszugeben, musst Du sie doch nur abfragen (ähnlich den Properties einer Klasse).
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TDeinForm.ButtonZeigenClick(Sender: TObject);
begin
  edtName.Text := schueler.Name;
  edtNummer.Text := IntToStr(schueler.Nummer);
end;

So einfach ist das im Prinzip, zumal Du derzeit ja nur einen einzigen Record hast.
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 03.09.09 12:24 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Der Klassiker für eine Records-Beispielanwendung ist wohl eine Mini-Adressverwaltung.
Mach Dir einen Record, der die Daten enthält (Name, Vorname, Straße, etc). Und speichere diese Records in einem Array.

Gibt es denn nichts ohne Array? Unser Kurs wurde in verschiedene Arbeitsgruppen unterteilt. Wir sollen records bearbeiten, während eine andere Gruppe Arrays bearbeitet, also beides sogesagt distanziert voneinander.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 03.09.09 12:30 
Naja, wenn man eine Adressverwaltung möchte, dann muss man ja die Daten in irgendeiner Listenform halten. Da drängt sich für die Anfänger das Array geradezu auf. Es klingt für mich so, als würde euerer Lehrer gar nicht verlangen, dass ihr so tief einsteigt, sondern eher, dass er das Ziel verfolgt, hinterher das Wissen der beiden Arbeitsgruppen zu verknüpfen.

Also mach ein ganz simples Recordbeispiel (z.B. mit nur einer Adresse), ohne die Daten irgendwie listenmäßig zu speichern.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 03.09.09 12:45 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TDeinForm.ButtonZeigenClick(Sender: TObject);
begin
  edtName.Text := schueler.Name;
  edtNummer.Text := IntToStr(schueler.Nummer);
end;



wenn ich dies nun so bei mir eingebe erscheint die Fehlermeldung, dass edtName nicht definiert ist. Was nun?^^ Und was hat das edt für eine bedeutung?
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Do 03.09.09 12:53 
Ich würde dir erstmal Komplexe Datentypen im DT vorschlagen.

user profile iconGrimsch hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich dies nun so bei mir eingebe erscheint die Fehlermeldung, dass edtName nicht definiert ist. Was nun?^^ Und was hat das edt für eine bedeutung?

Wenn man Komponenten auf das Formular zieht, sollte man diese (der Übersichtlichkeit halber) einheitlich umbenennen. So besteht der Name (nicht der Text oder Caption) einer Komponente meistens aus zwei Teilen:
Zitat:
<Präfix><Verwendung>

Wenn du also ein Editfeld hast, dann könnte das Editfeld eben: edtName oder edName statt Edit1 heißen. Damit weißt du im Quelltext sofort, dass es sich um ein Eingabefeld handelt, in dem der Name stehen soll.
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 03.09.09 13:06 
ah ok danke
habe nun auch immerhin schon eine gewisse idee wie ich das machen kann aber hab immernoch ein problem und zwar folgenede:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:= schueler.name;
edit2.text:=IntToStr(schueler.nummer);

end;


hiermit werden ja die daten aus den Edits eingelesen. Nun habe ich vor sie in 2 Labels wieder auszugeben nur weiß ich nicht genau wie.
Mein ansatz war:
ausblenden Delphi-Quelltext
1:
2:
schueler.name:= label1.caption;
schueler.nummer:= label2.caption;


allerdings funktioniert das auch nicht. ich weiß mir fehlen so einige grundkenntnisse >.<
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 03.09.09 13:14 
"Funktioniert nicht" ist keine Fehlerbeschreibung. Aber die Nummer ist eine integer, der kannst Du keinen String direkt zuweisen, sondern musst ihn zuerst in eine Zahl wandeln.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 03.09.09 13:17 
Zuweisen und lesen machst du genau falsch rum ;)
Zuweisung an Edit (und lesen aus Recordfeld)
ausblenden Delphi-Quelltext
1:
Edit1.Text := Schueler.name;					

Lesen aus Edit (und zuweisen an Recordfeld)
ausblenden Delphi-Quelltext
1:
Schueler.name =:= Edit.Text;					

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Do 03.09.09 14:54 
user profile iconGrimsch hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Der Klassiker für eine Records-Beispielanwendung ist wohl eine Mini-Adressverwaltung.
Mach Dir einen Record, der die Daten enthält (Name, Vorname, Straße, etc). Und speichere diese Records in einem Array.

Gibt es denn nichts ohne Array? Unser Kurs wurde in verschiedene Arbeitsgruppen unterteilt. Wir sollen records bearbeiten, während eine andere Gruppe Arrays bearbeitet, also beides sogesagt distanziert voneinander.


Naja ist halt sinnvoll wenn man auch etwas verwendet (Arrays) wo man mehrere Werte abspeichert wenn man records verwendet, als nur einzelne Variablen o.ä.
Dann bräuchtest du ja keinen record sondern kannst die Daten direkt in Variable speichern oder ausgeben.

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 03.09.09 14:55 
ah ok super vielen dank nu funktioniert das erste kleine programm ;)
werde die nächsten tage bestimmt noch ein paar fragen haben aber vorerst bin ich zufrieden :P hätte nicht gedacht, dass mir in einem forum so geholfen werden kann =)
allerdings was mich stutzig macht ist folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
type
  Tschueler = record
  name: String;
  nummer: string;
end;
var
  Form1: TForm1;
  schueler: Tschueler;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
schueler.name:= edit1.Text;
schueler.nummer:= edit2.text;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
label1.Caption:= schueler.name;
label2.Caption:=schueler.nummer;
end;

end.


ich habe oben anstatt nummer: integer nun nummer: string geschrieben aber es funktioniert trotzdem :O könnte sich da später ein fehler einschleichen? oder kann ich es so lassen? ansonsten hätte ich gegen einen anderen lösungsvorschlag nichts einzuwenden :P


Zuletzt bearbeitet von Grimsch am Do 03.09.09 15:00, insgesamt 1-mal bearbeitet
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Do 03.09.09 14:57 
Gerne wieder neue Fragen, aber immer wieder in einem neuen Thread. ;)

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 03.09.09 15:31 
Naja es passt ja zum Topic, daher beantworte ich die Frage mal ^^
Also Strings im Record sind kein Problem, allerdings muss man wissen dass Strings eigentlich nur aus einer Adresse im Speicher bestehen (Wo dann der String liegt). Daher kann man ein solches Record nicht abspeichern.

So lange du aber nicht in Dateien schreibst kannst du das so machen.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 03.09.09 16:00 
Wenn die Nummer wirklich nummerisch ist, sollte man auch einen passenden Typ nehmen. Allerdings muss man dann bei der Ein- bzw. Ausgabe hin- und herkonvertieren (IntToStr, TryStrToInt), aber das ist ja kein großartiges Hindernis.