Problem z formami

0

Witam. Mam pewien uciążliwy problem. Otóż w moim programie mam stworzone 6 form. Przy włączaniu uruchamia się Forma1 i tam wybierając odpowiedni przycisk ładuje się Forma2, w tej też formie jest przycisk włączający Forme3. Teraz w tej Formie3 jest Edit, którego zawartość ma się pojawić w Edicie w Formie2 w momencie kiedy zamykamy Forme3. Niestety w momencie zamknięcia 3 Formy wyskakuje błąd: ACCESS Violation at address 004A7227 in module 'Project1.exe'. Read of address 00000380.

W projekcie mam ustawione tylko unit1 in 'Unit1.pas' {Form1}; a formy które chcę otwierać są tworzene za pomocą (np.):

 
var
  Form3: TForm3;
begin
  Form3 := TForm3.Create(Application);
end;

oczywiście podczas zamykania na samym końcu jest:

Action:=CaFree;
Form3:=Nil;

Wydaje mi się, że wszystko jest poprawnie, jednakże ciągle wyskakuje ten błąd i nie można nic zrobić. Czy wie ktoś co jest jego przyczyną?

0

Odwołujesz się do Formatki2 którą pewnie zamknąłeś, zwolniłeś i ustawiłeś zmienną ją reprezentującą na nil, tylko takie coś w tym wypadku powoduje Access Violation - według mnie, o ile w ogóle dobrze Ciebie zrozumiałem. Zrób może tak: przed pokazaniem Form2, a zamknięciem Form3, pobierz tekst z Edita do zmiennej, zamknij i uwolnij Form3, stwórz Form2 w sposób dynamiczny i wyświetl zmienną tam gdzie ma być pokazana, nie wiem w Labelu, Editcie, Captionie Formatki czy na czymś innym co pokazuje stringa, następnie pokaż ową Form2.

0

No akurat Forma3 jest pokazywana modalnie, więc Form2 ciągle sobie "żyje". Forma3 to nic innego jak okienko do wpisywania tekstu który ma się pojawić w danym miejscu Formy2.

0

To już nie rozumiem w czym może tkwić problem. Musiał być spakować cały kod i wszystkie moduły oraz formatki i trzeba było by na to spojrzeć. Bo jeżeli modalnie pokazałeś Form2, a później jej nie zniszczyłeś desktruktorem ani nie schowałeś, to tworząc Form3, coż za problem jest pokazać na Form2 jakiś string pobrany z Form3 przy jej zamykaniu. Trzeba zrobić tak. jak napisałem według mnie. Albo debugger w łapę i sprawdzasz co wynosi nil, na 1000000% skoro masz Access Violation to odwołujesz się do czegoś, co wskazuje na nil, czyli albo zostało zniszczone przez Free lub FreeAndNil albo w ogóle nie utworzone. Debuguj kod i tyle.

0

Znalazłem w końcu rozwiązanie mojego problemu i o dziwo chodziło o to, że deklarowałem np:

var
  Form3: TForm3;

Kiedy to usunąłem i zostawiłem samo:

Form3 := TForm3.Create(Application);

To wszystko zaczęło działać. Nie wiem dlaczego ale ważne, że chodzi :D

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