migający przycisk okna na pasku zadań - po kliknięciu przycisk nadal pomarańczowy

0

aby zwrócić uwagę użytkownika na jedno z okien programu, zaczynam nim migać:

if (GetForeGroundWindow() <> lstRozmowy[i].Handle) or (lstRozmowy[i].WindowState = wsMinimized) then
    begin
      FWinfo.cbSize := SizeOf(FWinfo);
      FWinfo.hwnd := lstRozmowy[i].Handle;
      FWinfo.dwflags := FLASHW_ALL;
      FWinfo.ucount := 3;
      FWinfo.dwtimeout := 0;
      FlashWindowEx(FWinfo);
    end;

lstRozmowy to dynamiczna tablica przechowująca stworzone okna.

problem jest w tym, że gdy okno i przycisk na pasku zadań przestają migać, przycisk jest nadal pomarańczowy. niby nic w tym dziwnego, bo po kliknięciu na przycisk powinno być wszystko ok, ale po owym kliknięciu przycisk nadal jest pomarańczowy... po prostu tak, jakby nie odebrał tego kliknięcia (okno jest aktywowane).
da się coś z tym zrobić?

0

a probowales parzysta liczbe razy nim "mrugnac"? bo cos mi sie wydaje ze to pomagalo.

0

próbowałem, ale też nic. pierwsze mrugnięcie to chyba tylko zmiana koloru na pomarańczowy a każde następne to kolejno: zmiana na kolor paska zadań i zmiana na kolor pomarańczowy.
mi się wydaje, że to problem aktywacji okna... ale nie wiem jak to rozwiązać...

0

Wtrace sie, chociaz pewnie wiele nie pomoge. Widze ze piszesz jakis komunikator, tak sie sklada ze ja tez ;p. Nie wiem czy chodzi Ci o ikonke w tray'u ale ja uzywam cooltrayicon ktorym zmieniam ikony(ikona przezroczysta ->koperta i na odwrot). Jezeli chodzi o ikone na pasku zadan to nie jestem pewny ale moze pomoze(juz po mryganiu oknem) wstawienie showwindow(uchwytokna, SW_RESTORE); Ja jeszcze zoltodziub jestem ale moze akurat pomoze :). Przy okazji sie zapytam, jak wymusic minimalizowanie nowo utworzonych okien do paska zadan? Niestety u mnie minimalizuja sie nad paskiem zadan ;(. Pozdro

0

jakoś sobie poradziłem, ale w inny sposób. nie pamiętam, co dokładnie zrobiłem, ale używałem jakichś funkcji, które były nie na miejscu. nie pamiętam jakich, bo znalazłem je gdzieś w necie.

@arasso12:
co do twojego pytania o minimalizację okien: na początku musisz dodać do GWL_EXSTYLE okna WS_EX_APPWINDOW i wyłączyć WS_EX_TOOLWINDOW. do sekcji VAR procedury OnCreate okna dodajesz

es: integer;

a do samej procedury:

  es := GetWindowLong(Handle, GWL_EXSTYLE);
  SetWindowLong(Handle, GWL_EXSTYLE, es or WS_EX_APPWINDOW and not WS_EX_TOOLWINDOW);

najlepiej na samym początku. to jest pierwszy krok. dalej: ja nie ustawiałem wsMinimized w WindowState okna, ale dodałem to w procedurze tworzącej nowe okno. tak na wszelki wypadek, chociaż to może i tak różnicy nie daje :D

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