Ukrywanie (Hide) i przywracanie okna.

dział ogólny

Ukrywanie (Hide) i przywracanie okna.

Nowy postprzez Cyfrowy Baron » niedziela, 20 czerwca 2010, 19:35

Zastanawiam się nad takim patentem. Ukrywam okno programu funkcją Hide(), okno znika, ale widoczny jest przycisk programu na pasku zadań, klikam na pasek zadań (przycisk programu) i okno się pokazuje. Coś w stylu minimalizacji i przywracania programu, ale z ukrywaniem okna zamiast minimalizacji.

Zastanawiam się czy można to zrealizować inaczej niż poprzez przechwytywanie komunikatu, gdyż wymagałoby to zamontowanie haka systemowego.
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: Ukrywanie (Hide) i przywracanie okna.

Nowy postprzez mckri » Å›roda, 23 czerwca 2010, 21:53

Problem był już poruszany na tym forum
http://www.programowanie.cal.pl/forum/viewtopic.php?f=2&t=810&p=5029&hilit=ShowMainForm#p5029

Wystarczy zastosować, np. w zdarzeniu CreateForm
Kod: Zaznacz cały
Application->ShowMainForm=false;
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: Ukrywanie (Hide) i przywracanie okna.

Nowy postprzez Cyfrowy Baron » czwartek, 24 czerwca 2010, 07:08

Nie o to chodzi. Przeczytaj uważnie! Nie chcę usuwać przycisku programu z paska zadań, chcę by tam pozostał. Chcę ukryć okno programu funkcją Hide() zamiast minimalizować, a potem chcę je przywrócić klikając na przycisk (belkę) programu na pasku zadań. Czyli chcę stworzyć taki mechanizm jaki ma miejsce z minimalizacja i przywracaniem okna programu, ale zamiast minimalizacji chcę użyć Hide(). Taki mechanizm da się stworzyć gdy ukryjemy okno a przycisk z paska zadań zamienimy na ikonkę w zasobniku systemowym. Klikając na tą ikonkę można ponownie przywrócić okno.
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: Ukrywanie (Hide) i przywracanie okna.

Nowy postprzez mckri » sobota, 26 czerwca 2010, 10:27

Właściwie to nie wiem dlaczego się tak uparłes na to aby nie uzywać minimalizacji.
Problem wydaje sie trywialny. Chyba że nadal nie rozumiem o co chodzi.
W tym przykładzie zastosowałem komponent ApplicationEvent.

Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Hide();  //ukrywam okno programu
   //Application->Minimize();  //z tym dziaÅ‚a lepiej
   ShowWindow(Application->Handle, SW_SHOW); //tutaj pokazuje belke programu w pasku start windows.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Restore(TObject *Sender)
{
  Show();  //pokazuje okno programu
}
//---------------------------------------------------------------------------


Zakładam, że przy korzystaniu z wersji Builder > 6 masz ustawione w głównym unicie programu (np Project1.cpp)
Kod: Zaznacz cały
Application->MainFormOnTaskBar = false;
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: Ukrywanie (Hide) i przywracanie okna.

Nowy postprzez Cyfrowy Baron » sobota, 26 czerwca 2010, 10:54

Teraz zrozumiałeś. Twoja metoda ma jedną wadę. Po ukryciu okno nie jest zminimalizowane, więc po kliknięciu na przycisk paska zadań pokazuje się co prawda, ale jest również minimalizowane. Można to tak naprawić:

Kod: Zaznacz cały
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
Hide();
 
ShowWindow(Application->HandleSW_SHOW);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Restore(TObject *Sender)
{
 
Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Minimize(TObject *Sender)
{
 
Application->Restore();
 
Show();


Niestety powoduje to chwilowe migania okna, minimalizacja - przywracanie. By to zmienić, trzeba by wyłączyć w programie możliwość minimalizacji.

Rozważam to z ciekawości, do niczgo nie jest mi to aktualnie potrzebne.
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


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