Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Alle Formen einer Anwendung OnTop halten (https://www.delphipraxis.net/195584-alle-formen-einer-anwendung-ontop-halten.html)

jacky213 11. Mär 2018 17:03

Alle Formen einer Anwendung OnTop halten
 
Hallo,

ich habe ein kleines Programm mit mehreren Formen am laufen und dieses Programm muss immer im Vordergrund gehalten werden. Mit FormStyle := fsStayOnTop funktioniert es soweit auch sehr gut, allerdings gibt es das Problem das wenn ich über die Hauptform beispielsweise Form2 aufrufe diese dann auch in den Hintergrund geht und meine Anwendung dadurch unbrauchbar wird.

Die zweite Form auch auf fsStayOnTop zu stellen hilft nichts, die Hauptform bleibt immer oben drauf. Wie kann ich das bewerkstelligen?

Dafür schon einmal vielen dank

Delphi.Narium 11. Mär 2018 17:15

AW: Alle Formen einer Anwendung OnTop halten
 
Geraten:

Bei der Anzeige von Form2 dort fsStayOnTop setzen und fsStayOnTop bei Form1 entfernen.

Beim Schließen von Form2 bei Form1 wieder fsStayOnTop setzen.

jacky213 11. Mär 2018 19:42

AW: Alle Formen einer Anwendung OnTop halten
 
Habe es jetzt genauso gelöst, nun taucht ein anderes Problem auf.

Zwischenzeitlich wird eine andere Anwendung aktiv und schiebt sich in den Vordergrund.
Habe versucht die andere Anwendung mit folgendem Code dauerhaft in den Hintergrund zu schicken, aber auch dies hat nicht funktioniert.

Delphi-Quellcode:
SetWindowPos(FindWindow('Programm', 'Programm Titel'),
             HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE + SWP_NOMOVE + SWP_NOSIZE);

hoika 12. Mär 2018 04:38

AW: Alle Formen einer Anwendung OnTop halten
 
Hallo,
das andere Programm kann sich selbst wieder in den Vordergrund bringen,
wie Du mit Deinem Programm.
Vielleicht hilft ja SW_HIDE?

uligerhardt 12. Mär 2018 06:17

AW: Alle Formen einer Anwendung OnTop halten
 
Sorry, das erinnert mich irgendwie hieran: https://blogs.msdn.microsoft.com/old...7-00/?p=35413/ :mrgreen:

KodeZwerg 12. Mär 2018 06:24

AW: Alle Formen einer Anwendung OnTop halten
 
SetWindowTopMost(hWin, True); // hWin = Handle des "StayOnTop" Fensters ; True = Top / False = NotTop
und ich glaub da gab es noch ein ResetTopMost o.ä., bitte Delphi Hilfe konsultieren!

Delphi-Quellcode:
function SetWindowTopMost(hWnd: HWND; bTopMost: boolean): boolean;
begin
 Result := SetWindowPos(hWnd, HWND_NOTOPMOST + WORD(bTopMost), 0, 0, 0, 0,
  SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
end;
Nachtrag:
Wenn Du experimentier-freudig bist kannst Du mit folgendem Code herumspielen,
der sollte Bewirken das mein Programm im Vordergrund vor allen anderen steht.
Wird bei mir im OnCreate Event aufgerufen.

Delphi-Quellcode:
function GetSysFocus: Integer;
var
  hFgWin, FgThreadID{, hFocusWin}: Integer;
begin
  hFgWin    := GetForegroundWindow;
  FgThreadID := GetWindowThreadProcessID(hFgWin, nil);
  if AttachThreadInput(GetCurrentThreadID, FgThreadID, True) then
  begin
//    hFocusWin := GetFocus;
    Result   := GetFocus;
    AttachThreadInput(GetCurrentThreadID, FgThreadID, False);
  end
  else
    Result := GetFocus;
end;

Codehunter 12. Mär 2018 12:56

AW: Alle Formen einer Anwendung OnTop halten
 
Also meine persönliche Meinung ist, dass man von Stay-on-Top-Fenstern die Finger lassen sollte. Wie oft habe ich als Anwender schon Zeit damit verschwendet, Programme per Taskmanager abzuschießen, weil eine Custom-Window-Order ein Fehlermeldungsfenster überlagert hat. Solche Programme habe ich meist nach kurzer Zeit deinstalliert.

Ich würde daher dringend empfehlen das Anwendungsdesign zu überarbeiten, sodass man ohne StayOnTop auskommt.

sko1 12. Mär 2018 15:40

AW: Alle Formen einer Anwendung OnTop halten
 
Wenn StayOnTop dann mit einer Zusatzfunktion:

Ich habe z.B. ein Kommunikationsfenster OnTop in der linken oberen Bildschirmecke.
Das hat die Funktionalität, dass wenn man mit der Maus drauf kommt, es in die andere rechte obere Ecke springt (bzw. dann wieder zurück) und somit eigentlich nie im Wege ist...

Das haben bisher alle User so akzeptiert.

Ciao
Stefan

KodeZwerg 12. Mär 2018 15:49

AW: Alle Formen einer Anwendung OnTop halten
 
Wenn man ein Widget/Gadjet oder wie auch immer heutzutage diese kleinen Mini-Fenster-Anwendungen genannt werden herstellt, will man schon irgendwie sichergehen das es "OnTop" ist, dafür wurde es ja erschaffen. Also "Finger-Weg" stimmt so nicht ganz.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 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