Code: Alles auswählen
SendMessage_(GadgetID(#G1), #WM_SETFOCUS, 1, 1)
Gibt hierzu bedenken das System so zu programmieren ?
Code: Alles auswählen
SendMessage_(GadgetID(#G1), #WM_SETFOCUS, 1, 1)
Code: Alles auswählen
SendMessage_(GadgetID(#G1), #WM_SETFOCUS, 1, 1)
SendMessage_(GadgetID(#G1), #WM_ACTIVATE, 1, 1)
So funktionierts wieder
Code: Alles auswählen
Global Exit
Global Befehl
#W1=1
#G1=2
#G2=3
Procedure A1(P)
Repeat
Select Befehl
Case 1
Debug "Befehl 1"
Befehl=0
Case 2
Debug "Befehl 2 ---"
Debug "Run Calc.exe"
program=RunProgram("calc.exe", "", "", #PB_Program_Open)
While ProgramRunning(program)
Delay(100)
Wend
CloseProgram(program)
Debug "Calc Closed"
MessageRequester("OK","OK")
SendMessage_(GadgetID(#G1), #WM_SETFOCUS, 1, 1)
Befehl=0
EndSelect
Delay(10)
Until Exit=1
Exit=2
EndProcedure
OpenWindow(#W1, 100, 100, 200, 200, "Main")
StringGadget(#G1, 10, 10, 100, 20, "ABC")
ButtonGadget(#G2, 10, 40, 100, 20, "Klick mich")
CreateThread(@A1(), 1)
Repeat
event=WaitWindowEvent(50)
Select event
Case #WM_APP
SetActiveWindow(#W1)
SetActiveGadget(#G1)
Case #PB_Event_Gadget
Select EventGadget()
Case #G1
Befehl=1
Case #G2
Befehl=2
EndSelect
Case #PB_Event_CloseWindow
Select GetActiveWindow()
Case #W1
Exit=1
EndSelect
EndSelect
Until Exit=2
X360 Andy, dieses rumprobieren bringt Dein Fenster nicht in denX360 Andy hat geschrieben:Ich muss mich leider korrigieren.
Wenn vor dem Befehl eine einfache Messagebox kommt... kann man in das StringGadget nichts mehr eingeben.
Versuch mal ob du nach dem Schließen vom Rechner was eingeben kannst....
[Edit]
Die Lösung istCode: Alles auswählen
SendMessage_(GadgetID(#G1), #WM_SETFOCUS, 1, 1) SendMessage_(GadgetID(#G1), #WM_ACTIVATE, 1, 1) So funktionierts wieder
[/Edit]
...
Code: Alles auswählen
Procedure SetForegroundWindowInternal(hWnd)
;
; http://www.codeproject.com/Tips/76427/How-to-bring-window-to-top-with-SetForegroundWindo
;
If Not IsWindow_(hWnd) : ProcedureReturn : EndIf
; relation time of SetForegroundWindow lock
Protected lockTimeOut.l = 0;
Protected hCurrWnd = GetForegroundWindow_();
Protected dwThisTID.l = GetCurrentThreadId_()
Protected dwCurrTID.l = GetWindowThreadProcessId_(hCurrWnd,0);
; we need To bypass some limitations from Microsoft :)
If (dwThisTID <> dwCurrTID)
AttachThreadInput_(dwThisTID, dwCurrTID, #True);
SystemParametersInfo_(#SPI_GETFOREGROUNDLOCKTIMEOUT,0,@lockTimeOut,0);
SystemParametersInfo_(#SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,#SPIF_SENDWININICHANGE | #SPIF_UPDATEINIFILE);
#ASFW_ANY = -1
AllowSetForegroundWindow_(#ASFW_ANY);
EndIf
SetForegroundWindow_(hWnd);
;SetFocus_(hWnd)
If (dwThisTID <> dwCurrTID)
SystemParametersInfo_(#SPI_SETFOREGROUNDLOCKTIMEOUT,0,lockTimeOut,#SPIF_SENDWININICHANGE | #SPIF_UPDATEINIFILE);
AttachThreadInput_(dwThisTID, dwCurrTID, #False);
EndIf
EndProcedure
Global Exit
Global Befehl
#W1=1
#G1=2
#G2=3
Procedure A1(windowID.i)
Repeat
Select Befehl
Case 1
Debug "Befehl 1"
Befehl=0
Case 2
Debug "Befehl 2 ---"
Debug "Run Calc.exe"
program=RunProgram("calc.exe", "", "", #PB_Program_Open)
While ProgramRunning(program)
Delay(100)
Wend
CloseProgram(program)
Debug "Calc Closed"
MessageRequester("OK","OK")
PostMessage_(windowID, #WM_APP+1, 0, 0)
Befehl=0
EndSelect
Delay(10)
Until Exit=1
Exit=2
EndProcedure
OpenWindow(#W1, 100, 100, 200, 200, "Main")
StringGadget(#G1, 10, 10, 100, 20, "ABC")
ButtonGadget(#G2, 10, 40, 100, 20, "Klick mich")
CreateThread(@A1(), WindowID(#W1))
Repeat
event=WaitWindowEvent()
Select event
Case #WM_APP+1
SetForegroundWindowInternal(WindowID(#W1))
SetActiveGadget(#G1)
Case #PB_Event_Gadget
Select EventGadget()
Case #G1
Befehl=1
Case #G2
Befehl=2
EndSelect
Case #PB_Event_CloseWindow
Select GetActiveWindow()
Case #W1
Exit=1
EndSelect
EndSelect
Until Exit=2