viewpoint-particle

Author Topic: Dialog in Dialog position  (Read 435 times)

erezpaz

  • Newbie
  • *
  • Posts: 44
Dialog in Dialog position
« on: June 22, 2017, 07:38:50 am »
Hi,

I opening dialog inside an existing dialog. I am using Dialog1X=-01 Dialog1Y=-01 to poison the dialog in the middle. When i open the second dialog inside the first one it is position in the upper left corner instead of the center of the screen. It does not relate to the actual screen. Can i change that?

Thanks

td

  • Tech Support
  • *****
  • Posts: 2159
    • WinBatch
Re: Dialog in Dialog position
« Reply #1 on: June 22, 2017, 11:26:34 am »
Use -1 for x and y in the second dialog if you want it to always appear in the center of the screen.  If you want the second dialog to appear in some position relative to the current position of the first dialog then query the position of the first dialog and adjust the position of the second dialog accordingly.   

One approach to positioning the second dialog relative to the first involves  using the WinPlace and WinPosition functions. 
"Success is a lousy teacher. It seduces smart people into thinking they can't lose."
  - Bill Gates


td

  • Tech Support
  • *****
  • Posts: 2159
    • WinBatch
Re: Dialog in Dialog position
« Reply #2 on: June 22, 2017, 12:13:57 pm »
Here is a very crude example of relative positioning.  These is not the only way to accomplish the task:

Code: Winbatch
; Inner UDS
#DefineSubroutine InnerCallbackProc(Inner_Handle,Inner_Message,Inner_Name,Inner_EventInfo,Inner_ChangeInfo)
   if  Inner_Message == @deInit ; Standard Initialization message
      strPosition = WinPosition(OuterCaption)
      nX = ItemExtract(1,strPosition,',') + 50 ; Move right 50.
      nY = ItemExtract(2,strPosition,',') + 40 ; Move down 40.
      WinPlace(nX, nY, @NORESIZE, @NORESIZE, InnerCaption )
   endif
   return @retDefault
#EndSubroutine      

InnerFormat=`WWWDLGED,6.2`

InnerCaption=`Inter Test`
InnerX=200
InnerY=200
InnerWidth=128
InnerHeight=084
InnerNumControls=003
InnerProcedure=`InnerCallbackProc`
InnerFont=`DEFAULT`
InnerTextColor=`DEFAULT`
InnerBackground=`DEFAULT,DEFAULT`
InnerConfig=2

Inner001=`025,066,030,011,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,10,@csDefButton,DEFAULT,DEFAULT,DEFAULT`
Inner002=`068,066,033,011,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
Inner003=`009,022,108,033,STATICTEXT,"StaticText_1",DEFAULT,"Hello World",DEFAULT,30,DEFAULT,"Microsoft Sans Serif|8192|40|34",DEFAULT,DEFAULT`

ButtonPushed=Dialog("Inner",0) ; WinBatch will not display this dialog.


;; Dummy data
mlVariable1 = ''
for x = 0 to 24
   mlVariable1 := x:@CRLF
next

; Outer UDS
#DefineSubroutine OuterCallbackProc(Outer_Handle,Outer_Message,Outer_Name,Outer_EventInfo,Outer_ChangeInfo)
   switch Outer_Message                              
      case @deInit                                      
         DialogProcOptions(Outer_Handle,@dePbPush,@TRUE)
         return(@retDefault)

      case @dePbPush
         if Outer_Name == "PushButton_OK"            
            Dialog("Inner")
              return(@retnoexit )
         endif                                            
   endswitch                                            
   return(@retDefault)
#EndSubroutine                                          

OuterFormat=`WWWDLGED,6.2`

OuterCaption=`Scroll Test`
OuterX=10
OuterY=10
OuterWidth=284
OuterHeight=203
OuterNumControls=003
OuterProcedure=`OuterCallbackProc`
OuterFont=`DEFAULT`
OuterTextColor=`DEFAULT`
OuterBackground=`DEFAULT,DEFAULT`
OuterConfig=0

Outer001=`073,186,033,011,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,10,32,DEFAULT,DEFAULT,DEFAULT`
Outer002=`178,186,034,011,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
Outer003=`004,049,275,113,MULTILINEBOX,"Multiline_1a",mlVariable1,DEFAULT,DEFAULT,30,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("Outer")
"Success is a lousy teacher. It seduces smart people into thinking they can't lose."
  - Bill Gates


erezpaz

  • Newbie
  • *
  • Posts: 44
Re: Dialog in Dialog position
« Reply #3 on: June 23, 2017, 01:44:20 am »
That's worked. Thanks.
I got another question in the same issue, if i want to gray out the first dialog while presenting the second so user will be focused in the dialog presented to him. How can i do that without going over all the controls and disabling them?

Thanks

td

  • Tech Support
  • *****
  • Posts: 2159
    • WinBatch
Re: Dialog in Dialog position
« Reply #4 on: June 23, 2017, 05:55:41 am »
If you look at the first dialog when the second is displaying, you will notice that the title bar of the first has a dimmed appearance.  This is because the first or parent dialog is automatically disabled when the second or child dialog is displayed.  To do more that that you could consider giving the individual controls in the parent dialog the disabled appearance by doing something like the following:

Code: Winbatch
         if Outer_Name == "PushButton_OK"
            DialogControlState(Outer_Handle,"Multiline_1a", @dcsAddStyle, @csDisabled)  
            DialogControlState(Outer_Handle,"PushButton_OK", @dcsAddStyle, @csDisabled)  
            DialogControlState(Outer_Handle,"PushButton_Cancel", @dcsAddStyle, @csDisabled)  
            Dialog("Inner")
            DialogControlState(Outer_Handle,"Multiline_1a", @dcsRemStyle, @csDisabled)  
            DialogControlState(Outer_Handle,"PushButton_OK", @dcsRemStyle, @csDisabled)  
            DialogControlState(Outer_Handle,"PushButton_Cancel", @dcsRemStyle, @csDisabled)  

              return(@retnoexit )
         endif                                            
 

Another option might be to change the parent dialog's background using the DialogProcOptions function's request @dpoBkground .
"Success is a lousy teacher. It seduces smart people into thinking they can't lose."
  - Bill Gates


erezpaz

  • Newbie
  • *
  • Posts: 44
Re: Dialog in Dialog position
« Reply #5 on: June 25, 2017, 11:03:29 am »
Hi,

I did that. In Reportview control the text keep black color. So i used DialogControlSet to change the @dcTextColor. It work fine for the text inside the Reportview but the test in the Reportview header is still black. Didn't find a way to grey it also. How can i do that?

Thanks

td

  • Tech Support
  • *****
  • Posts: 2159
    • WinBatch
Re: Dialog in Dialog position
« Reply #6 on: June 25, 2017, 12:31:42 pm »
You can always try changing the background color.
"Success is a lousy teacher. It seduces smart people into thinking they can't lose."
  - Bill Gates


erezpaz

  • Newbie
  • *
  • Posts: 44
Re: Dialog in Dialog position
« Reply #7 on: June 26, 2017, 05:26:17 am »
Hi

I created a new function that disable or enable all controls ass needed. I got around 40 control in the dialog. The issue now is when i do disable it happen very fast. less then half a second. When i do enable it take around 3 seconds. This is a lot of time and look faltering or a bug. How can i speed up the enable of the controls?

Thanks

td

  • Tech Support
  • *****
  • Posts: 2159
    • WinBatch
Re: Dialog in Dialog position
« Reply #8 on: June 26, 2017, 06:40:12 am »
Forty controls isn't that many and it shouldn't take any longer to enable a set of controls than it takes to disable them.   You likely have  some kind of bug in your script.   Using the WinBatch Studio debugger to step though you script can be a quick way to find the problem. 
"Success is a lousy teacher. It seduces smart people into thinking they can't lose."
  - Bill Gates