AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern, daß ein Fenster den Fokus bekommt

Ein Thema von Rainer Wolff · begonnen am 13. Sep 2017 · letzter Beitrag vom 15. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#1

Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12:17
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.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12:22
Wenn man statt Form.Show nur Form.Visible := True setzt, wird kein Fokus gesetzt.
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12:25
reicht es nicht, dem Hauptfenster nach dem Progressbar den Fokus über SetFocus() zu setzen?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12:53
WS_EX_NOACTIVATE in den CreateParams setzen könnte reichen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12:55
Wenn man statt Form.Show nur Form.Visible := True setzt, wird kein Fokus gesetzt.
Beim Aufruf des Statusfensters visible:=true anstatt show reicht offensichtlich nicht, das Statusfenster bekommt trotzdem wieder den Fokus bei der Druckvorschau.

reicht es nicht, dem Hauptfenster nach dem Progressbar den Fokus über SetFocus() zu setzen?
Progressbar und Vorschaudialog sind in einer externen Opensource-Bibliothek (in einem Aufruf), daran möchte ich nicht unnötig herumpfuschen, sonst hab ich bei jedem Update wieder Arbeit.

Ein Problem mit ähnlicher Ursache hatte ich auch schon hier beschrieben, das wäre wohl wahrscheinlich auch beseitigt, wenn mein Statusfenster keinen Fokus erhalten kann.
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12:56
WS_EX_NOACTIVATE in den CreateParams setzen könnte reichen.
Hab ich schon probiert, hilft noch nicht
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 13:17
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
zagota

Registriert seit: 3. Sep 2014
38 Beiträge
 
#8

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 13:21
Vielleicht lässt sich mit TScreen.OnActiveFormChange() was basteln...
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 13:42
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:
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;
Ist allerdings nur geraten, nie ausprobiert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#10

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 18:46
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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