Pół dnia straciłem na szukaniu błędu a teraz jak go znalazłem jestem oburzony. Już któryś raz mi się to przytrafia. Pracuje na Delphi 4 Standard. Wcześniej sytuacja była następująca : miałem na formie TMemo i przy zamykaniu chciałem do 1 stringa zrzucić całą zawartość memo. Walnąłem więce pęlte :
s := '';
For i := 0 to Memo1.Lines.Count - 1 do
s := s + Memo1.Lines[i];
(pisze z pamięci, ale wiecie o co chodzi) i przy zamykaniu, jak sobie debugowałem zauważyłem że dziwnie przymula w tym miejscu, zacząłem więc węszyć ! Okazało się, że program wykonuje pętle, nawet gdy Memo1.Lines.Count = 0 !!!!!!!!!!!!! oburzyło mnie to niezmiernie, no ale bogatszy o taką wiadomość dodałem linijkę która załatwiała sprawę :
If Memo1.Lines.Count > 0 then ...
Wszystko grało, do dzisiaj, od rana męczy mnie jeden Access Violation. Debugowałęm w kółko i ciągle to samo, już cuda robiłem. Zwykła procka obsługi buttona i na końcu bum w momencie podstawiania ModalResult := mrOK, nawet jak pozmieniałem, wywaliłem ta linie, to przy zamykaniu foremki to samo. Mieszałem mieszałem, aż w końcu pewnego razu, debbuger zatrzymał sie na jakimś podstawieniu w stylu :
Przekroj.Warstwy[j].dHNiwelety := Odcinki[AktywnyOdcinek].Przekroje[NumerPrzekroju].Warstwy[j].dHNiwelety;
mówie co jest ? powinno byś wszystko ok , no to ciup F5 na początku pętli :
For j := 0 to (Odcinki[AktywnyOdcinek].Przekroje[NumerPrzekroju].IloscWarstw - 1) do
no i co się okazuje ! ? ! ? !
pętla się wykonuje nawet gdy Odcinki[AktywnyOdcinek].Przekroje[NumerPrzekroju].IloscWarstw = 0, a więc on robi pętle
For j := 0 to -1 do
i to robi w nieskończoność, znaczy w końcu się kończy : ( komunikatem Acces Violation - co mnie nie dziwi, bo tablica Warstwy jest skończonych rozmiarów ;] Oczywiście znowu pomogło
If Odcinki[AktywnyOdcinek].Przekroje[NumerPrzekroju].IloscWarstw > 0 then ...
no ale kurcze to nie o to chyba chodzi. Powiedzcie mi co jest nie tak, bo aż strach pomyśleć że przed każdym For będe musiał dać If !!
Z góry dziękuje za odpowiedź.