![]() |
Verhindern, daß ein Fenster den Fokus bekommt
Hallo,
ich habe eine Anwendung, die auf zwei Monitore verteilt ist. Der Primärmonitor hat die eigentliche Anwendung, auf dem zweiten Monitor werden Statusinfos angezeigt, bedient wird dort nicht. Nun habe ich beim Drucken einen Vorschaudialog, der zuerst eine Progressbar und dann die Druckvorschau anzeigt. In dem Moment, wo die Progressbar-Form wieder freigegeben wird, geht der Fokus an mein Statusformular auf dem ext. Monitor, die nachfolgende Druckvorschau erscheint dann auf dem Statusbildschirm, anstatt wie gewünscht auf dem Hauptmonitor. Ich könnte zwar die Progressbar ausblenden (Fortesreport), dann erscheint der Dialog am richtigen Platz, aber lieber wäre mir eine Möglichkeit, diesen Fokuswechsel ganz zu blockieren, so daß mein Statusfenster den Fokus gar nicht bekommen kann. |
AW: Verhindern, daß ein Fenster den Fokus bekommt
Wenn man statt Form.Show nur Form.Visible := True setzt, wird kein Fokus gesetzt.
|
AW: Verhindern, daß ein Fenster den Fokus bekommt
reicht es nicht, dem Hauptfenster nach dem Progressbar den Fokus über SetFocus() zu setzen?
|
AW: Verhindern, daß ein Fenster den Fokus bekommt
WS_EX_NOACTIVATE in den CreateParams setzen könnte reichen.
|
AW: Verhindern, daß ein Fenster den Fokus bekommt
Zitat:
Zitat:
Ein Problem mit ähnlicher Ursache hatte ich auch schon ![]() |
AW: Verhindern, daß ein Fenster den Fokus bekommt
Zitat:
|
AW: Verhindern, daß ein Fenster den Fokus bekommt
Nur mal so aus der Hüfte heraus: Kannst du nicht einfach im OnActivate-Event des Statusfensters den Focus direkt wieder auf das Hauptformular zu setzen?
|
AW: Verhindern, daß ein Fenster den Fokus bekommt
Vielleicht lässt sich mit TScreen.OnActiveFormChange() was basteln...
|
AW: Verhindern, daß ein Fenster den Fokus bekommt
Wenn Du in Deinem Hauptformular eine Ereignisroutine für OnShow schreibst, die Du dem OnShow-Ereignis des Druckvorschauformulares nach dessen Erstellung zuweist, könntest Du es in der Ereignisroutine mal mit sowas probieren:
Delphi-Quellcode:
Ist allerdings nur geraten, nie ausprobiert.
procedure THauptFormular.FormShowFuerDeinDruckvorschauFormular(Sender: TObject);
begin // Oder eine andere Positions- und/oder Größenberechnung zum Zentrieren ... auf dem Monitor. DeinDruckvorschauFormular.Left := Screen.Monitors[Hauptformular.Monitor.MonitorNum].Left; DeinDruckvorschauFormular.Width := Screen.Monitors[Hauptformular.Monitor.MonitorNum].Width; DeinDruckvorschauFormular.Top := Screen.Monitors[Hauptformular.Monitor.MonitorNum].Top; DeinDruckvorschauFormular.Height := Screen.Monitors[Hauptformular.Monitor.MonitorNum].Height; // Eventuell ginge auch sowas: DeinDruckvorschauFormular.Left := Hauptformular.Left + 4; DeinDruckvorschauFormular.Width := Hauptformular.Width - 8; DeinDruckvorschauFormular.Top := Hauptformular.Top + 8; DeinDruckvorschauFormular.Height := Hauptformular.Height - 16; end; |
AW: Verhindern, daß ein Fenster den Fokus bekommt
Hier ist wohl nicht das Problem beim "Fokus bekommen", sondern beim "Fokus verlieren".
Wenn das erste Fenster zu geht, dann gibt die VCL den Fokus an ein anderes Fenster und hier kommt die "manchmal" VCL etwas durcheinander. "Eigentlich" geht der Fokus an das Fenster, was vor Anzeige des ersten Fensters aktiv war. (also der nächste sichtbare Eintrag in Screen.Forms). Konnte man nicht bei TForm auch angeben, auf welchem Screen sie aufgehen sollen? Setzen kann man auch explitzit den PopupMode und PopupParent, um so zu regeln über welcher anderen Form sie aufgehen soll. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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