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 |
Re: API-Funktion SetWindowPos
Moin, Moin,
versuche es doch mal mit
Delphi-Quellcode:
SetForegroundWindow(Self.Handle);
|
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 |
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; |
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 |
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:
Edit 2:
PostMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForegroundWindow(Self.Handle); Edit1.SetFocus; Um nochmal auf eine Deiner letzteren Fragen zurück zu kommen; mit
Delphi-Quellcode:
könntest Du Deine Form natürlich vorher minimieren.
PostMessage(Self.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
|
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 |
Re: API-Funktion SetWindowPos
Zitat:
Deinen Code habe ich mir nicht durchgelesen; formatier ihn bitte. |
Re: API-Funktion SetWindowPos
Hallo,
ich habe meinen Code einfach aus Delphi hierein kopiert, kann ich den Code hier formatieren lassen? Danke |
Re: API-Funktion SetWindowPos
Die Delphi-Tags im Schreibfenster drumherumlegen.
Delphi-Quellcode:
Code
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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