Autor Beitrag
LinzerASK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 27.10.06 22:19 
Zeig mal die Definition des Datentyps.

_________________
Markus Kinzler.
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: Fr 27.10.06 22:22 
dass habe ich bis jetzt programmiert:

ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 27.10.06 22:26 
ausblenden Delphi-Quelltext
1:
auto := auto^.Nachbar;					

_________________
Markus Kinzler.
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: Fr 27.10.06 22:28 
du meinst wohl automarke:=...? weil es funktioniert nämlich nicht.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 27.10.06 22:32 
Warum .Automarke? .Nachbar ist doch der Zeiger auf das nächste Auto.

_________________
Markus Kinzler.
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: Sa 28.10.06 09:04 
liegts vielleicht daran dass man schreiben muss p:=p^nachbar; ???
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 28.10.06 11:27 
user profile iconLinzerASK hat folgendes geschrieben:
liegts vielleicht daran dass man schreiben muss p:=p^nachbar; ???

auto war ja nur ein Beispielsvaribalennamen.

_________________
Markus Kinzler.
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: Sa 28.10.06 12:34 
ich kann jetzt machen was ich will aber es wird nicht anders.

...
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: Sa 28.10.06 15:52 
also ich habe jetzt ein lösung:

ausblenden volle Höhe 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:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: Sa 28.10.06 20:00 
hat jetzt keiner mehr zeit mir zu helfen?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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



BeitragVerfasst: Sa 28.10.06 22:01 
einfach

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  
//on button click 
 PAuto  := pAuto.Nachbar; //weiterschalten

// elemente zuweisen


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 28.10.06 22:04 
user profile iconGrenzgaenger hat folgendes geschrieben:
einfach

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  
//on button click 
 PAuto  := pAuto.Nachbar; //weiterschalten

// elemente zuweisen


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>

Diese Lösung wurde doch schon längst vorgeschlagen.

_________________
Markus Kinzler.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 28.10.06 22:32 
@mKinzler: das mag schon sein, deswegen ist sie immer noch richtig ;-) , auch wenn's der kollege ignoriert. :twisted:
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: 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