Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi API-Funktion SetWindowPos (https://www.delphipraxis.net/100247-api-funktion-setwindowpos.html)

juezi 25. Sep 2007 06:21


API-Funktion SetWindowPos
 
Hallo Zusammen

ich habe folgendes Problem, wenn ich

//Formular in den Vordergrund bringen
SetWindowPos(handle,HWND_TOPMOST,Left,Top,Width,He ight,SWP_SHOWWINDOW);
form1.Activate;
edit1.SetFocus;

ausführe, wird mir das Fenster in den Vordergrund geholt ist aber nicht aktiv, ich muss es dann anklicken um es zu aktivieren.

Vielen Dank für Eure Hilfe

pstruh 25. Sep 2007 07:26

Re: API-Funktion SetWindowPos
 
Moin, Moin,

versuche es doch mal mit
Delphi-Quellcode:
SetForegroundWindow(Self.Handle);

juezi 25. Sep 2007 07:41

Re: API-Funktion SetWindowPos
 
Hallo,

vielen Dank für die schnelle Antwort, leider hab ich das gleiche Problem.
(Vielleicht eine kurze Erklärung zu meiner Anwendung, ich muss ein Formular anzeigen um einen Barcode der über die Tastatureingabe eingelesen wird an eine andere Fremde Applikation via dll übergeben, dafür habe ich gedacht das ich das Formular einblende, der Barcode wird dann über ein edit Feld eingelesen.)

Danke

s-off 25. Sep 2007 07:55

Re: API-Funktion SetWindowPos
 
Hallo,

bei mir funktioniert es so, wie von pstruh beschrieben. Der Focus ist auf dem Edit und ich kann sofort losschreiben, ohne irgendetwas anklicken zu müssen (allerdings nur, wenn meine Form vorher nur im Hintergrund war - sollte sie minimiert sein, funktioniert es nicht).

Delphi-Quellcode:
   SetForegroundWindow(Self.Handle);
   Edit1.SetFocus;

juezi 25. Sep 2007 07:58

Re: API-Funktion SetWindowPos
 
Hallo,

nochmals danke, Du hast gesagt Du legst Deine Anwendung nur in den Hintergrund, welchen Befehlt
verwendest Du hierfür, ich verwende zum Ausblenden den Befehl
SetWindowPos(handle,HWND_BOTTOM,Left,Top,Width,Hei ght,SWP_SHOWWINDOW);

Danke

s-off 25. Sep 2007 08:05

Re: API-Funktion SetWindowPos
 
Keinen Befehl; habe es manuell in den Hintergrund gelegt, indem ich ein anderes Fenster nach vorn geholt habe.

Edit:
Wenn Du es so machst, dann funktioniert es auch, sollte Deine Form, oder die ganze Application minimiert sein:
Delphi-Quellcode:
PostMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForegroundWindow(Self.Handle);
Edit1.SetFocus;
Edit 2:
Um nochmal auf eine Deiner letzteren Fragen zurück zu kommen; mit
Delphi-Quellcode:
PostMessage(Self.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
könntest Du Deine Form natürlich vorher minimieren.

juezi 25. Sep 2007 13:00

Re: API-Funktion SetWindowPos
 
Hallo,

vielen Dank, leider habe ich immer noch das Problem mit dem anklicken, kann es daran liegen das ich meine Abfrage zum Einblenden und Ausblenden in einem Timer laufen habe?

Hier der Quellcode meines Timers

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Dll-Funktion um Maschinenstatus abzufragen
MepRemote_ReadMachineState(eStatus);

//Wenn der Status 9 ist muss das Formular eingeblendet werden um den Barcode abzufragen
if (eStatus = 9) and not Fl_SetSerial then
begin
//Barcode-Formular in den Vordergrund bringen
PostMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForegroundWindow(Self.Handle);
Edit1.SetFocus
end;

//Wenn der Status ungleich 9 ist muss das Formular wieder in den Hintergrund gehen
if (eStatus <> 9) then
begin
Fl_SetSerial := false;
edit1.Text := '';
//Barcode-Formular in den Hintergrund bringen
SetWindowPos(handle,HWND_BOTTOM,Left,Top,Width,Hei ght,SWP_SHOWWINDOW);

end;
end;

Danke

s-off 25. Sep 2007 13:19

Re: API-Funktion SetWindowPos
 
Zitat:

Zitat von juezi
kann es daran liegen das ich meine Abfrage zum Einblenden und Ausblenden in einem Timer laufen habe?

Bzgl. der Kernaussage: Nein. Meine Tests basierten ebefalls auf einem Timer.

Deinen Code habe ich mir nicht durchgelesen; formatier ihn bitte.

juezi 25. Sep 2007 15:06

Re: API-Funktion SetWindowPos
 
Hallo,

ich habe meinen Code einfach aus Delphi hierein kopiert,
kann ich den Code hier formatieren lassen?
Danke

Apollonius 25. Sep 2007 15:10

Re: API-Funktion SetWindowPos
 
Die Delphi-Tags im Schreibfenster drumherumlegen.
Delphi-Quellcode:
 Code


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Seite 1 von 3  1 23      

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