Hallo nochmal!
Ich habe mal ein wenig ausprobiert und habe den Code umgeschrieben. Allerdings ist in dem Code ein Fehler drinne... Denke ich zumindest. Habe auch keine Möglichkeit gefunden, wie ich den Fehler finden kann. Auch mit Debuggen finde ich nix. Ich stelle mal den Code hier rein. Vielleicht kann mir ja jemand helfen.
Delphi-Quellcode:
Type
PWert = ^TWert;
TWert = Record
Zahl : Integer; // Speichert eine Zahl ab
Prev : PWert; // Zeiger auf vorheriges Element
Next : PWert; // Zeiger auf nächstes Element
End;
var
pLetztes_Element : pWert; // Zeiger auf das letzte Element
pListen_Anfang : pWert; // Listenanfang
pElement_A : pWert; // Listenelement zum verketten
pElement_B : pWert; // Listenelement zum verketten
implementation
{$R *.DFM}
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnFirstClick(Sender: TObject);
begin
pListen_Anfang := nil; // Leere Liste
New(pElement_A); // Neues Listenelement erzeugen
pListen_Anfang := pElement_A; // Listenanfang und erste Element verknüpfen
pListen_Anfang.Next := nil; // Kein Nachfolgerelement
pListen_Anfang.Prev := nil; // Kein Vorgängerelement
pListen_Anfang.Zahl := 1; // Wert zuweisen
pLetztes_Element := pListen_Anfang; // Listenanfang ist auch zugleich das letzte Element
btnRead.Click; // Werte im Memo ausgeben
end;
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnNextClick(Sender: TObject);
Var
Temp : Integer; // Hilfsvariable
begin
if pLetztes_Element = nil then btnFirst.Click; // Liste ist leer, erste Listenelement erzeugen
// pElement_A := pLetztes_Element; // Letztes Element ist ein globaler Zeiger auf das letzte Element
Temp := pElement_A^.Zahl; // Zahl zwischenspeichern
pElement_A^.Zahl := Temp + 1; // Zahl erhöhen und zuweisen
new(pElement_B); // Neues Listenelement erzeugen
pElement_b.next := nil; // Kein Nachfolgeelement vorhanden
pElement_b.prev := pElement_A; // Vorgänger des Elementes ist A
pElement_A.next := pElement_B; // Der Nachfolger von A ist Element B
pLetztes_Element := pElement_B; // Globale Zeiger wird auf das Listende gesetzt
btnRead.Click; // Elemente im Memo ausgeben
end;
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnReadClick(Sender: TObject);
begin
lbElemente.Clear; // Memo leeren
pLetztes_Element := pListen_Anfang; // Erste Element ist immer das letzte Element
if pLetztes_Element = nil then exit; // Liste ist leer, verlassen
while pLetztes_Element^.Next <> nil do // Solange nicht das Listenende erreicht worden ist,
begin
lbElemente.Items.Add(IntToStr(pLetztes_Element^.Zahl)); // Zahl in die Listbox eintragen
pLetztes_Element := pLetztes_Element^.Next; // Zeiger auf das nächste Listenelement verweisen
end;
end;
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnDeleteClick(Sender: TObject);
begin
If pListen_Anfang = nil then exit;
// Noch zu ergänzen
end;
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnAnAnfangClick(Sender: TObject);
var Editfeld_Zahl : String;
Wert_Aus_Editfeld : Integer;
begin
Editfeld_Zahl := edtWertamAnfangEinfuegen.Text; // Wert vor Konvertierung auf Leerwert prüfen
if Editfeld_Zahl = '' then exit // Wenn Wert leer, dann verlassen
else Wert_Aus_Editfeld := StrToInt(edtWertamAnfangEinfuegen.Text); // Ansonsten Umkonvertierung durchführen
if pListen_Anfang = nil then exit; // Keine Liste erzeugt, verlassen
new(pElement_A); // Neues Listenelement erzeugen
pElement_A^.Zahl := Wert_Aus_Editfeld;
pListen_Anfang^.Next := pElement_A; // Listenanfang verweist auf das erzeugt Element
pElement_A.Next := pElement_B; // Das erzeugte Element verweist auf B
btnRead.Click; // Werte auslesen
end;
{*******************************************************************************
*******************************************************************************}
end.
Komme aber immer besser mit der Logik klar.. Dank euch. Hoffe hier kann mir nochmal jemand helfen...
Gruß Matthias