[Delphi] IsIconic nie zawsze działa

0

Robie plugina który ma wywoływać miganie przycisku (belki) głownej aplikacji na pasku zadań ale tylko wtedy gdy jest ona zminimalizowana. Problem w tym że nie zawsze windows wykrywa czy jest zminimalizowana. Np. jak zminimalizuje okno przyciskiem na górnym pasku to okno nie miga, jak zminimalizuje przez klikniecie na pasku zadań to działa. Tak jest różnie, czasami działą bez zarzutu przez dłuższy czas a czasami wcale. Nie moge wykumać dlaczego tak sie dzieje, to jest kod:

var
H2: THandle;

if (TimerBlink.Enabled=False) and (IsIconic(H2)) then 
begin
TimerBlink.Enabled:=True;
TimerBlinkTimer(self);
end;

Kod Timera:

procedure TfrmMain.TimerBlinkTimer(Sender: TObject);
var
Miganie : Boolean;
begin
H2:=FindWindow('TfrmSend', nil);
if (IsIconic(H2)=False) then
      begin
      TimerBlink.Enabled:=False;
      FlashWindow(H2, False);
      end else
            begin
            Miganie := not Miganie;
            FlashWindow(H2, Miganie);
            end;
end;

Z tego co wiem główna aplikacja potrafi importować style msstyle windowsa i uzywać ich nie zależnie, może to w niej coś jest roztegowane ?

0

A powiedz w jakim zdarzeniu wywołujesz ten kod?

0

Jak przychodzi nowa wiadomość do komunikatora :)

0
Dibo84 napisał(a)

Jak przychodzi nowa wiadomość do komunikatora :)

:]

Nie o to mi chodzi... chciałem zapytać czy próbowałeś zastosować to jako procedurę w zdarzeniu on resize aplikacji

0

To jest dobry pomysł... Tylko że ja robie plugina w DLL i nie wiem jak sie wdostać do zdarzenia OnResize tejże aplikacji, o ile to w ogóle możliwe. Hm... resize to chyba zmiana rozmiaru, czy minimalizacja jest także zmianą rozmiaru?

0
Dibo84 napisał(a)

To jest dobry pomysł... Tylko że ja robie plugina w DLL i nie wiem jak sie wdostać do zdarzenia OnResize tejże aplikacji, o ile to w ogóle możliwe. Hm... resize to chyba zmiana rozmiaru, czy minimalizacja jest także zmianą rozmiaru?

Jest. a co do przekazywania z dll ...
To kiedyś napisałem kilka postów na ten temat - poszukaj (i zaopatrz się w FastShareMem)

0

Tzn to jest tak, mam classname okna rozmowy tegoż komunikatora. I teraz chodzi tylko o to żeby wyłapać czy to okno jest zminimalizowane czy nie. IsIconic nie zawsze działa. Czytałem o FastShareMem. Nie o to mi chodzi, ale dzieki bo kiedyś potrzebowałem sposobu aby wyslac cos do DLL a to na pewno sie przyda. Właściwie w moim przypadku nie jest potrzebny żaden import/export. Znam classname i uchwyt tego okna i potrzebuje alternatywe dla IsIconic aby wykryc czy to okno jest zminimalizowane czy też nie (ewentualnie czy jest aktywne, ale próbowałem przez IsWindow czy też InWindowVisible czy jakoś tak i w ogóle nie chcialo działać :\ )

0

Jeżeli dobrze cię zrozumiałem to nie ty jesteś autorem tego komunikatora....
To rzeczywiście jest to trochę ciężka sytuacja... ale nie beznadziejna - myślę że odpowiedzi musisz szukać w WINAPI aby sprawdzać stan okna na podstawie jego handle....
Coś mi nawet podpowiada że coś takiego kiedyś widziałem... Poszukam tego jutro i postaram się tutaj dopisać

0

Sorki, tak to nie ja jestem twórcom :)
Co do WinAPI, nie znam sie zabardzo (ale sie doczytam) ale czy IsIconic nie jest przypadkiem WinAPI ?

0

Wiesz co nie mogłem tego znaleźć ale spróbuj najpierw sprawdzać warunek

IF Not ((IsZoomed(h2) or (IsWindow(h2)) OR (IsIconic(h2)  Then  //mogłem się pomylić w nawiasach

  

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