SetWindowPos funktioniert nicht
SetWindowPos funktioniert nicht
Ich habe eine Anwendung programmiert, die vor allen anderen "laufenden" Anwendungen immer onTop sein soll.
Dieses Programm ist ein kleines Fenster mit einigen Editkomponenten, in die ich Werte aus einem Fenster einer anderen "laufenden" Anwendung
eintrage. Aus diesen Werten wird dann u. a. ein zweizeiliger Text generiert und in die Zwischenablage kopiert.
Der Inhalt der Zwischenablage wird dann in ein Textfeld eines anderen Fensters der "laufenden" Anwendung (siehe oben) eingefügt.
Das Problem ist, dass meine Anwendung nicht vor allen anderen Anwendungen permant auf dem Desktop erscheint.
Ich habe im OnCreate-Ereignis des Formulars folgenden Quelltext eingefügt:
SetWindowPos(Form1.Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Aber irgendwie funktioniert es nicht. Die Unit Windows steht in der uses-Klausel. Was mach ich falsch?
Ich benutze folgenden Lazarus-Version: lazarus-0.9.26.2-fpc-2.2.2-win32
Für Eure Hilfe vielen Dank im voraus.
Dieses Programm ist ein kleines Fenster mit einigen Editkomponenten, in die ich Werte aus einem Fenster einer anderen "laufenden" Anwendung
eintrage. Aus diesen Werten wird dann u. a. ein zweizeiliger Text generiert und in die Zwischenablage kopiert.
Der Inhalt der Zwischenablage wird dann in ein Textfeld eines anderen Fensters der "laufenden" Anwendung (siehe oben) eingefügt.
Das Problem ist, dass meine Anwendung nicht vor allen anderen Anwendungen permant auf dem Desktop erscheint.
Ich habe im OnCreate-Ereignis des Formulars folgenden Quelltext eingefügt:
SetWindowPos(Form1.Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Aber irgendwie funktioniert es nicht. Die Unit Windows steht in der uses-Klausel. Was mach ich falsch?
Ich benutze folgenden Lazarus-Version: lazarus-0.9.26.2-fpc-2.2.2-win32
Für Eure Hilfe vielen Dank im voraus.
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: SetWindowPos funktioniert nicht
Max hat geschrieben:Ich habe eine Anwendung programmiert, die vor allen anderen "laufenden" Anwendungen immer onTop sein soll.
Hallo Max, willkommen im Lazarusforum!
Eventuell hilft dir folgende Eigenschaft weiter?:
Code: Alles auswählen
Form1.FormStyle:=fsStayOnTop;
Viele Grüße, Euklid
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: SetWindowPos funktioniert nicht
fsStayOnTop arbeitet wohl nur ANwendungsintern, nicht Desktopweit:
http://bugs.freepascal.org/view.php?id=13629
http://bugs.freepascal.org/view.php?id=11977
http://bugs.freepascal.org/view.php?id=13629
http://bugs.freepascal.org/view.php?id=11977
Johannes
Re: SetWindowPos funktioniert nicht
Hallo Euklid, hallo monta,
danke für die Antworten, aber leider bringen die mich nicht weiter.
@ Euklid: Wie in monta 's antwort erwähnt, funktioniert fsStayonTop nur "innerhalb" einer Anwendung. Damals unter Delphi 5 funktionierte es auch desktopmäßig.
@ monta: Die Bugs hatte ich auch schon gesehen. Zu Bug 11977 ist auch eine Text-Datei mit *.patch beigefügt. Ich hatte mal versucht die Datei "win32callback.inc" entsprechend anzupassen, aber das hat auch keine Auswirkungen.
Normalweiser ist es doch so, wenn es keine Pascalfunktion gibt, kann man sich evtl. mit einer API-Funktion behelfen.
Aber wie schon gesagt, die API-Funktion bewirkt i. d. F. nichts.
danke für die Antworten, aber leider bringen die mich nicht weiter.
@ Euklid: Wie in monta 's antwort erwähnt, funktioniert fsStayonTop nur "innerhalb" einer Anwendung. Damals unter Delphi 5 funktionierte es auch desktopmäßig.
@ monta: Die Bugs hatte ich auch schon gesehen. Zu Bug 11977 ist auch eine Text-Datei mit *.patch beigefügt. Ich hatte mal versucht die Datei "win32callback.inc" entsprechend anzupassen, aber das hat auch keine Auswirkungen.
Normalweiser ist es doch so, wenn es keine Pascalfunktion gibt, kann man sich evtl. mit einer API-Funktion behelfen.
Aber wie schon gesagt, die API-Funktion bewirkt i. d. F. nichts.
Re: SetWindowPos funktioniert nicht
Hat denn keiner einen Lösungsvorschlag oder weiß woran es liegt?
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: SetWindowPos funktioniert nicht
Ändert sich was, wenn du das woanders aufrufst, OnShow zum Beispiel?
Re: SetWindowPos funktioniert nicht
Leider, nein! Schade, ich möchte Lazarus eigentlich weiter nutzen und nicht wieder auf eine alte Deplhi-Version zurückgreifen.
Gerade weil man Lazarus auch portabel, sprich: auf USB-Stick, nutzen kann.
Gerade weil man Lazarus auch portabel, sprich: auf USB-Stick, nutzen kann.
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: SetWindowPos funktioniert nicht
Ein etwas schmutziger Hack wäre höchstens ein Timer und ein regelmäßiges abprüfen, ob das Formular verdeckt ist und wenn ja, dann halt ein BringToFront.
Sollte gehen, ist natürlich nicht wirklich schön.
Sollte gehen, ist natürlich nicht wirklich schön.
Johannes
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: SetWindowPos funktioniert nicht
Kann es sein, dass es um Linux geht? Dort ist ein globales StayOnTop definitv ein Hack. Eine Lösung für solch ein übles Ziel könnte sein, dass man das Formular über alle Steuerelemente maximiert (0,0,Screen.Width,Screen.Height) und Alt-Tab (nicht OnKeyUp, das kann anders sein, sondern OnLeave, OnHide o.ä. komm gerade nicht drauf) verhindert. Oder bei Programmstart einfach alle anderen Programme schließen und dann übermaximieren.
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: SetWindowPos funktioniert nicht
Immerhin soll der Bug bis zur Version 1.0 von Lazarus behoben sein... ... warten lohnt sich