Zamknij wszystkie zakładki

0

Pisze program do tworzenia stron WWW. Dokumenty otwierane sa na zakładkach. Mam jeden problem (wiedziałem to ale straciłem zrodla poprzedniego mojego edytora) mam następujący kod do zamknięcia wszystkich zakładek:

procedure TFMain.Zamknijwszsytkie1Click(Sender: TObject);
var
  i: integer;
begin
 PCZakladki.ActivePageIndex:= PCZakladki.PageCount-1;
  try
    with PCZakladki do
      for i:= 0 to PageCount-1 do begin
        PCZakladki.ActivePageIndex:= PCZakladki.ActivePageIndex-1;
         Zamknij1Click(Sender);
            end;
  finally
  end;
end;

Lecz to nie działa w czym tkwi problem?? (wyskakuje error jak zamykam wszystkie zakładki) prosze o pomoc!!!

0

jaki error?
moze aktywna zakladka nie moze byc -1?

0

Przyjrzyj się takiej pętli:

var
  X, Y, I : Integer;
begin
  X := 10;
  Y := 0;
  for I := 0 to X do
  begin
    Inc(Y);
    X := 1;
  end;
  ShowMessage(IntToStr(Y));
  ShowMessage(IntToStr(X));
end;

Jak myślisz, ile będzie wynosiło Y na końcu ? Pomimo że do zmiennej X oznaczającej ilośc powtórzeń przypisano w ciele pętli 1, to cała pętla wykona 11 powtórzeń. A więc Y wyniesie 11.

Ale jaki to ma związek z twoim problemem ? Ano taki, że Delphi pobiera początkową wartośc PageCount i wykonuje pętle tyle razy ile ta początkowa wartośc wynosiła. A ponieważ ilośc zakładek cały czas maleje, to w końcu dochodzi do tego że procedura odwołuje sie do nieistniejącej zakładki.

Rozwiązanie ? Zamiast:

for i:= 0 to PageCount-1 do 

napisz:

for i:= PageCount-1 downto 0 do 

:)

Teraz zakładki będa usuwane od ostatniej do pierwszej i wszystko powinno być ok (chyba że bład leży też gdzie indziej).

0

dzieki dawid za pomoc bład leżał w linijkach

PCZakladki.ActiwePage:= PCZakladki.CountPage-1

a teraz wszystko działa ok thx

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