19 Stimmen

NSWindow vorne, aber nicht im Fokus machen

Ich möchte ein neues NSW-Fenster vor allen anderen Fenstern platzieren, ohne dass es den Fokus übernimmt.

Ich kann sie mit der folgenden Methode im Vordergrund erscheinen lassen:

NSApplication \*thisApp = \[NSApplication sharedApplication\];
\[thisApp activateIgnoringOtherApps:YES\];

\[self makeKeyAndOrderFront:self\];

Gibt es Hinweise darauf, wie man es im Vordergrund erscheinen lassen kann, ohne den Fokus von einer anderen Anwendung wegzunehmen?

14voto

cobbal Punkte 68319

Anstelle von makeKeyAndOrderFront: versuchen Sie einfach orderFront: ( docs )

6voto

NSGod Punkte 22276

Versuchen Sie so etwas:

[window setLevel:NSScreenSaverWindowLevel + 1];
[window orderFront:nil];

Dadurch wird das Fenster über den Fenstern anderer Anwendungen angezeigt, ohne dass es jedoch aktiv wird. Ein Fenster mit einer normalen Fensterebene in Anwendung A kann nicht vor einem Fenster von Anwendung B angezeigt werden, wenn Anwendung B die aktive Anwendung ist. (Dafür gibt es übrigens einen guten Grund).

Bitte verwenden Sie diese Methode mit Bedacht. In vielen Fällen wird sie wahrscheinlich gegen die Richtlinien für menschliche Schnittstellen verstoßen. Wenn sie missbraucht wird, kann sie dazu führen, dass ein Benutzer verärgert ist. (Bei meinem Test gerade eben erschien das Fenster beispielsweise direkt über der Stelle, auf die ich gerade in Safari schaute. Die Tatsache, dass es mich bei meiner Arbeit behindert hat, aber die Dreistigkeit besaß no zu einem Schlüssel werden, machte es noch ärgerlicher. Wäre es in einer Ecke meines Bildschirms untergebracht, wäre es vielleicht anders).

4voto

zekel Punkte 8775

Die Reihenfolge Frontmethoden und Ebene zum Bildschirmschoner +1 hat bei mir nicht funktioniert. Diese Antwort von The-Kenny aber schon:

[yourPanel setLevel:kCGMaximumWindowLevel];

0voto

Alex Punkte 425

Falls Sie Folgendes verwenden orderFront , versuchen orderFrontRegardless stattdessen. Ersteres ist nicht jedes Mal konsistent, wenn es aufgerufen wird. Letzteres scheint immer zu funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X