Delphi - Wie verhindert man, dass Forms / MsgBoxes unter ein vorheriges Formular verschoben werden?

Viele Male nach der Windows 98-Ära haben wir festgestellt, dass einige Dialogfelder ihre Z-Reihenfolge verlieren und zur vorherigen Form zurückkehren.

Beispielsweise

Dialog1.ShowModal;

Dialog1.OnClickButton() : ShowMessage('anything');

Wenn MessageBox angezeigt wird, hat es manchmal keinen Fokus und wird unter Dialog1 verschoben. Die User sind verwirrt, sie sagen: Meine Anwendung ist eingefroren !!! Wenn sie jedoch Alt + Tab verwenden, um zu einer anderen App und zurück zu wechseln, kehrt der Fokus zur MessageBox zurück und es wird das Vordergrundfenster.

Wir haben dies mit ShowMessage, MessageBox, normalen Formularen und auch QuickReport-Formularen erlebt.

Weiß jemand davon? Ist es ein Windows-Fehler? Wie können Sie das verhindern? Wie fange ich das?

Danke für Ihre Hilfe: dd

Ich sagte wirklich, dass nach Win98, so dass alle Betriebssysteme (auch Win7) von diesem Problem betroffen sind. Wir haben Delphi 6 Prof verwendet, daher funktionieren die Eigenschaften nicht mit Standardformularen.

Jemand sagte, dass Nachrichtendialoge mit MessageBox + MB_APPLMODAL gesteuert werden können. Das sind gute Nachrichten, aber wir haben viele alte Formen und Komponenten, Tools von Drittanbietern.

So ist es harte Arbeit, eine komplett neue Anwendung mit Ersetzung der Formulare zu erstellen.

Aber wir werden es versuchen.

Ich denke, die Antwort ist, dass dies ein halbes Anwendungsproblem und ein halbes Windows-Problem ist. Wenn Windows dies manchmal handhabt und manchmal nicht, scheint dies ein Windows-Fehler zu sein. Aber wenn wir gute modale Fenstererstellung erzwingen können, dann ist es ein Programmierfehler.

Kann mir jemand erklären, was das WS_POPUP-Flag bedeutet? Hat es irgendwelche Nebenwirkungen oder nicht?

Danke: dd

Antworten auf die Frage(8)

Ihre Antwort auf die Frage