Dynamiczne i niestandardowe komponenty

0

Mam zadeklarowane typy:

  TObiekt=class(TImage)
        public
          typ:byte;//1-magistrala, 2-router, 3-switch, 4-host 5-kabel
      end;

  TMagistrala=class(TObiekt)
        public
          ip:string;
          lista:array of TObject;
          destructor zniszcz;
      end;

(...)

  destructor TMagistrala.zniszcz;
    var
      i:cardinal;
    begin
      SetLength(lista,0);
    end;

(...)

  procedure TOknoGlowne.ResetClick(Sender: TObject);                 //To jest procedura niszcząca wszystkie obiekty
  //czysci wszystkie dotychczas wczytane dane
    var
      El:TComponent;
    begin
      for licznikM:=licznikM downto 1 do begin//magistrale
        El:=tablica.FindComponent('M' + IntToStr(licznikM));
        tablica.RemoveComponent(El);
        (el as TMagistrala).zniszcz;
      end;//for magistrale
//analogicznie dla pozostałych trzech klas
    end;//procedure ResetClock



            //utworzenie                                                          //To jest kod tworzenia
              GdzieKursor(pozycja);  //to jest procedura wczytująca pozycję kursora względem rogu formy
              NowyEl:=TMagistrala.Create(self);
              ustaw(NowyEl);
              NowyEl.Left:=pozycja.X;
              NowyEl.Top:=pozycja.Y;
              (nowyel as TObiekt).typ:=1;
              NowyEl.Picture:=mag0.Picture;
              inc(licznikM);
              NowyEl.Name:='M' + IntToStr(LicznikM);
            //form1 update
              tablica.InsertComponent(NowyEl);
              uwagi.Font.Color:=clBlack;
              uwagi.Caption:=#10'Dodano magistralę:   '+nowyel.Name;
              uwagi.Color:=clBtnFace;
              uwagi.Font.Color:=clBlack;

Tworzę dynamicznie magistrale i wszystko pięknie działa dopóki nie zechcę komponentów tego typu zniszczyć. Klasa TObiekt jest tutaj do rozpoznawania jednego z typów (TMagistrala / TRouter / TSwitch / THost ). Po utworzeniu pierwszego komponentu, gdy go niszczę pojawia się przewspaniały błąd "Acces Violation" po zakończeniu procedury niszczącej kolejno wszystkie dynamicznie utworzone komponenty. Jeżeli tworzę kilka komponentów, to błąd pojawia się dokładnie w tym samym miejscu.

Proszę o odpowiedź, ewentualnie kontakt przez gg(8303018) / aqq(5292094) / [email protected]

PS. Od wczorajszego popołudnia bezskutecznie googluję i czytałem już sporo o tworzeniu dynamicznych komponentów.

ad.2 - tablica dynamiczna, bo zakładam, że user może podłączyć do magistrali wiele routerów
ad.5 - Owa tablica to nazwa obiektu (choć faktycznie trochę niezręczna) GroupBox. Chyba dobrze jest nazywać wszystkie obiekty tak, żeby nie trzeba było ciągle przełączać sie do podglądu formy i myśleć label23, czy label54 [!!!]

0
  1. gdzie to usuwanie?
  2. czemu tablica dynamiczna a nie lista?
  3. nazywaj konstruktory i destruktory po ludzku
  4. co to jest?
        El:=tablica.FindComponent('M' + IntToStr(licznikM));
        tablica.RemoveComponent(El);
        (el as TMagistrala).zniszcz;
  1. gdzie kod tworzenia i niszczenia elementow tablicy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1