Autor |
Beitrag |
LinzerASK
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Fr 27.10.06 22:15
angenommen ich habe eine tabelle mit datensätzen.
ich möchte mir jetzt persönlich ein programm machen mit zeigern, also wo ich eine form habe mit panels auf denen ich automarke, model, baujahr und verkaufspreis ablesen kann.
ich muss mal zuerst typen definieren. - habe ich gemacht.
ich bin nun schon soweit, dass mir dass programm den letzten eintrag in der tabelle ausgibt.
jetzt möchte ich aber per "nächstes Auto" button weiter schalten! wie kann ich das programmieren!
ich kann euch gerne das bisher programmiere hochladen!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 27.10.06 22:19
Zeig mal die Definition des Datentyps.
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Fr 27.10.06 22:22
dass habe ich bis jetzt programmiert:
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Spin, Buttons, Db, DBTables, Grids, DBGrids;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; SpinEdit1: TSpinEdit; Label1: TLabel; SpinEdit2: TSpinEdit; Button5: TButton; Image1: TImage; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Bevel1: TBevel; Bevel2: TBevel; Panel5: TPanel; Bevel3: TBevel; BitBtn1: TBitBtn; Bevel4: TBevel; Table1: TTable; procedure BitBtn1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type PAuto = ^Auto; Auto = Record Automarke, Model: String; Baujahr,Verkaufspreis : Integer ; Nachbar : PAuto; End;
var Form1: TForm1; erster,p : PAuto; implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject); begin closE; end;
procedure TForm1.Button3Click(Sender: TObject); begin New(p); // Platz für erstes Auto table1.First; // geht zum Tabellenersten p^.Automarke:= table1.Fieldbyname('Automarke').asstring; p^.Model:= table1.Fieldbyname('Model').asstring; p^.Baujahr:= table1.Fieldbyname('Baujahr').asinteger; p^.Verkaufspreis:= table1.Fieldbyname('Verkaufspreis').asinteger; p^.Nachbar:=NIL; // Stapel verankern Table1.next;
While not(Table1.eof) do Begin
New(Erster); erster^.Automarke:= table1.Fieldbyname('Automarke').asstring; erster^.Model:= table1.Fieldbyname('Model').asstring; erster^.Baujahr:= table1.Fieldbyname('Baujahr').asinteger; erster^.Verkaufspreis:= table1.Fieldbyname('Verkaufspreis').asinteger; erster^.Nachbar:=p; // Verketten p:=erster; // p als aktuell obersten setzen Table1.Next; // zum nächsten Datensatz in der Tabelle gehen end;
Table1.close;
p:=p^.Nachbar; panel1.caption:=p^.Automarke; panel2.caption:=p^.Model; panel3.caption:=inttostr(p^.Baujahr); panel4.caption:=inttostr(p^.Verkaufspreis)+' '+'€';
end;
procedure TForm1.Button1Click(Sender: TObject); begin p:=p^.nachbar; end;
procedure TForm1.FormCreate(Sender: TObject); begin
end;
end. |
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 27.10.06 22:26
Delphi-Quelltext 1:
| auto := auto^.Nachbar; |
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Fr 27.10.06 22:28
du meinst wohl automarke:=...? weil es funktioniert nämlich nicht.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 27.10.06 22:32
Warum .Automarke? .Nachbar ist doch der Zeiger auf das nächste Auto.
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Fr 27.10.06 22:34
ja aber wenn ich das so schreibe wie du mir es zeigst dann läuft es nicht:
[Fehler] Unit1.pas(97): '(' erwartet, aber ':=' gefunden
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Sa 28.10.06 09:04
liegts vielleicht daran dass man schreiben muss p:=p^nachbar; ???
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 28.10.06 11:27
LinzerASK hat folgendes geschrieben: | liegts vielleicht daran dass man schreiben muss p:=p^nachbar; ??? |
auto war ja nur ein Beispielsvaribalennamen.
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Sa 28.10.06 12:34
ich kann jetzt machen was ich will aber es wird nicht anders.
...
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Sa 28.10.06 13:26
vielleicht ist es so klarer zu verstehen was ich mir vorgenommen habe zum programmieren:
In einer Tabelle befinden sich datensätze
Nr - Automarke-Model-Baujahr-Verkaufspreis
Durch einen Button "Start" wird die Tabelle in eine FIFO liste eingelesen und der erste datensatz der tabelle via 4 verschiedenen Panel angezeigt.
Der Button ‚Nächstes Auto’ zeigten den jeweils nächsten Datensatz
‚Abwertung um …%’ : Alle Autos der Liste werden um …% verbilligt (ist jetzt eigentlich nicht so wichtig)
'Verkaufe’-Button: Der entsprechende Wagen wird aus der Liste entfernt
habe ich mir so vorgestellt: durch ein spinedit wird eine zahl "eingegeben" und dann aus der liste gelöscht!
‚Neu’-Button : Unter Verwendung einer 2.Form wird ein neuer Wagen eingegeben und vorne in die Liste eingefügt
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Sa 28.10.06 15:52
also ich habe jetzt ein lösung:
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Spin, Buttons, Db, DBTables, Grids, DBGrids, jpeg;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Button5: TButton; Image1: TImage; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Table1: TTable; Image2: TImage; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; Panel9: TPanel; Bevel1: TBevel; Bevel2: TBevel; Bevel3: TBevel; procedure BitBtn1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type PAuto = ^Auto; Auto = Record Automarke, Model: String; Baujahr,Verkaufspreis : Integer ; Nachbar : PAuto; End;
var Form1: TForm1; erster,p,q : PAuto; implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject); begin closE; end;
procedure TForm1.Button2Click(Sender: TObject); begin form2.showmodal; end;
procedure TForm1.Button1Click(Sender: TObject); begin p:=erster; panel1.caption:=erster^.Automarke; panel2.caption:=erster^.model; panel3.caption:=inttostr(erster^.baujahr); panel4.caption:=inttostr(erster^.verkaufspreis)+' '+'€'; erster:=erster^.nachbar; end;
procedure TForm1.FormCreate(Sender: TObject); begin table1.active:=true; New(p);
p^.automarke:=table1.fieldbyname('automarke').asstring; p^.model:=table1.fieldbyname('model').asstring; p^.baujahr:=table1.fieldbyname('baujahr').asinteger; p^.verkaufspreis:=table1.fieldbyname('verkaufspreis').asinteger; erster:=p;
table1.next; //gleich zum nächsten Datensatz gehen/springen
while not (table1.eof) do begin New(q); //imemr wieder für neuen Platz in der Schleife q^.automarke:=table1.fieldbyname('Automarke').asstring; q^.model:=table1.fieldbyname('model').asstring; q^.baujahr:=table1.fieldbyname('baujahr').asinteger; q^.verkaufspreis:=table1.fieldbyname('verkaufspreis').asinteger; p^.nachbar:=q; p:=p^.nachbar; //aktuellen letzten Merken table1.next; end; p^.nachbar:=NIL; // oder q^.nachbar:=NIL -> bedeutet der letzte in der Liste! //weil ich es ja nur einmal ausführe!!! --> am Ende der Liste :D, darum nach END
end;
procedure TForm1.Button3Click(Sender: TObject); begin p:=erster;
panel1.caption:=table1.fieldbyname('automarke').asstring; panel2.caption:=table1.fieldbyname('model').asstring; panel3.caption:=inttostr(table1.fieldbyname('baujahr').asinteger); panel4.caption:=inttostr(table1.fieldbyname('verkaufspreis').asinteger)+' '+'€';
end;
end. |
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: Sa 28.10.06 20:00
hat jetzt keiner mehr zeit mir zu helfen?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 28.10.06 20:06
Das Problem ist, daß ich nicht geau verstehe, wo dein Problem liegt, über den Zeiger .nachbar kannst du von einem element der verketteten List auf das Nächste Wechseln.
Ich versthe aber ehrlich gesagt nicht, warum du das mit den Zeigern brauchst, wenn doch ne Datenbank dahinter liegt.
_________________ Markus Kinzler.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.10.06 22:01
einfach
Delphi-Quelltext 1: 2: 3: 4: 5:
| PAuto := pAuto.Nachbar; |
das wars.
ansonsten ist noch anzumerken, bitte formatier mal deinen code ordentlich. normal heisst es, schliessenedes element in die gleiche spalte wie das öffnende element und dazwischen eingerückt. sonst findet keiner die fehler, auch du nicht. <HTH>
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 28.10.06 22:04
_________________ Markus Kinzler.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.10.06 22:32
@mKinzler: das mag schon sein, deswegen ist sie immer noch richtig  , auch wenn's der kollege ignoriert. 
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 28.10.06 22:34
Ich weiß ja, daß es richtig ist, habs schließlich geschrieben. Ich bin mir aber nicht ganz sicher, was sein Problem ist.
_________________ Markus Kinzler.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.10.06 22:39
tja, da muss er wohl erst mal seinen code ein wenig formatieren und seine proceduren ordentlich bennenen... ich wühl mich da so nicht durch...
sieht aber von seiner beschreibung aus, wie ne schulaufgabe, bei der erst erst am anfang steht...
@mkinzler: hast recht, warten wir mal ab, bis er das problem defniert hat 
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 13:08
jetzt läuft es ja, wie kann ich das jetzt so machen, dass ich jetzt einen wagen herauslösche?
um klarzustellen was und warum ich das programmieren will:
es geht darum, für einen bekannten ein programm zu schreiben, das er selbst dann anwenden kann.
Zuletzt bearbeitet von LinzerASK am So 29.10.06 13:43, insgesamt 1-mal bearbeitet
|
|