Zrobiłem tak:
1. Umieściłem na Form1 TrayIcon1 oraz ImageList1 (do niego wczytałem ikonę) i dałem właściwość TrayIcon1 icons na ImageList1, a właściwość IconIndex na 0 czyli na tę ikonę którą wczytałem do ImageList1
2. Na Form1 umieściłem Button1, którego zdarzenie onclick wygląda tak:
- Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TrayIcon1->Visible = true;
TrayIcon1->Minimize();
}
3. Właściwość TrayIcon1 RestoreOn dałem "imDoubleClick". A zdarzenie OnRestore takie:
- Kod: Zaznacz cały
void __fastcall TForm1::TrayIcon1Restore(TObject *Sender)
{
TrayIcon1->Visible = false;
}
4. Gdy teraz wcisnę Run program się kompiluje i włącza. Wciskam Button1 i program znika z paska zadań, znika z ekranu i pojawia się w zasobniku (koło godziny) klikam dwukrotnie na ikonkę programu i program powraca. A więc wszystko działa tak jak powinno. Wszystko jest OK.
Teraz zajmuję się tym żeby program minimalizował się przy włączeniu jeśli taka jest wola użytkownika.
5. Na Form1 umieszczam CheckBox1 oraz Button2. Jeśli użytkownik chce aby program minimalizował się do tray po włączeniu zaznacza pole CheckBox1, jeśli nie to pozostawia je puste.
6. Gdy już zaznaczy (lub nie) klika przycisk Button2 aby zapisać swój wybór do pliku config.ini. Oto zdarzenie OnClick dla Button2:
- Kod: Zaznacz cały
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TIniFile *PlikIni = new TIniFile("config.ini");
PlikIni->WriteBool("USTAWIENIA", "trayonstart", CheckBox1->Checked);
delete PlikIni;
}
7. Teraz dodałem takie coś co przy włączeniu programu zaznacza bądź nie wybór użytkownika zapisany w pliku config.ini:
- Kod: Zaznacz cały
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TIniFile *PlikIni = new TIniFile("config.ini");
CheckBox1->Checked = PlikIni->ReadBool("USTAWIENIA", "trayonstart", false);
delete PlikIni;
}
8. A teraz zdarzeniu OnShow dla Form1 dałem takie coś że jeśli jest zaznaczone pole CheckBox1 to program powinien się zminimalizować do tray'a:
- Kod: Zaznacz cały
void __fastcall TForm1::FormShow(TObject *Sender)
{
if(CheckBox1->Checked == true){
TrayIcon1->Visible = true;
TrayIcon1->Minimize();
}
}
I tu właśnie rodzi się moje pytanie. Otóż gdy minimalizuję program do tray'a (tzn. znika on z ekranu oraz paska zadań, a pojawia się w zasobniku) poprzez wciśnięcie Button1 wszystko działa poprawnie.
Natomiast gdy chcę zrobić dokładnie to samo, wykonać ten sam kod w zdarzeniu OnShow program owszem znika z paska zadań owszem pojawia się w zasobniku ale cały czas pozostaje widoczny.
Dodam że dodanie ani Form1-Hide() ani Form1->Visible = false; nie działa - zwracany jest jakiś błąd.