Przenoszenie komponentu pomiędzy formami

0

Witam,
próbuje rozwiązać pewien zakręcony problem, pomijając całą genezę problemu, muszę przenieść (w czasie działania programu) komponent z jednej formy na drugą i z powrotem.

Bez problemu potrafię przenieść komponent w jedną stronę, jednak za chiny ludowe nie mogę go przenieść z powrotem. Napisałem poniższą procedurę która umieszczona na formie "matce" powinna przyjąć wskazany komponent, a gdy już jakiś ma, najpierw oddać go właściwej formie (a wtedy przyjąć nowy).

 var
  fmMain: TfmMain;
  sForma: string;
  Komponent: TComponent;

procedure TfmMain.Wez_komponent(kom: TComponent; forma: string);
begin
  if ActionListForma <> '' then
  begin
    //RemoveComponent(Komponent);
    TForm(Application.FindComponent(sForma) as TForm).InsertComponent(Komponent);
  end;
  Komponent := kom;
  ListForma := forma;
  //TForm(Application.FindComponent(sForma) as TForm).RemoveComponent(Komponent);
  InsertComponent(Komponent);
end;

Przy próbie "oddania" komponentu dostaje błąd AV - próbowałem kombinować z RemoveComponent ale to nic nie dało. Bardzo proszę o pomoc gdyż sprawa jest o tyle nietypowa, że trudno coś na ten temat znaleźć, poza zdawkowym wpisem w helpie.

0

zwróć uwagę że gdy odkomentować mój kod, wygląda on tak jak w dokumentacji z tym że wywala się na:

TForm(Application.FindComponent(sForma) as TForm).RemoveComponent(Komponent);

czyli na odpowiedniku:

RemoveComponent(Temp);

z dokumentacji.

dodanie znaczników <code class="delphi"> - furious programming

2

TForm(Application.FindComponent(sForma) as TForm).RemoveComponent(Komponent);
parametr nazywa się forma zaś sForma to zmienna globalna.
Więc jak to zawsze bywa padłeś ofiarą używania bezsensownych zmiennych globalnych.

0

zrobiłem literówkę przepisując, linijkę wyżej jest nie listforma a właśnie sforma. Jednakowoż problem rozwiązałem, otóż próbowałem przekazać komponent z formy z której już go wcześniej przekazałem, a więc parametr był równy nil, w konsekwencji czego RemoveComponent wywalał AV. Powinienem na to wpaść wcześniej (zmęczenie materiału), dziękuje za uwagę.

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