CYFROWY BARON • PROGRAMOWANIE • Zobacz wÄ…tek - Okna mdi

Okna mdi

dział ogólny

Okna mdi

Nowy postprzez admszczep » czwartek, 8 listopada 2012, 14:36

Witam,
Mam już utworzony projekt z oknami itd. Pojawiła się konieczność utworzenia nowego modułu. I chwiałbym używając MDIForm i MDIChild utworzyć przełączanie między modułami. Tworze więc nowe okno ustawiam je jako MDIForm umieszczam na nim dwa przyciski do zmiany modułu i pod pierwszy podpinam stare okno jako MDIChild, okna nie tworzę od razu. I w momencie wywołania okna modułu

KOD cpp:   •  UKRYJ  •
OKNOM=new TOKNOM(Application);
OKNOM->Show();


Mam komunikat:


Cannot create form. No MDI Forms are currently active.



Pewnie czegoś nie zdefiniowałem. chcę też aby okno (moduł) mieściło się poniżej obiektu panel który jest umiejscowiony u góry ( na nim będą ikony poszczególnych modułów)
Ostatnio edytowano czwartek, 8 listopada 2012, 16:20 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Używaj tagów BBCode!!!
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez Cyfrowy Baron » czwartek, 8 listopada 2012, 16:07

"stare okno", które ustawiasz jako MDIChild musi mieć ustawioną właściwość FormStyle na fsMDIChild.
Okno MDIChild musi być przeniesione w opcjach projektu (Project -> Options -> Forms) z sekcji Auto-create forms do sekcji Available forms.
W pliku źródłowym okna MDIForm w sekcji include dodajesz wpis: #include "oknoMDIChild.h"
Okno MDIChild wywołujesz z poziomu okna MDIForm tak:

KOD cpp:   •  UKRYJ  •
oknoMDIChild = new ToknoMDIChild(this);


To wszystko co potrzebne do stworzenia aplikacji MDI.

KOD cpp:   •  UKRYJ  •
OKNOM=new TOKNOM(Application);


W żadnym razie Application. Okno MDICHild musisz przypisać do konkretnego okna MDIForm, a nie do aplikacji.
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
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez admszczep » piÄ…tek, 9 listopada 2012, 12:06

Witam,
Zrobiłem wszystko jak należy ale błąd jest w tym, że okno które chcę aby było jako form nie jest głównym oknem projektu (pierwszym oknem jest okno z logowaniem) i dlatego nie chce mi to działać jak przypisać, że to kolejne okno jest główne ?? jak się nie ma takiej możliwości to poprzemieniam w formach a by to z przełączaniem było głównym oknem projektu i wtedy działa.
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez Cyfrowy Baron » piÄ…tek, 9 listopada 2012, 17:14

Okno logowania w żadnym razie nie powinno być oknem głównym! No bo i po co, skoro okno logowania można uruchomić przed oknem głównym?
W celu zmiany okna wtórnego na główne, wejdź w menu: Project -> Options sekcja Forms i w ComBox'ie MainForm wybierz okno które ma być oknem głównym.
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
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez admszczep » sobota, 10 listopada 2012, 00:27

Zrobilem jak pisałes ale mam problem z odwoływaniem się do obiektów z innych form. Podczas tworzenia okna child wszystko jest ok ale jeżeli chcę z poziomu tego okna child otworzyć inne okno które jest utworzone od razu podczas uruchamiania aplikacji. w momencie ich wywołania (włączenia na nich dataset i otworzeniu formy pojawia się błąd access violation.
dodatkowo dodam, że mimo uruchomienia tej formy bezpośrednio z okna głównego kończy sie takim samym komunikatem ;/
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez admszczep » sobota, 10 listopada 2012, 03:23

niestety musiałem wszystkie formularze przenieść do Available i teraz chodzi jak należy trochę przebudowy i czasu to kosztowało :)
dzięki za wskazówki
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez Cyfrowy Baron » sobota, 10 listopada 2012, 09:17

Aplikacja MDI ma specyficzną budowę i nie do wszystkiego się nadaje. Nie wiem zresztą po co ci to i co dokładnie chciałeś osiągnąć, ale przecież żeby umieścić okno w oknie nie musisz od razu tworzyć aplikacji typu MDI.
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
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez admszczep » poniedziaÅ‚ek, 12 listopada 2012, 11:38

Mam aplikację bazodanową (baza kontaktów) teraz dopisuję do niej nowy moduł rejestr zakupów i chcę utworzyć baner w górnej części okna, na którym będą ikony poszczególnych modułów (baza kontaktów, zakupy, projekty itd) stąd pomysł z aplikacją MDI, aczkolwiek każde okno uruchomiał tylko raz a nie wielokrotnie.
Jak to mogę zrobić inaczej?
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 12 listopada 2012, 12:22

Możesz umieścić okno w oknie i nie musi to być MDI.

admszczep napisał(a):na którym będą ikony poszczególnych modułów (baza kontaktów, zakupy, projekty itd)


Ikony - przyciski mogą odwoływać się przecież do innych okien, więc to chyba nie problem. Okno główne musi po prostu sprawdzać, które okno wtórne jest aktywne i w zależności od tego aktywować odpowiednie ikony-przyciski. Trochę ze stworzeniem takiego mechanizmu się zejdzie, ale to chyba też nie problem.
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
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez admszczep » poniedziaÅ‚ek, 12 listopada 2012, 13:29

tak to nie jest problem, ale chciałem aby ten element nawigacyjny górny (panel) był stały dla całego programu aktualizuje tylko mainmenu. Jeżeli mogę utworzyć jedno okno w drugim jak jest to w większości aplikacji modułowych proszę o podanie sposobu jak to zrobić jako nie midi
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 12 listopada 2012, 23:59

Poza MDI nie słyszałem o innej metodzie dającej podobny efekt. Taką metodę musisz sam oprogramować. Okno w oknie można umieścić sterując właściwością Parent, np:

KOD cpp:   •  UKRYJ  •
Form2->Parent = Form1;

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
admszczep
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
    Windows XPFirefox

Re: Okna mdi

Nowy postprzez admszczep » wtorek, 13 listopada 2012, 11:39

Dzięki za wskazówki. Cały program już przerobiłem, naprawiłem wszystkie błędy i na razie działa poprawnie
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox


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 5 gości