Dynamiczne usuwanie dynamicznych obiektów TShape

0

Mam coś takiego:

.....
with TShape.Create(Okno.Uklad) do
begin
Brush.Color := K;
Shape := stEllipse;
Width := 5;
Height := 5;
Left := Okno.Uklad.Left + x;//Px + Form1.Im.Left;
Top := Okno.Uklad.Top + y;//Py + Form1.Im.Top;
Parent:= Okno;
Visible := True;

        OnMouseDown := Okno.LapPunkt;
        OnMouseUp := Okno.PuscPunkt;
        OnMouseMove := Okno.NaPunkt;

        //if K = clRed then Name := 'G' + IntToStr(i);
        ShowHint := True;
        Hint := IntToStr(x - 50) + ',' + IntToStr(Round( (o - y - 50) / skalay )) ;
    end;</span>

....
Opis:
Okno to forma
Uklad to TImage;
K jakis kolor
zmienne nie są tu ważne

Tworzą mi się piękne punkciki, które po spełnieniu swojej roli chciałbym usunąć.
Podczas wczytywania nowych danych pojawiają się nowe punkty a stare nie znikają i nie chodzi mi o tylko ukrycie ich ale całkowite wykasowanie.
Uklad (TImage) odświerzam i wszystko z niego znika - chodzi o Cancas. A punkty TShape'y, które są dziećmi formy (Okna) niestety nie i nie wiem jak się ich pozbyć.
Wczytuję dane wykorzystując TOpenDialog więc nie mam odwołania do zdarzeń w TShape. Może jest jakiś sposób połączenia tego. Nie wiem jak dobrać się - odwołać do tych dynamicznych obiektów.

Potrzebuję sposobu na dynamiczne usunięcie tych dynamicznych TShape'ów, lub jeżeli, ktoś z was zna prostszy sposób stworzenia czegoś na Obiekcie TImage co można przesuwać za pomocą myszki i zmieniać wartości to bardzo proszę o pomoc.

0
ZielonyON napisał(a)

Potrzebuję sposobu na dynamiczne usunięcie tych dynamicznych TShape'ów[...]

musisz po prostu zapamietac gdzies te obiekty ktore tworzysz. bo tak jak robisz to one gdzies sa, ale program nie wie gdzie. chyba najlepiej uzyc TList. jak? odsylam do googli.
//albo to mi tam...
pisane z glowy:

//zmienna globalna:
punkty:TList;

//w onCreate:
punkty:=TList.Create;

//przy oddawaniu:
punkty.Add(shape);

//usuwanie wszystkich:
while punkty.count>0 do
  begin
    TShape(punkty[0]).Free;
    punkty.delete(0); //czy moze remove..?
  end;

//w onDestroy:
liste.free;
0

Dzięki wielkie za odpowiedź. Wprowadzając Listę zorientowałem się jaki robiłem wcześniej błąd, mianowicie szukając obiektu po nazwie (przy użyciu FindComponent) szukałem w złym miejscu. W "Oknie" a powinienem w Oknie.Uklad. Zrobiłem tak i działa.
Jeszcze raz dzięki za pomoc, bo dzięki niej zacząłem analizować wszystko jeszcze raz i zobaczyłem swój błąd. Wcześniej jakoś tego nie zauważyłem. W przyszłości może zainteresuję się TList. ;-) Dzięki

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