Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form in den Vordergrund holen (https://www.delphipraxis.net/145686-form-den-vordergrund-holen.html)

Ghostleader 6. Jan 2010 11:07


Form in den Vordergrund holen
 
Hier wurde die Frage gestellt
Ich habe dafür einen neuen Thread aufgemacht, da sie eigentlich nicht mehr in den alten gehörte.
Meine Frage ist: Wie kann man die Form in den Vordergrund holen (ohne Form1.Show; zu verwenden...)?

Mit Form1.BringToFront; wird sie vielleicht in den Vordergrund geholt aber noch nicht für mich ausreichen, da sie nicht vor Firefox etc. geschoben wird...

Mfg Ghost

patti 6. Jan 2010 11:10

Re: Form in den Vordergrund holen
 
Hi,

evtl. hilft dir SetForeGroundWindow weiter.

mfg

Ghostleader 6. Jan 2010 11:18

Re: Form in den Vordergrund holen
 
Also da ich nicht wusste was du damit meinst habe ich danach gesucht und hab etwas ähnliches gefunden:
Delphi-Quellcode:
 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Das klappt auch soweit nur einige meiner Keybefehle dafür nicht mehr...
zB.:
Delphi-Quellcode:
if Key = vk_f4 and ssAlt in Shift then
begin
Key:= 0;
Form1.Show;
end;
Hat da jemand ne Ahnung?

Larsi 6. Jan 2010 11:19

Re: Form in den Vordergrund holen
 
Möchtest du dass die Form dauerhaft im Vordergrund bleibt oder nur bei einem bestimmten Ereigniss? Das immer im Vordergrund geht so. Beim OnCreate oder so aufrufen:
Delphi-Quellcode:
Application.NormalizeAllTopMosts;
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Edit: Zu spät!

Ghostleader 6. Jan 2010 11:20

Re: Form in den Vordergrund holen
 
Naja solange das dauerhafte "im Vordergrund sein" nicht meine anderen Befehle blockiert, ist mir das schon Recht ;).
Aber man könnte ja auch, wenn die Form nicht dauerhaft im Vordergrund ist, den Befehl in einen Timer setzen, oder?

Edit:
Vielleicht muss ich grundsätzlich erst nochmal hinzufügen:
Ich arbeite mit 2 Formen. Die eine besitzt nur eine TImage Komponente und den Befehl (beim KeyDown-Ereignis)
Delphi-Quellcode:
if Key = vk_f4 and ssAlt in Shift then
begin
Key:= 0;
end;
Die andere Form soll immer aktiviert sein denn sie besitzt die Befehle:
Delphi-Quellcode:
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Key = vk_f4) and (ssAlt in shift) then
begin
Key := 0;
end;
if (Key = vk_f5) and (ssAlt in shift) then
begin
Form1.Hide;
end;
if (Key = vk_f3) and (ssAlt in shift) then
begin
Key := 0;
Form1.Show;
end;
end;
Also Form 1 ist eigentlich nur ein Bild, Form 2 soll dieses auf Tastendruck hervorheben oder verschwinden lassen.
Nur wenn ich das Projekt starte klappt das alles nicht mehr wenn ich ein anderes Programm maximiere o.ä.
Deshalb such ich einen Befehl um Form2 so in den Vordergrund zu bringen (per Timer o.ä.) das die Befehle auch noch funktionieren wenn ich
ein anderes Programm starte...

Ghostleader 7. Jan 2010 14:05

Re: Form in den Vordergrund holen
 
Hat niemand eine Idee wie ich das machen kann?

Ghostleader 8. Jan 2010 19:51

Re: Form in den Vordergrund holen
 
Ich denke das Thema kann geschlossen werden wenn keiner antwortet oder keiner eine Antwort weiß...;)
Mfg Ghost

toms 8. Jan 2010 19:55

Re: Form in den Vordergrund holen
 
Zitat:

Zitat von Ghostleader
.
Deshalb such ich einen Befehl um Form2 so in den Vordergrund zu bringen (per Timer o.ä.) das die Befehle auch noch funktionieren wenn ich
ein anderes Programm starte...

Du könntest ja einen globalen Hotkey registrieren

Ghostleader 8. Jan 2010 21:15

Re: Form in den Vordergrund holen
 
Wie meinst du das? Bei KeyDown hab ich schon Hotkeys definiert. Meinst du das - oder etwas anderes?

toms 9. Jan 2010 08:07

Re: Form in den Vordergrund holen
 
Du möchtest doch, dass F3 etc auch dann reagieren, wenn deine Form nicht den Fokus hat?
Dann such mal nach Bei Google suchenglobaler Hotkey Delphi

Delphi-Laie 9. Jan 2010 11:16

Re: Form in den Vordergrund holen
 
Damit beschäftigte ich mich jüngst auch ausführlich.

Fenster in den Vordergrund setzen:

1. Eine notwendige, jedoch nicht ausreichende Bedingung ist, den Formstyle des Formulares auf Stayontop zu setzen. Nur nützt das nichts gegenüber anderen Fenstern/Formularen, die dieses Attribut ebenfalls so gesetzt haben, z.B. beim Taskmanager, der verdeckt das trotzdem frech. Deshalb:

2. Bei jedem sich bietenden Ereignis (Verdecken gehört leider nicht dazu, aber Neuzeichnen, wenn man ein über-/verdeckendes Formular wieder ein wenig wegzieht) oder über einen Timer einen der drei Befehle verwenden:

- BringToFront
- BringWindowToTop(Handle)
- SetForeGroundWindow(Handle)

Viel Erfolg!

patti 9. Jan 2010 14:10

Re: Form in den Vordergrund holen
 
Zitat:

Zitat von Delphi-Laie
Nur nützt das nichts gegenüber anderen Fenstern/Formularen, die dieses Attribut ebenfalls so gesetzt haben, z.B. beim Taskmanager, der verdeckt das trotzdem frech.

Das ist aber ja irgendwo auch logisch, denn es kann eben immer nur EIN oberstes Fenster geben. Bei einem Stapel Blätter kann ja auch nur immer eines wirklich oben liegen...

Beim Taskmanager ist es aber trotzdem so, dass ich ein anderes Fenster, welches auch StayOnTop ist, nach vorne holen kann, nämlich indem ich ihm ganz einfach den Fokus gebe.

mfg

Delphi-Laie 9. Jan 2010 14:33

Re: Form in den Vordergrund holen
 
Zitat:

Zitat von patti
Zitat:

Zitat von Delphi-Laie
Nur nützt das nichts gegenüber anderen Fenstern/Formularen, die dieses Attribut ebenfalls so gesetzt haben, z.B. beim Taskmanager, der verdeckt das trotzdem frech.

Das ist aber ja irgendwo auch logisch, denn es kann eben immer nur EIN oberstes Fenster geben. Bei einem Stapel Blätter kann ja auch nur immer eines wirklich oben liegen...

Natürlich ist das logisch, jedenfalls mit Sicherheit logischer, als daß es immer nur ein aktives Fenster gibt (man könnte nämlich durchaus auch die Benutzereingaben auf mehr als ein Fenster beziehen).

Zitat:

Zitat von patti
Beim Taskmanager ist es aber trotzdem so, dass ich ein anderes Fenster, welches auch StayOnTop ist, nach vorne holen kann, nämlich indem ich ihm ganz einfach den Fokus gebe.

Danke, das wußte ich noch nicht. Es setzt allerdings mal wieder Benutzereingaben an diesem Fenster voraus. Wie man ein Fenster, das ohne Nutzereingaben auskommt, auch dann in den Vordergrund holt, wenn es von einem anderen (stayontop-)Fenster mehr oder weniger verdeckt wird, schilderte ich weiter oben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 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