Gast
#6407315
Hi, ich habe ein Problem mit dem Ereignis TForm.OnWindowStateChange. Dieses wird bei mir mehrfach ausgelöst - der Grund erschließt sich mir auf den 1. Blick nicht. (Bug in LCL mag ich nicht ausschließen, aber ich bin doch nicht der erste, der das merken müßte...) Was ich will: Wenn das Fenster (bei mir einziges Fenster des Programms, keine Children) minimiert wird, dann soll es ausgeblendet werden und ein TrayIcon erscheinen. Wenn ich auf das TrayIcon klicke, dann soll das Fenster wieder erscheinen. Was ich tue:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
OnRestore wird vom TrayIcon ausgelöst
Was passiert:
Selten funktioniert es. Ganz oft blitzt das Fenster kurz auf und
verschwindet gleich wieder und das TrayIcon erscheint sofort wieder -
als ob es nach dem Restore gleich wieder minimiert würde.
Was genau passiert:
Habe mir mal eine Debug-Ausgabe gebastelt, um das Verhalten
nachvollziehen zu können. Der Tray-Handler wird aufgerufen, erfolgreich
beendet. Dann kommen die WindowState-Ereignisse: auf, zu :(
Vom Timing her sieht das so aus (vorne der GetTickCount()):
Restore enter
Restore leave
3478183 ws: wsNormal prev: wsMinimized
3478184 ws: wsMinimized prev: wsNormal
3478191 ws: wsNormal prev: wsMinimized
WTF??? Das Timing hängt ein bißchen vom Rechner ab. Auf dem alten Laptop
sind es durchaus mal 10ms zwischen 1. und 3. Ereignis.
Habe spasseshalber eine Abfrage in OnWindowStateChange gemacht, daß er
erst wieder 100ms nach Restore auf Minimize reagiert. Das funktioniert,
aber schön ist anders.
Kennt jemand das Phänomen? Kann mir jemand auf die Sprünge helfen, was
ich falsch mache? So kompliziert kann das doch nicht sein?
VG Frickler
Lazarus Version 1.6
FPC Version 3.0.0
aktuell nur auf PC mit Linux Mint, raspberry mit OSMC bzw Debian kommt
noch