Turbo delphi i TrayIcon.Click

0

Witam
Mam TrayIcon na formatce w Turbo Delphi. W TrayIcon w onClick mam oprogramowane takie zdarzenie:

if Form.Visible then
  Form.Hide
else
  Form.Show;

Czyli coś takiego jak w gg. Po kliknięciu na ikonę forma się pokazuje, a jak jest widoczna to się chowa.

Problem w tym, że jeśli po kliknięciu forma się pokaże to jest nieaktywna - czyli pasek jest szary a nie granatowy. Jak zrobić żeby forma była aktywna? Form.SetFocus, Form.Activate nie działa.

Proszę o pomoc.

0

bo nie Form.Show tylko
CoolTrayIcon1.Showmainform;

0

Niestety to nie działa. To nie jest CoolTrayIcon, tylko TrayIcon i nawet nie ma takiej metody :(

0

Dziwne, ale sprawdzałem to u siebie i działa...

Dokładnie mam taki kod:

procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
if Form1.Visible then
  Form1.Hide
else
  Form1.Show;
end;

Pozdrawiam
RYGAR

0

no niestety... okienko pokazuje się, ale jest ciągle nieaktywne

0

Powinno dzialac... Show formy wyglada tak:

procedure TCustomForm.Show;
begin
  Visible := True;
  BringToFront;
end;

i tam jest:

procedure TControl.BringToFront;
begin
  SetZOrder(True);
end;

Wiec moze jakas inna kontrolka zabiera aktywnosc?

0

Próbowałem FormMain.BringToFront, FormMain.SetZOrder(True)... i nic. Rzeczywiście wygląda to tak jakby TrayIcon i FormMain to dwa różne "okna". Po kliknięciu w TrayIcon focus jest na nią przenoszony. Nie ważne że w onClick daję FormMain.Show. Wygląda to tak jakby po kliknięciu w TrayIcon i tak focus tam pozostawał.

0

Znalazłem rozwiązanie :-)

Żeby forma była aktywna po FormMain.Show, trzeba dodać linijkę SetForegroundWindow(Application.MainForm.Handle);

0

Sorry że nie na temat, ale zamiast:

if Form1.Visible then
  Form1.Hide
else
  Form1.Show;

można napisać:

Form1.Visible:=not Form1.Visible;

taki kod jest wykonywany minimalnie szybciej, jest ort! i bardziej czytelny

0

A co to jest "krutszy", to jakiś specjalny kod? :P Ech, aż oczy bolą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1