dynamiczne komponenty

0

a wiec tworze sobie kilka komponentow:

SetLength(pag,Length(pag)+1);
pag[high(pag)] := TTabSheet.Create(self);
pag[high(pag)].PageControl := pcontrol;
pag[high(pag)].Caption := cap;

pozniej gdy usune komponent 0

pag[0].Destroy;

i skroce tablice o 1

SetLength(pag,Length(pag)-1);

to gdy chce sie dowiedziec ktory komponent ma dany caption uzywam petli:

for i := 0 to high(pag) do
begin
  if pag[i].Caption = Pcontrol.ActivePage.Caption then
  begin
    showmessage('pag['+IntToStr(i)+']');
  end;
end;

tylko ze petla bedzie sie zaczynala od 0 a komponentu pag[0] juz nie ma, jak zrobic zeby szukalo tylko w tych komponentach ktore sa stworzone?? wystraczyloby mi cos takiego zeby po usunieciu przyporzadkowalo od nowa kazdemu komponentowi numerki od 0, moze jest jakas funkcja przeladowywujaca/sortujaca??
albo moze w jakis inny sposob znajac caption komponentu moge sie dowiedziec jaka ma nazwe??

0

zanim zrobisz setlength, poprzesuwaj sobie w pętli elementy tablicy o numerach wyższych od komponentu usuwanego.

0

Jezeli to maja byc TTabSheet-y to po co tablica dynamiczna? Lepiej tworzyc Od razu na PageControl :-/

0

tylko ze na tych dynamicznie stworzonych TabSheet'ach sa jeszcze dynamicznie tworzone TMemo, a dokladniej to potrzebuje to do klienta IRC kazdy dynamicznie stworzony TabSheet odpowiadal bedzie kanalowi na jakim sie znajdujesz i jak przychodzi pakiet z wiadomoscia to musze wiedziec w ktorym memo ja wyswietlic, wszystko jest ok dopoki nie wyjde z ktoregos kanalu, wtedy gdy w petli szuka odpowiedniego memo sypie sie wszytsko i tak jak Łukasz napisal trzebaby bylo poprzesuwac elementy tablicy w petli, tylko czy ktos moglby mi jeszcze podpowiedziec w jaki sposob to zrobic?? sorki ale dynamika to dla mnie czarna magia :( a moze ktos ma jakies linki do sprawdzonych dobrych polskich artow na temat dynamicznych komponentow?? z gory dzieki za wszelkie informacje.

0

a próbowales DynamicznyTabSheet.PageControl:=ten_page_control_na_ktorym_ma_byc_dynamiczny_ttabsheet ? :> [diabel]

0

dzieki wszytskim za pomoc, juz sobie poradzilem z tym przesuwaniem :)

      for i := 0 to high(tab) do
        begin
          if Pcontrol.ActivePage.Caption = tab[i].Caption then
          begin
            Pcontrol.ActivePage.Destroy;
            for x := i to high(tab)-1 do
            begin
              tab[x] := tab[x+1];
              mem[x] := mem[x+1];
            end;
            SetLength(tab,high(tab));
            SetLength(mem,high(mem));
          end;
        end;

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