Sprawa wygląda tak:
Sytuacja wygląda tak: stworzyłeś w rozdaniu komponenty o nazwach KartaStolxxx. One cały czas są na formie. Są usuwane dopiero podczas zamykania formy (wg kodu, który podałeś). Za drugim razem znowu chcesz na formie umieścić komponenty o nazwach KartaStolxxx - ale one już są, więc wyrzuca błąd. Masz dwa wyjścia:
-
Na początku CardCreate wstaw taki sam kod, jaki wpisałeś w zdarzeniu OnClose formy (czyli zwalniaj karty z poprzedniego rozdania)
-
Zamiast tworzyć karty dynamicznie za każdym rozdaniem, twórz je tylko raz i potem pokazuj/ukrywaj za pomocą Show/Hide. Wtedy zarządzanie komponentami będzie prostsze i bardziej efektywne.
Ranides napisał(a)
...stworzyłeś w rozdaniu komponenty o nazwach KartaStolxxx. One cały czas są na formie. Są usuwane dopiero podczas zamykania formy (wg kodu, który podałeś). Za drugim razem znowu chcesz na formie umieścić komponenty o nazwach KartaStolxxx - ale one już są, więc wyrzuca błąd.
Tak, faktycznie miałem taki błąd wcześniej, był poprawiony jakiś czas temu (Wcześniej przy zamknieciu formy ze stołem (Uklad) wywoływałem Rozklad.Hide), teraz jest tak:
procedure TUklad.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Rozklad.Close;
end;
Więc prodedura czyszcząca jest wywoływana, poza tym gdyby nie była, to pewnie błąd by wyskakiwał przy pierwszej tworzonej karcie (rozdanie), a nie dopiero przy drugim etapie (tworzenie stołu).
Dynamika musi być, bo jest miu potrzebna w dalszej części projektu..
P.S. Trochę już nad tym siedzę, bawiłem się w debagowanie, wstawiając różne liczniki. Najgorsze jest to, że ilość wykonywanych pętli podczas tworzenia kart i ich zwalniania jest identyczna. Moim zdaniem coś się blokuje, nie wiem co i czemu... :/