CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

[BCB C++] "Chowanie" okna przy otwieraniu kolejnego

dział ogólny

[BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Darek_C++ » poniedziałek, 31 grudnia 2012, 10:15

Witam ponownie,
Dodatkowe okna tworzę dynamicznie kodem:
KOD cpp:     UKRYJ  
if(!FormDodaj)
{
        FormDodaj = new TFormDodaj(Application);
        FormDodaj->Show();
}
else
{
        FormDodaj->Show();
}

I mają one kod mający na celu pojawianie się "przycisku" na dolnym pasku "pasku zadań" i też tak się dzieje
KOD cpp:     UKRYJ  
// W FormDodaj.h
public:         // User declarations
        void __fastcall CreateParams(TCreateParams &Params);
//
// W FormDodaj.cpp
void __fastcall TFormDodaj::CreateParams(TCreateParams &Params)
{
        TForm::CreateParams(Params);
        Params.ExStyle |= WS_EX_APPWINDOW;
        Params.WndParent = GetDesktopWindow();
}
 

Problem jest taki, że jak z poziomu tego dodatkowego okna "FormDodaj" otworze nowe - kolejne okno programu to okno "FormDodaj" chowa się i pojawia się / uaktywnia główne okno programu. Tak samo sie dzieje jak z poziomu "FormDodaj" otwierane są okna wyboru pliku zapisu / otwarcia.

Idzie temu jakoś zaradzić ?
Ostatnio edytowano poniedziałek, 31 grudnia 2012, 10:19 przez Darek_C++, łącznie edytowano 1 raz
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Cyfrowy Baron » poniedziałek, 31 grudnia 2012, 10:18

Darek_C++ napisał(a):to okno "FormDodaj" i pojawia się główne okno programu


Sformułuj tą wypowiedź jakoś inaczej, bo nie rozumiem...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Darek_C++ » poniedziałek, 31 grudnia 2012, 10:20

Już poprawione "kolejne okno programu to okno "FormDodaj" chowa się i pojawia się / uaktywnia główne okno programu." Innymi słowy chowa się okno które dalszą akcję wywołało :(
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Cyfrowy Baron » poniedziałek, 31 grudnia 2012, 10:24

KOD cpp:     UKRYJ  
Params.WndParent = GetDesktopWindow();


Zmień na np:

KOD cpp:     UKRYJ  
Params.WndParent = Form1->Handle;
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Darek_C++ » poniedziałek, 31 grudnia 2012, 10:32

Jeśli zmienię:
KOD cpp:     UKRYJ  
// W FormDodaj.cpp
void __fastcall TFormDodaj::CreateParams(TCreateParams &Params)
{
        TForm::CreateParams(Params);
        Params.ExStyle |= WS_EX_APPWINDOW;
   //   Params.WndParent = GetDesktopWindow();
   Params.WndParent = FormDodaj->Handle;
}
 
I otwieram to dodatkowe okno pojawia się wyjątek:

Exception class EAccessViolation with message 'Access violation at address 004D110A in module 'Program.exe'. Read of address 000001B4'. Process Program.exe (2076)


-----------
Jeśli dodam nagłówek formy głównej w
i dam:
KOD cpp:     UKRYJ  
//#include "Unit1Glowna.h"
Params.WndParent = Form1Glowna->Handle;
To nie ma błędu, ale forma / okno "FormDodaj" zachowuje się jak by było modalne :(
Ostatnio edytowano poniedziałek, 31 grudnia 2012, 10:37 przez Darek_C++, łącznie edytowano 1 raz
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Cyfrowy Baron » poniedziałek, 31 grudnia 2012, 10:36

Na pewno nie FormDodaj. Źle zrozumiałem twój opis problemu. Ty tworzysz okna wtórne, które mają własny przycisk na systemowym pasku zadań. Nie wiem czy dobrze rozumiem problem. Gdy tworzysz pierwsze okno FormDodaj (1) to pojawia się ono nad pierwszym oknem Głównym (0) - czyli prawidłowo, ale gdy tworzysz kolejne okno FormDodaj (2) to pierwsze okno FormDodaj (1) chowa się - TAK?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Darek_C++ » poniedziałek, 31 grudnia 2012, 10:38

Cyfrowy Baron napisał(a):Na pewno nie FormDodaj. Źle zrozumiałem twój opis problemu. Ty tworzysz okna wtórne [...] - TAK?
Dokładnie jak Piszesz.
Oknogłówne [0] otwiera dodatkowe FormDodaj [1] i jesli z poziomu tego okna FormDodaj [1] wywołam okno zapisu / odczytu pliku lub kolejne okno powiedzmy Podglad[2] To okno FormDodaj [1] się "chowa" widoczne jest okno główne Oknogłówne [0], a na min kolejne okno np zapisu pliku lub Podglad[2] .
--
Nie jest to błąd, ale wada kosmetyczna...
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Cyfrowy Baron » poniedziałek, 31 grudnia 2012, 10:48

Wiec dobrze ci podpowiedziałem. Jeżeli OknoGłowne (0) to np. Form1 to w FormDodaj robisz tak:

KOD cpp:     UKRYJ  
Params.WndParent = Form1->Handle;


Jako rodzica dla okna wtórnego ustawiasz okno Główne (0) a nie pulpit.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Darek_C++ » poniedziałek, 31 grudnia 2012, 10:53

W tym wypadku okno FormDodaj [1] zachowuje się jako modalne - jest zawsze na wierzchu, więc zdecydowanie nie o to chodzi.
Pisałem o tym po edycji w viewtopic.php?f=2&t=1828#p13592
---
Może wystarczy zmiana "rodzica dla okna wtórnego ustawiasz okno Główne (0) a nie pulpit." w kodzie poprzedzającym utworzenie dodatkowego okna w FormDodaj [1] ? Jeśli tak jak to dynamicznie zmienić ?
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] "Chowanie" okna przy otwieraniu kolejnego

Nowy postprzez Cyfrowy Baron » poniedziałek, 31 grudnia 2012, 11:22

Próbowałem różnych kombinacji i nic nie działa. Okno dialogowe jest przywoływane jako modalne więc zawsze ukrywa okno wtórne.

Darek_C++ napisał(a):Może wystarczy zmiana "rodzica dla okna wtórnego ustawiasz okno Główne (0) a nie pulpit." w kodzie poprzedzającym utworzenie dodatkowego okna w FormDodaj [1] ?


To niestety też nie działa.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 8 gości

cron