Einzelnen Beitrag anzeigen

Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#1

Panels dynamisch erzeugen -> Ungültige Zeigeroperation

  Alt 26. Nov 2004, 10:57
Hallo an alle,

ich habe folgendes Problem beim dynamischen erzeugen und freigeben eines Objektes vom Typ TPanel.
Ich muss auf einer Scrollbox soviele Panels zeichnen wie Datensätze in einer Tabelle sind,
soweit alles ganz klar, aber beim freigeben der Panels bekomme ich eine "Ungültige Zeigeroperation".

Hier mal n bissle code:

Variablen
Code:
const
  myLKWBreite = 175;
  myLKWHoehe = 350;
  myLKWAbstand = 10;

var
  myLKW : Array OF TMyLKWObjekt;
Die Klasse
Code:
  TMyLKWObjekt = class(TPanel)

  (* Konstruktor / Dekonstruktor *)
  Constructor myCreate(lkwID: Integer);
  Destructor myDestroy;

  (* private deklaration *)
  private
    id: Integer;

  (* oeffentliche deklaration *)
  public

  end;
Konstruktor / Destruktor
Code:
Constructor TMyLKWObjekt.myCreate(lkwID: Integer);
Begin
  // Erst mal das Hauptpanel erzeugen
  Create     (frmTourenplan.sbTouren);
  Parent     := frmTourenplan.sbTouren;
  id         := lkwID;
End;

Destructor TMyLKWObjekt.myDestroy;
Begin
  // Ein LKW Objekt freigeben
  Inherited Destroy;
End;
Code zum erzeugen der Panels - Klappt auch ganz wunderbar
Code:
procedure TfrmTourenplan.LkwPanelsErzeugen;
Var
  i: integer;
  links, oben: Integer;

begin
  // Ggf. erst alte LKW's wieder freigeben

  // Neue Lkw's anlegen
  I := 0;

  tblLKW.Refresh;
  tblLkw.First;
  SetLength(myLKW, tblLKW.RecordCount - 1);

  Links := myLKWAbstand;
  Oben := myLKWAbstand;
  while not tblLkw.Eof do
  begin
    // LKW Panel erzeugen
    myLKW[i] := TMyLKWObjekt.myCreate(i);

    with myLKW[i] do
    begin
      // LKW Panel ausrichten
      SetBounds(Links, Oben, myLKWBreite, myLKWHoehe);

      // LKW Objekt mit Werten füllen
      Caption := intToStr(I);
    end;


    // Werte Inkrementieren
    inc(i);
    If (Links + (myLKWBreite*2) + myLKWAbstand) > sbTouren.Width then
    begin
      Links := myLKWAbstand;
      Inc(Oben, myLKWHoehe + myLKWAbstand);
    end else
    begin
      Inc(Links, myLKWBreite + myLKWAbstand);
    end;
    tblLkw.Next;
  end;
end;
Schleife zum freigeben der Panels - Bei Setlength und bei myLKW := Nil gibts den error
Code:
procedure TfrmTourenplan.LkwPanelsFreigeben;
Var
  max, i: integer;

begin
  IF myLKW <> nil then
  begin
    max := Length(myLKW);
    For I := max Downto 0 do
    begin
      myLKW[i].myDestroy;
      sleep(100);
    end;

    // Hier gibts den Fehler
    SetLength(myLKW, 0);
    // Oder hier wenn die Zeile hierdrüber ausdokumentiert wird
    myLKW := NIL;


  end;
end;

habt Ihr da vielleicht ne Idee?

Danke schonmal, michel
:: don't Panic ::
  Mit Zitat antworten Zitat