MDIForm i dynamicznie utworzenie Formy

dział ogólny

MDIForm i dynamicznie utworzenie Formy

Nowy postprzez pit » czwartek, 18 wrzeÅ›nia 2008, 13:41

Witam
Mam taki kłopocik, w oknie MDIForm tworze dynamicznie Formę w której znowu z kolei Tworzę kolejną inną dynamiczną formę. I gdy zamykam formy nie w tej kolejności program się wysypuje. Wpadłem na pomysł, że z tej pierwszej formy wywołam funkcje umieszczoną na MDIForm która utworzy mi te drugą Formę, super fajnie ale niestety nie mogę się odwoływać do komponentów Formy 2 z Formy 1. Jak to ugryźć ?
Avatar użytkownika
pit
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): poniedziałek, 14 lipca 2008, 05:53
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: MDIForm i dynamicznie utworzenie Formy

Nowy postprzez Cyfrowy Baron » czwartek, 18 wrzeÅ›nia 2008, 15:24

Jeżeli tworzysz formularze w takiej kolejności:

MDIForm -> ChildForm -> Form1

i zamykasz ChildForm to jest oczywiste, że program się posypie, gdyż ChildForm stworzył Form1 i są ze sobą połączone.

Chcąc uniknąć tego problemu musisz utworzyć na MDIForm funkcję tworzącą formularz Form1, a z ChildForm możesz wtedy wywoływać tą funkcję, w ten sposób to MDIForm będzie tworzył Form1 po wywołaniu funkcji znajdującej się na MDIForm przez ChildForm.

Zalecam ostrożność, w aplikacjach typu MDI łatwo o błędy w adresowaniu pamięci...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: MDIForm i dynamicznie utworzenie Formy

Nowy postprzez pit » piÄ…tek, 19 wrzeÅ›nia 2008, 06:59

Jak pisałem wcześniej też tak zrobiłem, ale niestety nie mogę się odwołać się do komponentów Formy2 z Form1. Już sobie poradziłem bo oprócz tworzenia Formy2 z poziomu MDI wczytuje wyniki do TStringList wywołuje funkcje MDI też z parametrem jak TStringList a ta funkcja tworzy to Formę2 i wywołuje znowu funkcję w tejże nowej Formie2 z tym samym parametrem. Miałem nadzieje, że jest inny sposób. Ważne że działa, ale czy to jest poprawne ?
Avatar użytkownika
pit
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): poniedziałek, 14 lipca 2008, 05:53
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: MDIForm i dynamicznie utworzenie Formy

Nowy postprzez pit » piÄ…tek, 19 wrzeÅ›nia 2008, 08:49

Za szybko się cieszyłem. Wydaje mi się, że ma taki problem. Mianowicie tworze dynamicznie dwa obiekty typu TForm1 o nazwie Form1 który jest wskaźnikiem, czyli zmieniam wskaźnikowi adres przy tworzeniu następnej Formy1 a gubię adres poprzedniej Formy1, jak się nie mylę. Wszystko jest ok do puki nie zamykam Formy. W takim razie powinienem utworzyć tablice wskaźników Form1. Czy dobrze rozumuje?
Avatar użytkownika
pit
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): poniedziałek, 14 lipca 2008, 05:53
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: MDIForm i dynamicznie utworzenie Formy

Nowy postprzez Cyfrowy Baron » piÄ…tek, 19 wrzeÅ›nia 2008, 09:03

Ja się pogubiłem...

Wydaje mi się, że nie powinieneś takich kombinacji tworzyć w aplikacji MDI, bo nigdy nie będzie działać prawidłowo. W MDI okna Child są tworzone dynamicznie i stąd biorą się Twoje problemy z kolejnymi oknami.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 18 gości