SetWindowPos funktioniert nicht

Antworten
Max
Beiträge: 4
Registriert: Fr 9. Okt 2009, 12:29

SetWindowPos funktioniert nicht

Beitrag von Max »

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.

Euklid
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

Beitrag von Euklid »

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

monta
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

Beitrag von monta »

fsStayOnTop arbeitet wohl nur ANwendungsintern, nicht Desktopweit:

http://bugs.freepascal.org/view.php?id=13629
http://bugs.freepascal.org/view.php?id=11977
Johannes

Max
Beiträge: 4
Registriert: Fr 9. Okt 2009, 12:29

Re: SetWindowPos funktioniert nicht

Beitrag von Max »

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.

Max
Beiträge: 4
Registriert: Fr 9. Okt 2009, 12:29

Re: SetWindowPos funktioniert nicht

Beitrag von Max »

Hat denn keiner einen Lösungsvorschlag oder weiß woran es liegt?

Scotty
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

Beitrag von Scotty »

Ändert sich was, wenn du das woanders aufrufst, OnShow zum Beispiel?

Max
Beiträge: 4
Registriert: Fr 9. Okt 2009, 12:29

Re: SetWindowPos funktioniert nicht

Beitrag von Max »

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.

monta
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

Beitrag von monta »

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.
Johannes

Scotty
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

Beitrag von Scotty »

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. :mrgreen:

Euklid
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

Beitrag von Euklid »

Immerhin soll der Bug bis zur Version 1.0 von Lazarus behoben sein... ... warten lohnt sich ;)

Antworten