Hi David,
I believe the issue involves whether this is a "modal" or "modeless" dialog.
I don't think I ever covered this in one of my classes (sorry about that
chief!).
I believe the default is "modal", which means your app stops all processing
when it hits the use of the Dialog() function, and picks back up when the
dialog is closed. This isn't quite true, but the sub/function which uses
the Dialog() command does indeed stop processing at this line until the
dialog is closed for modal dialogs.
More important to you, when using a modal dialog, no value is returned by
the Dialog() function to go into your variable "MyDialog" because processing
has stopped; so it's always set to "nothing", and when you test on it later,
even when the dialog is open, this is what it will contain.
To make this work the way you want, I think you just need to go into the XML
properties for the dialog and set "modal" to "no" (making it a modeless
dialog), and remove the line at the end of the sub which sets MyDialog back
to nothing (actually move it into your dialog handler, when the dialog is
closing, so the global variable doesn't get set back to nothing until the
dialog is closed).
Below is the documentation for the modal property, but I believe it may be
incorrect when it says that "no" is the default value.
Chip
modal
Specifies whether the dialog must be closed before interacting with the
calling application (i.e. a modal dialog) or whether the application can
receive user input even when the dialog is open (i.e. a modeless dialog).
Available options: Yes, No (default).
-Original Message-
From: Scripting
[mailto:scripting-bounces+lists3717=comcast@lists.window-eyes.com] On
Behalf Of David via Scripting
Sent: Friday, October 07, 2016 9:12 PM
To: GWScripting
Subject: Single Instance Dialog Issue
Got a challenge here. I want to make sure only ONE instance of my dialog
will be open, at any given time. The user will open the dialog with the
Hotkey Win-c. But even if he tabs away from the dialog, and then once
again hit Win-C, he should land in the already open dialog; not in a
brand new window. Just like, when you hit the Ctrl-Backslash, you always
land in one and same instance of the Window-Eyes Controlpanel.
Below you will find the cut-out of my code, that has to do with the
opening of the dialog. In my Opening sub, I do the lines:
MyDialog.window.Activate
MyDialog.window.Focus
But even this does not seem to fix my issue.
I am all learning ears, to any feedback you may have, or any good
practice that you may want to share on this part.
Thanks to all,
---Snip-it:
Sub HK1(myKeyId)
'This routine is called when the hotkey Alt-Windows-C is pressed.
If Keyboard.KeyDescriberActive Then
Speak myStrings(myKeyId & "_Description")
Else
'Main routine functionality goes here
Queue "OpenMyAppWin"
End IfKeyboard.KeyDescriberActive.
End Sub 'HK1.
Sub OpenMyAppWin()
Dim MyDialog: Set MyDialog = Nothing
' Bring up the dialog:
If MyDialog Is Nothing Then
Set MyDialog = Dialog( myXMLFile, "MyAppMainDialog",
"EHMainDialog")
Else
MyDialog.window.Activate
MyDialog.window.Focus
End If 'MyDialog Is Nothing.
' Room Cleaning:
Set MyDialog = Nothing
End Sub 'OpenMyAppWin.
Function EHMainDialog( dObj, dEvent, dId, dControl)
Blah-blah-blah...
End Function 'EHMainDialog.
---End Of Snip.
--
David
___
Any views or opinions presented in this email are solely those of the author
and do not necessarily represent those of Ai Squared.
For membership options, visit
http://lists.window-eyes.com/options.cgi/scripting-window-eyes.com/lists3717
%40comcast.net.
For subscription options, visit
http://lists.window-eyes.com/listinfo.cgi/scripting-window-eyes.com
List archives can be found at
http://lists.window-eyes.com/private.cgi/scripting-window-eyes.com
___
Any views or opinions presented in this email are solely those of the author
and do not necessarily represent those of Ai Squared.
For membership options, visit
http://lists.window-eyes.com/options.cgi/scripting-window-eyes.com/archive%40mail-archive.com.
For subscription options, visit
http://lists.window-eyes.com/listinfo.cgi/scripting-window-eyes.com
List archives can be found at
http://lists.window-eyes.com/private.cgi/scripting-window-eyes.com