Laden...

Form ohne Focus immer im Vordergrund anzeigen

Erstellt von janSharp vor 9 Jahren Letzter Beitrag vor 9 Jahren 7.836 Views
J
janSharp Themenstarter:in
9 Beiträge seit 2013
vor 9 Jahren
Form ohne Focus immer im Vordergrund anzeigen

Hallo zusammen,

zur Anzeige von Benachrichtigungen möchte ich gerne eine Form im Vordergrund anzeigen ohne das diese den Focus erhält und von anderen Fenstern überdeckt wird.

Beispiel
Jemand schreibt in Word einen Text. Das Benachrichtigungsfenster öffnet sich oben links. Derjenige sieht die Benachrichtigung, kann jedoch ohne Probleme seinen Text weiterschreiben.
TopLevel und TopMost habe ich schon probiert, diese brachten aber nicht den gewünschten Effekt.

Kann mir eventuell jemand einen Tipp geben?

LG janSharp

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo

TopMost ist schon das richtige. Ein TopMost-Form muss nicht aktiv sein und muss den Fokus nicht besitzen. Es ist ja gerade der Clou, dass es im Vordergrund bleibt, auch wenn es nicht mehr aktiv ist / den Focus nicht mehr hat.

Der Tick ist also, zu verhindern, dass das Form aktiv wird bzw. den Focus sofort wieder zurückzusetzen, siehe z.B. Aus Form neues Form öffnen, aber Focus behalten.( Ich will nicht ausschließen, dass es bessere Lösungen gibt. Diese habe ich innerhalb von einer Minute gefunden. [EDIT]Hier noch eine Form anzeigen ohne Focus[/EDIT]

herbivore

J
janSharp Themenstarter:in
9 Beiträge seit 2013
vor 9 Jahren

Hey herbivore,

vielen Dank für die Antwort. Irgendwie war ich heute Morgen wohl noch in geistiger Umnachtung. Das Problem ist das TopLevel als auch TopMost es nicht schaffen das Fenster immer im Vordergrund anzuzeigen.

Hintergrund
Ich entwickle grade ein Outlook Plugin welches bei einkommenden E-Mails ein Fenster mit einigen Zusatzinformationen anzeigen soll. Das doofe ist nur das dieses Fenster immer im Hintergrund eingeblendet wird und somit für den Benutzer nicht sichtbar ist.

LG janSharp

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo janSharp,

TopLevel ist dazu da, dass man ein Fenster in einem anderen Fenster anzeigen kann. Darum geht es hier nicht.

TopMost sollte dafür sorgen, dass das betreffenden Fenster immer im Vordergrund ist. Das sollte eigentlich funktionieren. Wenn das bei dir nicht klappt, ist schwer zu sagen, warum.

herbivore

C
224 Beiträge seit 2009
vor 9 Jahren

Zitat aus MSDN Form.TopMost:

Das oberste Formular ist ein Formular, das alle anderen (nicht obersten) Formulare überlagert, auch wenn es nicht das aktive Formular oder das Vordergrundformular ist. Oberste Formulare werden immer an oberster Stelle in der z-Reihenfolge der Fenster auf dem Desktop angezeigt. Mit dieser Eigenschaft können Sie ein Formular erstellen, das in der Anwendung immer angezeigt wird, beispielsweise ein Toolfenster zum Suchen und Ersetzen.

Mir fallen folgende Möglichkeiten ein:

  1. Ich habe eine Anwendung mit nur einer Form und die Form ist auf TopMost gesetzt.

Bei der Ausführung in der Entwicklungsumgebung rutscht dann das Fenster in den Hintergrund, wenn ich es durch ein anderes Fenster, z. B. dem Internet Explorer verdecke. Diesen Effekt habe ich nicht erwartet und ist für mich aus der MSDN Doku nicht ersichtlich.

Bei mir bleibt das Fenster im Vordergrund, wenn ich stattdessen das Kompilat ausführe und es durch ein anderes Fenster, z. B. dem Internet Explorer verdecken will. So soll es sein.

  1. Das Verhalten mit der Entwicklungsumgebung ist ein Hinweis für mich, dass es auch andere Konstellationen geben könnte, wo z.B. TopMost nicht global funktioniert, sondern lokal innerhalb der Anwendung beschränkt ist. Dies ist reine Vermutung.

  2. Dein Outlook ist ebenfalls TopMost.

P
1.090 Beiträge seit 2011
vor 9 Jahren

Hi janSharp,

google mal nach Toast Notification, das mach eigentlich was du willst. Und Beispiele gibt es da massig.

MFG
Björn

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

J
janSharp Themenstarter:in
9 Beiträge seit 2013
vor 9 Jahren

@herbivore @CoLo
Vielen Dank für eure Antworten 😄 Dann geht das vielleicht erst einmal nicht so wie wir uns das vorstellen. Ist zwar sehr schade, kann man aber nichts machen.

@Palin
Danke für den Tipp mit den Toast Notifications. Die Idee war nur grade diese zu umgehen, da diese in unserer Citrix Umgebung zurzeit nicht funktionieren und die Mitarbeiter somit nicht über eingehende E-Mails informiert werden.

P
660 Beiträge seit 2008
vor 9 Jahren

Hallo,

ich weiss nicht ob das eine gute Idee ist oder überhaupt möglich ist aber du könntest ja mittels
WinAPI das Fenster mit dem aktuellen Fokus ermitteln, deine Anwendung zum Child dieses Fenster
machen und dann in einer Ecke dein Notification-Fenster einblenden.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

C
224 Beiträge seit 2009
vor 9 Jahren

Hi janSharp,

wenn Du eine MyFormTopMost.exe erstellst, ist diese dann im Vordergrund?
Wenn ja, dann kannst Du ja über Dein Plugin die exe aufrufen (z.B. mit Argumenten) und diese Deine Daten schicken.

S
4 Beiträge seit 2012
vor 9 Jahren

Könnte sein, dass evtl. Outlook hier auch noch an den Fenstern rumfummelt. Beispielsweise habe ich bei mir furchtbare Schriftdarstellung (ohne Antialiasing). Vielleicht müsste man Outlook-seitig noch was einstellen, aber mir fehlt schlicht die Erfahrung damit.

P
1.090 Beiträge seit 2011
vor 9 Jahren

@janSharp

Du sollst ja auch nicht die Toast Notification verwenden sondern dir den Quellcode in den Beispielen anschauen. Damit solltest du zu mindesten auf einen Windows Pc eine funktionierende Lösung hin bekommen.
Wenn es da ein grundlegendes Problem mit der Citrix Umgebung gibt, kann es sein das die Lösung dort auch nicht funktioniert. Dann solltest du aber mal schauen woran es bei der Citrix Umgebung scheitert.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern