Witam.
Chce zrobić coś takiego: Mam aplikację która nie ma belki na pasku zadań, okno pokazywane jest po kliknięciu na ikonę w trayu. Jakakolwiek utrata focusu tego okna (kliknięcie w pulpit, w okno innej aplikacji - w cokolwiek) powinna chować tą formę. Niby działa ale nie do końca. Mam Trubo Delphi, myślałem że to wina komponentu TrayIcon ale przy "ręcznym" tworzeniu ikony w trayu jest ten sam problem który wygląda następująco:
- Klikam w ikone w trayu, pojawia się forma
- Klikam w pulpit. Forma nie znika.
- Klikam w coś na formie, potem znowu w pulpit i forma znika
Inna kombinacja:
- Klikam w ikone w trayu, pojawia się forma
- Klikam w X na formie zamykając ją.
- Klikam w ikone w trayu, forma się pojawia
- Klikam w pulpit, forma znika.
- Klikam w ikone, forma sie pojawia.
- Klikam w pulpit, forma nie znika
Kod:
//zamykanie formy
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Self.Hide;
end;
//pokazanie formy - przy kliknięciu na ikonę w trayu
procedure TMainForm.TrayIcon1Click(Sender: TObject);
begin
Self.Show;
end;
//chowanie formy przy gubieniu focusu
procedure TMainForm.ApplicationEvents1Deactivate(Sender: TObject);
begin
Self.Close;
end;
Domyślam się że coś nie tak jest z komponentem TApplicationEvents bo jak debuguje to nie wchodzi w ogóle do metody OnDeactivate w tych wymienionych przypadkach. Już próbowałem w OnShow formy dawać SetFocus na jakimś komponencie ale to nie pomaga. Ktoś ma jakiś pomysł? Może jakoś samemu przechwytywać komunikaty które przychodzą do aplikacji i je obsługiwać?