AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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   
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
175 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 11: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
54 Beiträge
 
Delphi XE7 Enterprise
 
#2

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 11: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: Bestensee
334 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Verhindern, daß ein Fenster den Fokus bekommt

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

Registriert seit: 10. Jun 2003
Ort: Berlin
6.502 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 11: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
175 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 11: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
175 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 11: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
5.019 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#7

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12: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, 12:21
Vielleicht lässt sich mit TScreen.OnActiveFormChange() was basteln...
  Mit Zitat antworten Zitat
nahpets

Registriert seit: 11. Okt 2006
2.903 Beiträge
 
Delphi 7 Professional
 
#9

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 12: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.
Stephan
Weil die Lichtgeschwindigkeit höher als die Schallgeschwindigkeit ist, hält man viele Leute für helle Köpfe, bis man sie reden hört.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.216 Beiträge
 
Delphi XE3 Professional
 
#10

AW: Verhindern, daß ein Fenster den Fokus bekommt

  Alt 13. Sep 2017, 17: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf