Hi
ich habe ein App, die
StayOnTop verwendet.
Die
Form besteht aus einem Panel das oben am Screen ist und nicht die ganze Desktophöhe einnimmt.
Jedoch die ganze Breite schon.
Je nach Einstellung im Programm habe ich z.B. links unter dem Panel ein weiteres kleineres Panel das nicht die ganze Desktopbreite einnimmt.
Somit sieht es dann aus wenn beide sichtbar sind wie ein auf dem Bauch liegendes "L".
Da ja keine sechseckige
Form möglich ist habe ich mir mit dieser
Form die Transparent gemacht:
http://www.delphipraxis.net/internal...?p=32213#32213
Es wird also die ganze
Form per RGN_DIFF durchsichtig gemacht.
Dann füge ich mit RGN_OR die beiden Panels wieder ein und ein L-Form entsteht.
Soweit so gut!
Doch per Tastendruck will ich die
Form verstecken/wiederanzeigen.
Hört sich leicht an - ist es aber nicht.
Lösung 1:
Visible := False geht noch, doch sobald ich wieder Visible := True mache
Werden meine 2 Panels normal angezeigt. Doch der Rest der "L"
Form wird nicht transparent!?
Es schaut so aus als würde die
Form gezeichnet werden und dann erst Transparent gemacht werden.
Denn wenn ich ein anderes Fenster nehme und über das graue "darüber wische" wird der Hintergrund dahinter wieder angezeigt.
Fokus wird gesetzt und nach dem Wiedereinblenden kann ich die
Form per Keyboard steuern.
Lösung 2:
Ich lasse das mit Visible True/False komplett weg und mache die
Form unsichtbar durch RGN_DIFF ohne die Panels hinzuzufügen.
Somit ist sie ganz versteckt.
Wenn ich sie wieder anzeigen will mache ich wieder die ganze
Form Transparent und füge dann wieder die 2 Panel hinzu.
Nun bleibt die "L"-Form und der Hintergrund ist so sichtbar wie es sein soll.
Aber da ist dann das Problem, dass ich auf meine
Form den Focus nicht setzen kann.
Wenn ein anderes Programm aktiv ist bleibt der Fokus darauf und ich kann meine
Form nicht mehr mit den Keyboard steuern.
Ich hole beim Anzeigen die
Form auch noch hiermit in den Vordergrund:
Delphi-Quellcode:
SetWindowPos(MainFormHandle, HWND_TOPMOST, Left,Top, Width,
Height, SWP_SHOWWINDOW);
Auch ein Versuch mit SetFocus(MainFormHandle), Main.Activate oder Button1.SetFocus hilft nichts. Der Fokus bleibt bei dem anderem Programm.
Wenn ich mit der Mouse draufdrücke bekommt meine Main
Form den Focus und Keyboard geht wieder.
Main.Active sagt mir immer True, auch wenn ein anderes Programm Aktive ist!?
Auch ein Windows.GetFocus; sagt mir das mein
Handle noch den Fokus hat obwohl ein anderes Programm aktiv ist!
Ich hoffe mein Problem ist halbwegs verständlich!