Entwickler-Ecke
Sonstiges (Delphi) - autodatenbank mit zeigern
LinzerASK - Fr 27.10.06 22:15
Titel: autodatenbank mit zeigern
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 - Fr 27.10.06 22:19
Zeig mal die Definition des Datentyps.
LinzerASK - Fr 27.10.06 22:22
dass habe ich bis jetzt programmiert:
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 - Fr 27.10.06 22:26
Delphi-Quelltext
1:
| auto := auto^.Nachbar; |
LinzerASK - Fr 27.10.06 22:28
du meinst wohl automarke:=...? weil es funktioniert nämlich nicht.
mkinzler - Fr 27.10.06 22:32
Warum .Automarke? .Nachbar ist doch der Zeiger auf das nächste Auto.
LinzerASK - 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 - Sa 28.10.06 09:04
liegts vielleicht daran dass man schreiben muss p:=p^nachbar; ???
mkinzler - 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.
LinzerASK - Sa 28.10.06 12:34
ich kann jetzt machen was ich will aber es wird nicht anders.
...
LinzerASK - 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 - Sa 28.10.06 15:52
also ich habe jetzt ein lösung:
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 - Sa 28.10.06 20:00
hat jetzt keiner mehr zeit mir zu helfen?
mkinzler - 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.
Delete - 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 - Sa 28.10.06 22:04
Grenzgaenger hat folgendes geschrieben: |
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> |
Diese Lösung wurde doch schon längst vorgeschlagen.
Delete - 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 - 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.
Delete - 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 - 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.
mkinzler - So 29.10.06 13:12
.Nachbar des Vorgängers auf .Nachbar des zu Löschenden setzen, dann kannst du den Eintrag freigeben.
hansa - So 29.10.06 14:08
Doppelpost. Selber gelöscht.
hansa - So 29.10.06 14:15
Du meinst jetzt wohl aus der Liste ? Dann wäre er das nächste mal doch wieder drin. Soll er dauerhaft aus der Liste verbannt werden, dann am besten in der zugrunde liegenden Tabelle löschen. Nur temporär aus der Liste löschen ? Hm, dann wird er später doch wieder gebraucht. Und dann ? Für diesen Fall würde ich eher für die Knoten der Liste die Datenstrukturen erweitern. Noch ein boolsches Feld kommt dazu : anzeigen : boolean; Der Benutzer kann dann per Button oder sonstwas den Wert anzeigen oder es eben unterdrücken. Mehr ist zu dieser unpräzisen Frage nicht zu sagen. Dass das Programm geschrieben wird, damit irgendwer es mal benutzt ist schon klar. :D
LinzerASK - So 29.10.06 14:39
Titel: Löschen eines Datensatzes
hallo!
kann ich den eintrag auf diese art löschen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button5Click(Sender: TObject); var i:integer; begin
New(q);
p:=erster;
for i:=i to spinedit1.value do
p:=p^.nachbar; q^.nachbar:=p^.nachbar; p^.nachbar:=q;
end; |
LinzerASK - So 29.10.06 16:50
und kann man so etwas rauslöschen?
mkinzler - So 29.10.06 16:53
auto zeigt auf zu Löschenden Eintrag
Dispose( auto);
gibt Eintrag frei.
Aber Achtung wie Hansa schon erwähnt hat, wird dann der entsprechende Eintrag in der DB (wenn vorhanden) nicht mitgelöscht.
LinzerASK - So 29.10.06 17:13
also mit meiner variante geht das nicht oder wie?
jetzt einfach dispose(autoamrke), dispose(model), etc?
mkinzler - So 29.10.06 17:22
Dein Code löscht ja nichts, im Gegenteil, es wird ein neuer Eintrag erstellt:
In der Schleife, diese aber zum Vorgängers, des zu löschenden Eintrags:
Delphi-Quelltext
1: 2: 3:
| q^ := p^.nachbar; p^.nachbar:= q^.Nachbar; Dispose( q); |
Zitat: |
jetzt einfach dispose(autoamrke), dispose(model), etc? |
Nein
Dispose löscht die ganze Auto-Struktur
LinzerASK - So 29.10.06 19:53
also wie jetzt?
mkinzler - So 29.10.06 19:54
LinzerASK hat folgendes geschrieben: |
also wie jetzt? |
Was wie?
LinzerASK - So 29.10.06 20:07
was muss ich jetzt programmieren um den aktuell ausgewählten datensatz, der angezeigt wird auf meinen panels, löschen zu können - nicht aus der DB sondern nur temporär!
mkinzler - So 29.10.06 20:10
Hab ich doch oben beschrieben.
hansa - So 29.10.06 20:29
Mein Ansatz wäre immer noch : Eintrag nicht löschen, sondern lediglich kennzeichnen als gelöscht. So machen das alle DBs ! Geht das, egal warum nicht, dann hänge die Zeiger eben um. Das hat mkinzler schon skizziert. Ein Zeiger / Knoten der Liste ist lediglich eine Variable. Ich kann damit auch eine Wertzuweisung machen. Insofern ist es leicht möglich, vom Vorgänger direkt zum Nachfolger zu springen und dadurch einen Zeiger zu "überspringen". Es gibt auch Konstrukte wie : P^.Nachbar^.Nachbar^.Nachbar^. Das wird aber ohne Sicherheitsmaßnahmen wohl zu AVs führen. Deshalb geht man hin und führt Hilfsvariablen ein. Zeiger wird weitergereicht und Variable dann gelöscht.
LinzerASK - So 29.10.06 20:55
ich lade jetzt einmal mein programm hoch damit ihr euch einmal einen besseren überblick habt:
wie folgt:
mkinzler - So 29.10.06 20:58
Dann mach ne Schleife von 1 bis 2 (3-1). dann sthet in p der Vorgänger. dann speichere den nacgfolger von p (der zu löschende) in q. Biege den Nachfolger auf den nachfolger von q um. dadurch hast den Eintrag q (3.Eintrag) aus der Liste entfernt, und kannst in mit Dispose löschen.
LinzerASK - So 29.10.06 21:01
@mkinzler:
das programm ist nun online!
hansa - So 29.10.06 21:02
Genau das ist doch mein Ansatz. Es ist völlig egal, was angezeigt wird. Die paar ausgeblendeten Knoten in der Liste sind völlig uninteressant. Die wichtigen sind trotzdem da. Du brauchst keine Zeiger umzuhängen usw. Alles kann auch leicht rückgängig gemacht werden durch setzen eines Bool-Feldes.
LinzerASK - So 29.10.06 21:12
@hansa
könntest du mir das bei meinem programm reinschreiben!
ich wäre dir so dankbar!
mkinzler - So 29.10.06 21:22
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type PAuto = ^Auto; Auto = Record Automarke, Model: String; Baujahr,Verkaufspreis : Integer ; Anzeigen: Boolean; Nachbar : PAuto; End; |
Nach dem Erzeugen:
Zitat: |
p^.Anzeigen := True; |
Beim Durchschreiten der Liste nur die mit
.Anzeigen := True; berrücksichtigen.
Statt Löschen:
Zitat: |
q^.Anzeigen := False; |
LinzerASK - So 29.10.06 21:24
also ich habe jetzt echt keinen plan mehr. danke für eure bemühungen.
hansa - So 29.10.06 21:32
LinzerASK hat folgendes geschrieben: |
also ich habe jetzt echt keinen plan mehr. danke für
eure bemühungen. |
mkinzler hat mir die Arbeit trotzdem abgenommen. :mrgreen:
LinzerASK - So 29.10.06 21:52
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button5Click(Sender: TObject); var i:integer; begin
p:=p^.nachbar;
for i:=i to spinedit2.value do q:= p^.nachbar; p^.nachbar:= q^.Nachbar; Dispose(q);
end; |
hansa - So 29.10.06 21:58
Ja, das sieht gut aus. :D So in der Richtung geht das.
mkinzler - So 29.10.06 22:03
Eher
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button5Click(Sender: TObject); var i:integer; begin
p := Erster;
for i:=2 to spinedit2.value<span style="color: orange">-1</span> do p:=p^.nachbar;
q:= p^.nachbar; p^.nachbar:= q^.Nachbar; Dispose(q); end; |
LinzerASK - So 29.10.06 22:03
wenn ich das aber so mache - Fehlermeldung.
mkinzler - So 29.10.06 22:10
LinzerASK hat folgendes geschrieben: |
wenn ich das aber so mache - Fehlermeldung. |
Was für einer und wo?
LinzerASK - So 29.10.06 22:16
muss mich korrigieren.
ich setze bei i:=1 nicht i:=2 ...
dann starte ich das programm, und drücke start. dann stelle ich spinedit auf 3 und dann auf verkaufen-button, so, jetzt klicke ich per nächster-button durch , es wird nicht der 3 vorne gelöscht - sondern der 3 von hinten!
mkinzler - So 29.10.06 22:19
Der 3. von Hinten, welcher ist das von Vorne? Hat du die Grenzen beachtet?
LinzerASK - So 29.10.06 22:25
ich hab das jetzt so reinkopiert wie du es programmiert hast!
LinzerASK - So 29.10.06 22:26
ich habe das jetzt so reinkopiert in die prozedur, wie du es mir geschrieben hast.
LinzerASK - So 29.10.06 22:29
wobei ich eins nicht verstehe nimmst du i:=2 weil do dann ja spinedit1.value-1 programmierst????
hansa - So 29.10.06 22:31
An dieser Stelle :
da ist ein Fehler wirklich zu befürchten. :lol: Das nächste wäre eine Frage : wieso vermischst Du starre Elemente wie TStringList etc. mit verketteten Listen ? :shock:
LinzerASK - So 29.10.06 22:33
:lol: aber wieso jetzt wirklich 2 ...
mir ist ja das andere alles logisch - aber 2 :-D
mkinzler - So 29.10.06 22:37
p steht ja schon auf dem Ersten Element der Liste. wie oft mußt du weiterschalten um auf das 3. zu kommen?
Das -1 ist weil ich ja den Vorgänger des zu löschenden Eitrags brauche.
hansa - So 29.10.06 22:55
wundert mich, daß übehaupt was gemacht wird. Verhindert die Pseudo-Schleife das nicht komplett ?
LinzerASK - Mo 30.10.06 08:00
es funktioniert auch nicht wirklich, einmal wird ein eintrag gelöscht, dann wieder doch nicht...usw.
mkinzler - Mo 30.10.06 09:00
Wie viele Einträge hast du?
Zeig mal den aktuellen Code.
hansa - Mo 30.10.06 09:11
Auch das ist nicht verwunderlich. Schließlich bist Du jetzt soweit, eine dynamische Datenstruktur, nämlich die verkettete Liste mit einer starren FOR-Schleife zu belästigen. :lol: Das passt eben nicht zusammen und führt zu Irritationen. Baue die Liste auf und zwar wie gehabt. Als 1:1 Abbildung der Tabelle und lasse sie danach in Ruhe. Was angezeigt wird, das ist eine andere Sache. Hätte die Liste 10000 Einträge und irgendein Depp würde sich tatsächlich die Mühe machen, da 2000 Einträge temporär von Hand auszublenden, ja dann würde es eventuell Sinn machen den Speicherplatz zu minimieren. Aber eben auch nur temporär. 8)
LinzerASK - Mo 30.10.06 09:39
soll ich euche jetzt das ganze programm hochladen?
mkinzler - Mo 30.10.06 10:02
LinzerASK hat folgendes geschrieben: |
soll ich euche jetzt das ganze programm hochladen? |
Spricht eigentlich nichts dagegen.
LinzerASK - Mo 30.10.06 10:36
sodale dass programm:
LinzerASK - Mo 30.10.06 12:54
@mkinzler hast du schon was raus finden können
mkinzler - Mo 30.10.06 13:43
Du hast den begin..end - Block bei der For-Schleife vergessen.
So sollte es grundsätzlich gehen
p
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:
| rocedure TForm1.Button5Click(Sender: TObject); var i:integer; begin case spinedit2.value of 0: begin q := Erster; Erster := Erster^.Nachbar; Dispose( q); end; 1: begin p := Erster^.Nachbar; q := p^.Nachbar; p^.Nachbar := q^.Nachbar; Dispose( q); end; else p:=erster; for i:=2 to spinedit2.value-1 do begin p:=p^.nachbar; q:= p^.nachbar; p^.nachbar:= q^.Nachbar; Dispose(q); end; end; end; |
LinzerASK - Mo 30.10.06 14:28
kann ich das ganue auch ohne case of machen
mkinzler - Mo 30.10.06 14:33
Du könntest den case durch gestaffelte If-Anweisungen ersetzen, aber warum?
LinzerASK - Mo 30.10.06 17:47
ja schon aber das mit dem case scheint mir sehr kompliziert!
und vor allem funktioniert das nicht!
wenn ich bei spinedit auf 1 stelle wird der 3 eintrag gelöscht...
LinzerASK - Mo 30.10.06 18:05
lade dir mal das programm herunter, und füge deine prozedur ein!
ich wette mir dir, dass es nicht richtig arbeitet!
mfg
mkinzler - Mo 30.10.06 18:11
mein Code ist irrtümlich für einen Startindex von 0 geschrieben, bei einem Startindex von 1 sieht es natürlich anders aus;
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button5Click(Sender: TObject); var i:integer; begin if spinedit2.value = 1 then begin q := Erster; Erster := Erster^.Nachbar; Dispose( q); end else begin p:=erster; for i:=2 to spinedit2.value-1 do begin p:=p^.nachbar; q:= p^.nachbar; p^.nachbar:= q^.Nachbar; Dispose(q); end; end; end |
getiipt und nicht getestet (werde das aber nachher Nachholen)
LinzerASK - Mo 30.10.06 18:16
es funzt trotzdem nicht! ehrlich, es wird nur der erste rausgelöscht! die anderen gehen einfach nicht raus! :D
LinzerASK - Mo 30.10.06 19:40
@mkinzler
hast du es schon bei deinem progi probiert?
LinzerASK - Di 31.10.06 09:12
@mkinzler
wie schaud es aus?
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!