Entwickler-Ecke

Windows API - MessageBox die Unabhängig im Vordergrund bleibt


Delete - So 14.08.05 11:32
Titel: MessageBox die Unabhängig im Vordergrund bleibt
Hallo!

Ich suche gerade schon eine ganze Weile nach einer Möglichkeit, wie ich eine MessageBox oder ein dazu gemachten TForm dazu bewegen kann, dass sie garantiert im Vordergrund bleibt.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
With CreateMessageDialog(AMessage,mtWarning,[mbOK]) do begin
 FormStyle:=fsStayOnTop;
 //BorderStyle:=bsToolWindow;
 Caption:=Form1.Caption;
 Font.Style:=[fsbold];
 ShowModal;
 Free;
end;


Das hatte ich bisher versucht. Funktioniert aber nicht...
Das erstellte Fenster ist eben leider ein Child-Window und damit bleibt es auch nur so lange im Vordergrund, wie die Hauptanwendung im Vordergrund ist. Gleiches gilt für praktisch alle anderen Methoden.

Das Warnfenster soll aber auch (oder gerade) funktionieren, wenn meine Anwendung zum Tray-Icon minimiert ist und soll dann auch im Vordergrund bleiben, bis der Benutzer es auch wirklich gesehen und bestätigt hat.

Vorschläge?

THX schonmal im Voraus :)


Sprint - So 14.08.05 11:54


Delphi-Quelltext
1:
MessageBox(GetDesktopWindow, 'Text''Caption', MB_OK or MB_ICONEXCLAMATION or MB_SYSTEMMODAL);                    

Bei einer TForm musst du SetWindowPos mit dem Parameter HWND_TOPMOST benutzen.


Delete - So 14.08.05 22:13

Ah ja... der MB_SYSTEMMODAL Flag war genau der Hinweis, den ich gesucht habe.

Letztlich fand ich dann aber die Kombination "MB_SETFOREGROUND or MB_TOPMOST" noch besser, weil die Nachricht mit MB_SYSTEMMODAL immer das Anwendungssymbol in der Titelleiste und einen eigenen Taskleisteneintrag hat.


klezmor - Fr 09.09.05 09:58

das habe ich gerade in der Delphi-Hilfe gefunden:
The following code causes “stay on top” forms to allow a MessageBox to appear on top. After the message box is closed, the topmost forms are restored so that they continue to float to the top.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Begin
  with Application do
  begin
    NormalizeTopMosts;
    MessageBox('This should be on top.''Look', MB_OK);
    RestoreTopMosts;
  end;
end;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt.