Delphi - Pilne!

0

Witajcie.... mam dosyc bardzo wazny problem, kompilacja przebiegla pomyslnie, jest sobie przycisk w programie ktory dodaje do tablicy odpowiednie dane z pol edit, ale po kliknieciu program sie wywala z takim bledem:

Debbuger Exception Notification
Projekt Projekt1.exe raised exception class EAccessViolation with message 'Acces violation at address 0040303F96 in module 'Projekt1.exe'. Read of adress FFFFFFFFA'. Process stopped. Use Step or Run to continue.

Przycisk na który się klika to:

procedure TForm1.DodajClick(Sender: TObject);
begin
SetLength(tablica,Length(tablica)+1);
tablica[Length(tablica)].imie:=pimie.Text;
tablica[Length(tablica)].nick:=pnick.Text;
tablica[Length(tablica)].email:=pemail.Text;
tablica[Length(tablica)].numergg:=pggnumber.Text;
end;

Jeżeli będzie taka potrzeba mogę cały kod źródłowy tutaj umieścić.... co do tablicy: tablica rekordu o nazwie 'kontakt', ktory sie sklada z imie, nick, email, numergg....

0

W sumie to nie wiem czy można użyć Length (może i można, bo ja wiem.... :-/ ), ale można High i nie +1 tylko +2.

procedure TForm1.DodajClick(Sender: TObject);
begin
SetLength(tablica, High(tablica)+2);
tablica[High(tablica)].imie:=pimie.Text;
tablica[High(tablica)].nick:=pnick.Text;
tablica[High(tablica)].email:=pemail.Text;
tablica[High(tablica)].numergg:=pggnumber.Text;
end;

No i temat postu niewiele mi mówi... ale co tam :-D

[dopisane]

High() zwraca index ostatniego elementu tablicy (pamiętaj o indexowaniu od 0), a w SetLength() musisz wpisać ilość elementów, czyli Index +1. A skoro chcesz powiększyc o jeden element to piszesz +2.

0

Hmmm z tego co zauważyłem w zmianach to fakt, że 'Read of adress AA.....' zmienił się na 'Read of adress: 000....E'....

0

Tak powinno działać.

tablica[Length(tablica)-1].pole:=cośtam;
0

dzięki!!! (prawie) Wszystko już działa pięknie! :d :d

0

Hmmm dobra, wszystko pięknie z jednym ale.... wie ktoś moze jak posortować tablicę alfabetycznie wg. pozycji tablica[].imie ? :/ chociaż sam algorytm jakiś czy cóś....

0

To może ja jeszcze zadam pytanko. Analizowałem moją odpowiedź parę razy i wydaje się być ok :-/ . Gdzie popełniłem błąd?

Przytocze Help'a:

<font color="darkblue">{...} Length returns the number of elements in the array, High returns the array’s highest index (that is, Length – 1) {...}</span>

0

dziękuję! Btw, robiłem sposobem Twoim Matrox... (wczesniej sie okazalo ze byla literowka w kodzie) i nie wiem za chiny dlaczego moge wykonac procedure:

procedure TForm1.generujClick(Sender: TObject);
var i:integer;
begin
pole.Text:='';
   for i:=0 to Length(tablica)-1 do
     begin
       pole.Text:=pole.Text + #13 + 'imie: ' + tablica[i].imie + ' nick: ' + tablica[i].nick + #13 + 'e-mail: ' + tablica[i].email + #13 + 'numer gg: ' + tablica[1].numergg + #13;
     end;

end;

Tylko i wyłącznie pod warunkiem, że mam minimum 2 pozycje dodane, wszystko dziala... przy tylko jednej się wywala.

0

Looknij dobrze a znajdziesz:

tablica[<font color="red">1</span>].numergg

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