Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit Form Activate, Focus (https://www.delphipraxis.net/139215-problem-mit-form-activate-focus.html)

schwa226 25. Aug 2009 18:22


Problem mit Form Activate, Focus
 
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!

Guido Eisenbeis 25. Aug 2009 20:37

Re: Problem mit Form Activate, Focus
 
Schau dir vielleicht mal das hier an:

Ein beliebiges Fenster transparent schalten.

Guido.

Zacherl 25. Aug 2009 21:12

Re: Problem mit Form Activate, Focus
 
Ansonsten den SetTransparent Code mal im OnPain Ereigniss des Formulars aufrufen.

jaenicke 25. Aug 2009 22:03

Re: Problem mit Form Activate, Focus
 
Hast du es denn einmal mit der normalen Methode statt Visible versucht? Also mit Hide/Show?
Denn Visible funktioniert schon bei normalen Fenstern manchmal nicht, z.B. unter Windows 98 gab es da Probleme.

schwa226 26. Aug 2009 07:07

Re: Problem mit Form Activate, Focus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Erstmal vielen Dank für die Tipps!

Beim testen habe ich herausgefunden, dass es an der AlphaControls Komponente liegt.

Ohne passt es, mit passt es nicht.

Ich habe hier einmal ein Sample hochgeladen.
Beide Versionen sind kompiliert wenn einer die AlphaControls Komponente nicht hat!

Die Lösung mit Hide/Show habe ich versucht. Keine Änderung!

@Guido Eisenbeis
Das ist leider nicht das was ich suche. Das mit den Rectangle passt super da ich damit sozusagen 6-Eckige Formen erzeugen kann.
In der Area wo die Form voll Transparent ist kann ich mit der Mouse auf das darunter liegende Fenster klicken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz