![]() |
Programm soll zwischen Vordergrund und Hintergrund switchen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-Gemeinde;
Problem : Als Reaktion auf einen Hotkey soll das Programm zwischen Vordergrund und Hintergrund switchen. Auch das funktioniert, aber wenn man manuell ein anderes Fenster über das Programm legt, funktioniert das nicht mehr so, wie gewünscht. Das Programm reagiert auf den Hotkey, verschwindet aber im Hintergrund. In meiner Funktion 'Switch' muß ausgewertet werden, ob das Fenster _wirklich_ sichtbar ist und da steckt der Fehler und ich hoffe auf Eure Hilfe.
Delphi-Quellcode:
Sourcecode im Anhang.
Function TForm1.Switch:Boolean;
var VISIBLE : Boolean; begin VISIBLE := IsWindowVisible(Handle); // klappt nicht ganz // VISIBLE liefert auch dann TRUE, // wenn ein anderes Fenster über das Programm-Fenster gelegt wird if VISIBLE then begin SetWindowPos(Application.Handle, HWND_BOTTOM, Left,Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); ShowWindow(Handle,SW_HIDE); result := TRUE; end else begin if IsIconic(Handle) then ShowWindow(Handle,SW_Restore) else ShowWindow(Handle,SW_SHOW); Application.BringToFront; result := FALSE; end; end; procedure TForm1.WMHotKey(var Msg: TWMHotKey); var i:Integer; begin // wenn F1 bis F12 als Hotkey definiert sind, werden sie hier abgefragt for i := 0 to 11 do if Msg.HotKey = FunktionsTaste[i].ID then FunktionsTaste[i].Flip := Switch; end; procedure TForm1.Button1Click(Sender: TObject); begin RegisterFTastenHotKeys(Handle); end; procedure TForm1.Button2Click(Sender: TObject); begin UnRegisterFTastenHotKeys(Handle); end; Ich hoffe auf Eure Hilfe. MfG kamel08 |
Re: Programm soll zwischen Vordergrund und Hintergrund switc
![]() ![]() Was du suchst, wäre z.B. ![]()
Delphi-Quellcode:
if GetForegroundWindow = {Form1.}Handle then ...
PS: der Wert für Result entspricht doch VISIBLE, also kann man da auch noch was einsparen und SWP_NOSIZE sagt, daß die Positionsangabe eh nicht ausgewertet wird. Eventuell braucht man nichtmal soviel WinAPI in seine VCL-Anwendung reinquetschen :angel2: .
Delphi-Quellcode:
oder wie wäre es hiermit?
Function TForm1.Switch: Boolean;
begin Result := GetForeGroundWindow = Handle; if Result then begin SetWindowPos(Application.Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); Hide; end else begin if IsIconic(Application.Handle) then Application.Restore else Show; Application.BringToFront; end; end;
Delphi-Quellcode:
Function TForm1.Switch: Boolean;
begin Result := GetForeGroundWindow = Handle; if Result then Application.Minimize else begin if IsIconic(Application.Handle) then Application.Restore else Show; Application.BringToFront; end; end; |
Re: Programm soll zwischen Vordergrund und Hintergrund switc
Versuch es mal mit
Delphi-Quellcode:
[edit] :shock: Wo kommt denn der Post plötzlich her? [/edit]
VISIBLE := GetForeGroundWindow = Handle;
|
Re: Programm soll zwischen Vordergrund und Hintergrund switc
VISIBLE := GetForegroundWindow = Handle;
Funktioniert. Vielen Dank. |
Re: Programm soll zwischen Vordergrund und Hintergrund switc
Ich habe seltsame Probleme, die sich nicht mit herkömmlichen Befehlen lösen lassen - wo der Fehler liegt, weiss ich nicht...
(WIN XP, SP3, DELPHI 32 in BDS 2007) Aber so funktioniert es: Statt Switch:
Delphi-Quellcode:
.
. . Application.Restore; Self.WindowState := wsNormal; SetForegroundWindow(Self.Handle); SetFocus; . . |
Re: Programm soll zwischen Vordergrund und Hintergrund switc
Zitat:
probiere mal den oben nachgetragenen Code. :mrgreen: |
Re: Programm soll zwischen Vordergrund und Hintergrund switc
Zitat:
Der Code von hathor ist sehr interessant, danke. Vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz