Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi falsches Fenster im Vordergrund (https://www.delphipraxis.net/202496-falsches-fenster-im-vordergrund.html)

Delbor 13. Nov 2019 09:44

AW: falsches Fenster im Vordergrund
 
Hi rokli

Eine Alternative (oder besser zwei) wäre: Height und widht von Form1 (oder visible/enabled) zB. im Onshow von Form2 auf null bzw. false stellen.

Gruss
Delbor

Rolf Frei 13. Nov 2019 12:59

AW: falsches Fenster im Vordergrund
 
Sorry aber soawas ist ein Murks. Er macht das schon richtig so wie er es macht. Das Problem ist ein Windows Fehlverhalten, das seit Vista oder sogar XP besteht. Das Ganze ist auch nicht so einfach zu reproduzieren. Wenn eine Anwendung länger beschäftigt ist und nicht auf Windwos reagiert, macht Windows irgend wie was am Modalverhalten und das kann dann zu diesem Effekt führen. In der Regel hilft es dann, eine andere Anwendung über die Taskbar zu aktivieren und dann wieder auf die eigene zurück zu wechseln. Dadurch erscheint im Normalfall wieder der richtige Modale Dialog zu oberst.

Ich bin mir nicht sicher, ob das ein Fehlverhalten von Delphi Programmen ist oder ob das eine altes Windows Fehlverhalten ist. Am eingenen Programmcode liegt es aber zu 100% nicht.

Moombas 13. Nov 2019 13:21

AW: falsches Fenster im Vordergrund
 
Da würde ich eher die Mainform ausblenden (Visible := False) und nur einblenden, wenn sie wirklich benötigt wird.

Zitat:

Zitat von rokli (Beitrag 1451129)
Irgend wann wechseln dann die Fenster und die MainForm ist auf dem Bildschirm das "obere" Fenster, und das modale Fenster liegt dadrunter. Die MainForm kann und will ich dann natürlich nicht bedienen, da ich ja Form2 Modal geöffnet habe. Ein Klick auf die Form2 und es ist wieder so, wie es sein soll.

Das hört sich für mich an, als ob den Mainform zwischendurch den Fokus erhält und dadurch in den Vordergrund kommt.
Darauf basierend ein paar Überlegungen:
- Ggf. Mainform.Enabled := False; setzen, solange im Form2 gearbeitet werden soll. Dann wären keine Eingaben im Mainform möglich, wie das dabei mit dem Fokus ist kann ich aktuell nicht testen, denke aber der Fokus kann dann auch nicht aufs Mainform gesetzt werden.
- Ansonsten für die Zeit, wo Form2 da ist Mainform.Canfocus := False; setzen könnte helfen.

- Wenn das nicht funktioniert kannst du nicht im Mainform, wenn es in den Vordergrund kommt UND Form2 angezeigt wird, den Wechsel in Form2 anstoßen (setfocus)?

DasWolf 13. Nov 2019 14:21

AW: falsches Fenster im Vordergrund
 
Zitat:

Zitat von Moombas (Beitrag 1451273)
- Ggf. Mainform.Enabled := False; setzen, solange im Form2 gearbeitet werden soll. Dann wären keine Eingaben im Mainform möglich, wie das dabei mit dem Fokus ist kann ich aktuell nicht testen, denke aber der Fokus kann dann auch nicht aufs Mainform gesetzt werden.

Durch das modale anzeigen von Form2 ist sowieso keine Eingabe in Form1 möglich. Wozu dann noch soviel Käse im Code unterbringen?

Hier nochmal die Erklärung:

Zitat:

Zitat von Rolf Frei (Beitrag 1451272)
Sorry aber soawas ist ein Murks. Er macht das schon richtig so wie er es macht. Das Problem ist ein Windows Fehlverhalten, das seit Vista oder sogar XP besteht. Das Ganze ist auch nicht so einfach zu reproduzieren. Wenn eine Anwendung länger beschäftigt ist und nicht auf Windwos reagiert, macht Windows irgend wie was am Modalverhalten und das kann dann zu diesem Effekt führen. In der Regel hilft es dann, eine andere Anwendung über die Taskbar zu aktivieren und dann wieder auf die eigene zurück zu wechseln. Dadurch erscheint im Normalfall wieder der richtige Modale Dialog zu oberst.

Ich bin mir nicht sicher, ob das ein Fehlverhalten von Delphi Programmen ist oder ob das eine altes Windows Fehlverhalten ist. Am eingenen Programmcode liegt es aber zu 100% nicht.


Uwe Raabe 13. Nov 2019 17:50

AW: falsches Fenster im Vordergrund
 
Eventuell hilft eine passende Einstellung von Form2.PopupMode und/oder Application.ModalPopupMode.

rokli 6. Dez 2019 15:07

AW: falsches Fenster im Vordergrund
 
Ein freundliches Hallo an Alle!

Zitat:

Zitat von Moombas (Beitrag 1451273)
Da würde ich eher die Main
form ausblenden (Visible := False) und nur einblenden, wenn sie wirklich benötigt wird.

Häufig ist das Einfache einfach auch das einfachste! Seit gut 2 Wochen hab ich die Idee von Moombas verbaut: Wenn die Form2 aufgerufen wird, setze ich die MainForm auf Visible = false, und wenn das Fenster wieder geschlossen wird, setze ich die MainForm.Visible := true! Fertig!

Delphi-Quellcode:
procedure TfrmMain.bbtLagerClick(Sender: TObject);
begin
   p_ProtoWrite('');
   p_ProtoWrite('starte Lager aus frmMain');
   frmMain.Visible            := false;
   frmLager.ShowModal;
   frmMain.Visible            := true;
end;
Und keine Fehler mehr! Vielen Dank für alle Tipps und besonders an Mommbas für die klasse Idee!

Schönes Wochende!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
Seite 2 von 2     12   

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