My script opens an application window and then displays a custom dialog box with information about the changes that need to be made in that window. The changes needed in the application window are too complex to automate at this time. The custom dialog window has 'proceed' and 'cancel' buttons for the user to select after they have completed their changes.
The problem I am having is, that after the user makes changes in the application window and presses the 'Proceed' button, Macro Scheduler is unable to Setfocus on the application window to close it and reopen the application window for the next account.
If the user makes no changes in the application window but just presses 'Proceed' in the custom dialog window for each account the problem does not occur.
Also, if I put a long pause in the script after the 'Proceed' button is pressed and manually click in the application window so it has 'focus' before the script continues it runs without problem.
I am using window 'handles' for my processing (WIN_USEHANDLE=1)
Any ideas on why the Setfocus command is not working?
Custom Dialog / Setfocus issue
Moderators: Dorian (MJT support), JRL
I also do not have the problem if I use the 'ask' function. As a workaround, is there any way to specify the screen location of the 'Ask' function?
Doesn't this indicate that the problem might be with the Dialog?
The dialog is as follows:
Dialog>CER_FindOrd_Dialog1
object CER_FindOrd_Dialog1: TForm
Left = 247
Top = 96
HelpContext = 5000
BorderIcons = [biSystemMenu]
Caption = 'CustomDialog'
ClientHeight = 86
ClientWidth = 372
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
ShowHint = True
OnTaskBar = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 32
Height = 13
Caption = 'Label1'
end
object Label2: TLabel
Left = 8
Top = 32
Width = 286
Height = 13
Caption = 'Select the appropriate row in Cerner and then click '#39'Proceed'#39
end
object MSButton1: tMSButton
Left = 7
Top = 55
Width = 75
Height = 25
Caption = 'Proceed'
DoubleBuffered = True
ModalResult = 1
ParentDoubleBuffered = False
TabOrder = 0
DoBrowse = False
BrowseStyle = fbOpen
end
object MSButton2: tMSButton
Left = 87
Top = 54
Width = 75
Height = 25
Caption = 'Cancel'
DoubleBuffered = True
ModalResult = 2
ParentDoubleBuffered = False
TabOrder = 1
DoBrowse = False
BrowseStyle = fbOpen
end
end
EndDialog>CER_FindOrd_Dialog1
The code I run to call the dialog is as follows:
Let>Msg_Out=%XL_Nm%; %XL_ORD_Dt%; %XL_AccNbr%; %XL_ORD_Nm%
SetDialogProperty>CER_FindOrd_Dialog1,,Left,850
SetDialogProperty>CER_FindOrd_Dialog1,,Top,70
SetDialogProperty>CER_FindOrd_Dialog1,Label1,Caption,Msg_Out
Show>CER_FindOrd_Dialog1,CER_FindOrd_Dialog1_Rslt
If>CER_FindOrd_Dialog1_RsltMain_Exit
Goto>CFO_Exit
Endif
Doesn't this indicate that the problem might be with the Dialog?
The dialog is as follows:
Dialog>CER_FindOrd_Dialog1
object CER_FindOrd_Dialog1: TForm
Left = 247
Top = 96
HelpContext = 5000
BorderIcons = [biSystemMenu]
Caption = 'CustomDialog'
ClientHeight = 86
ClientWidth = 372
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
ShowHint = True
OnTaskBar = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 32
Height = 13
Caption = 'Label1'
end
object Label2: TLabel
Left = 8
Top = 32
Width = 286
Height = 13
Caption = 'Select the appropriate row in Cerner and then click '#39'Proceed'#39
end
object MSButton1: tMSButton
Left = 7
Top = 55
Width = 75
Height = 25
Caption = 'Proceed'
DoubleBuffered = True
ModalResult = 1
ParentDoubleBuffered = False
TabOrder = 0
DoBrowse = False
BrowseStyle = fbOpen
end
object MSButton2: tMSButton
Left = 87
Top = 54
Width = 75
Height = 25
Caption = 'Cancel'
DoubleBuffered = True
ModalResult = 2
ParentDoubleBuffered = False
TabOrder = 1
DoBrowse = False
BrowseStyle = fbOpen
end
end
EndDialog>CER_FindOrd_Dialog1
The code I run to call the dialog is as follows:
Let>Msg_Out=%XL_Nm%; %XL_ORD_Dt%; %XL_AccNbr%; %XL_ORD_Nm%
SetDialogProperty>CER_FindOrd_Dialog1,,Left,850
SetDialogProperty>CER_FindOrd_Dialog1,,Top,70
SetDialogProperty>CER_FindOrd_Dialog1,Label1,Caption,Msg_Out
Show>CER_FindOrd_Dialog1,CER_FindOrd_Dialog1_Rslt
If>CER_FindOrd_Dialog1_RsltMain_Exit
Goto>CFO_Exit
Endif
I don't know what might be causing your problem. I doubt that it's the dialog itself but stranger things have happened.
As you requested, here is a potential workaround with Ask>.
As you requested, here is a potential workaround with Ask>.
Code: Select all
Let>NewX=200
Let>NewY=100
Let>TempScript=%temp_dir%Temp~Move~Ask~Window.scp
WriteLn>TempScript,wres,WaitWindowOpen>Confirm
WriteLn>TempScript,wres,MoveWindow>Confirm,%NewX%,%NewY%
WriteLn>TempScript,wres,DeleteFile>%TempScript%
ExecuteFile>%TempScript%
Ask>test,res
I love the solution - very clever!
I set up MvAsk.scp as a 'permanent' rather than 'temporary' script and then ran the following code:
ExecuteFile>C:\Users\[usernm]\Documents\Macro Scheduler 12\MvAsk.scp
Ask>Msg_Out,AskResponse
If>%AskResponse%=NO
SkipLabel>Main_Exit
Goto>CFO_Exit
Endif
SetFocus>WinTile_Handle
Wait>5.00
With the 'ExecuteFile' statement uncommented the 'Confirm' window appears and gets moved - but the SetFocus doesn't work.
If I comment out the 'ExecuteFile' statement the script runs as expected - the 'Confirm' window just gets covered by the application window and has to be found again to continue.
I set up MvAsk.scp as a 'permanent' rather than 'temporary' script and then ran the following code:
ExecuteFile>C:\Users\[usernm]\Documents\Macro Scheduler 12\MvAsk.scp
Ask>Msg_Out,AskResponse
If>%AskResponse%=NO
SkipLabel>Main_Exit
Goto>CFO_Exit
Endif
SetFocus>WinTile_Handle
Wait>5.00
With the 'ExecuteFile' statement uncommented the 'Confirm' window appears and gets moved - but the SetFocus doesn't work.
If I comment out the 'ExecuteFile' statement the script runs as expected - the 'Confirm' window just gets covered by the application window and has to be found again to continue.
I add the following statements after the 'Wait>5.00' statement shown in my previous message.
GetActiveWindow>tst_title,tst_X,tst_Y,tst_W,tst_H
**breakpoint**
tst_title is equal to WinTitle_Handle, as if SetFocus worked. But on the screen itself, the window associated with WinTitle_Handle never obtains focus.
GetActiveWindow>tst_title,tst_X,tst_Y,tst_W,tst_H
**breakpoint**
tst_title is equal to WinTitle_Handle, as if SetFocus worked. But on the screen itself, the window associated with WinTitle_Handle never obtains focus.
- Marcus Tettmar
- Site Admin
- Posts: 7395
- Joined: Thu Sep 19, 2002 3:00 pm
- Location: Dorset, UK
- Contact:
Impossible for us to say without seeing/debugging your script as we only have snippets of it to go on. But I note you are setting focus to something contained in WinTileHandle but in your message you refer to WinTiTleHandle emphasis mine. They're not the same.
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar
Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar
Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?