Bledny obiekt ?

0

Mam taka mala czesc z procedury :

MenuPad := TMenuItem.Create(Self);
for n:=1 to Count do
begin
    MenuPad.Caption := RegPad.ReadString('Item'+IntToStr(n));
    ReopenFiles.Items.Add(MenuPad);
end;

MenuPad.Free;

i wyrzuca mi blad, wiec wymyslilem cos takiego :

for n:=1 to Count do
begin
    <b> MenuPad := TMenuItem.Create(Self); <b>
    MenuPad.Caption := RegPad.ReadString('Item'+IntToStr(n));
    ReopenFiles.Items.Add(MenuPad);
end;

MenuPad.Free;

Czy to znaczy ze w pierwszym rozwiazaniu obiekt MenuPad byl zwalniany, czy jak ???.
Jeli tak jest to nie trzeba zwalniac w drugim rozwiazaniu obiektu MenuPad
( MenuPad.Free ).

0

W ogóle co Ty chcesz osiągnąć?
Jeśli robisz coś na wzór dynamicznego menu, to trochę nie tak :/

Jeśli chcesz dynamiczne menu, to najpierw tworzysz tablicę:

mi: array of TMenuItem;

A potem na niej działasz:

mi[indeks] := TMenuItem.Create(self);
mi[indeks].caption:="Napis";
menu.items.add(mi[indeks]); //czy jakoś tak

Całą tablicę zwalniasz dopiero w onClose, czy gdzieś tam. W każdym razie wtedy, gdy już Ci nie będę do niczego potrzebne.

0

Chyba sie nie zrozumielismy :-/

0

Przeczytal bys chociaz ten blad to bys wszystko wiedzial [glowa]

0
Jogy napisał(a)

MenuPad := TMenuItem.Create(Self);
for n:=1 to Count do
begin
MenuPad.Caption := RegPad.ReadString('Item'+IntToStr(n));
ReopenFiles.Items.Add(MenuPad);
end;
MenuPad.Free;

Mam wrażenie, że tutaj nie chodzi o zwalnianie pamięci. Bo bez zwalniania nie było by błędu. Znaczy może być, jeżeli potem się gdzieś odwołujesz do zwolnionego obiektu. Ale tutaj jest pętla od 1 do Count. Co to jest Count? Czy to wartość ilości linii jakiegoś obiektu TStrings? Jak tak to licz do COunt -1.

A jak nie to podaj proszę błąd.

0

Count to watosc typu integer pobierana z rejestru, w niej zapisana jest ilosc otwartych plikow

0

Może napisz jaki błąd wywala .. - brak najważniejszej informacji :|

0
Deti napisał(a)

Może napisz jaki błąd wywala .. - brak najważniejszej informacji :|

Pewno Access Violation. Człowieku! Nie:

for n:=1 to Count do

tylko:

for n := 0 to Count - 1 do

// DOPISANE:
Fakt, wpadka :) Przyzwyczajenie do indeksowania od 0 wychodzi :/

0
brodny napisał(a)

Pewno Access Violation. Człowieku! Nie:

for n:=1 to Count do

tylko:

for n := 0 to Count - 1 do

A jaka to różnica? Popatrz, co on w pętli robi z tą zmienną lepiej :). Przecież może mieć dane w rejestrze ponumerowane od 1.

0

Dobra, widze, ze nikomu sie nie chce wklepac i sprawdzic, blad to 'item inserted twice', wiec problemem tu jest jedynie umiejetnosc czytania ze zrozumieniem.

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