WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Resize Dialog and Controls Dynamically

 Keywords: Resize Dialog Controls Dynamically Dialog Units Delta Change Size 

#DefineFunction ResizeExample(MyDialog_Handle,MyDialog_Message,MyDialog_Name,MyDialog_EventInfo,MyDialog_ChangeInfo)
   ON_EQUAL = @true                                         ; Initialize variable ON_EQUAL
   Switch MyDialog_Message                                  ; Switch based on Dialog Message type
        Case @deinit

         DialogProcOptions(MyDialog_Handle,@deresize,@true)
         DialogProcOptions(MyDialog_Handle,@depbpush,@true)
         DialogProcOptions(MyDialog_Handle,@dposysmenu, 4)

         ; Save offset values to use when calculating button positions.
         strRect       = DialogProcOptions(MyDialog_Handle,1007,-1)
         nDlgWidth     = ItemExtract(1, strRect, " ")
         nDlgHeight    = ItemExtract(2, strRect, " ")

         strRect       = DialogControlGet(MyDialog_Handle, "PushButton_OK", 17 )
         pnOkMidOff    = PtrPersistent(nOkMidOff, ItemExtract(1, strRect, " ") - (nDlgWidth/2))
         strRect       = DialogControlGet(MyDialog_Handle, "PushButton_Cancel", 17 )
         pnCanMidOff   = PtrPersistent(nCanMidOff, ItemExtract(1, strRect, " ") - (nDlgWidth/2))

         strRect       = DialogControlGet(MyDialog_Handle, "Resize_11", 17 )
         pnMidOff      = PtrPersistent(nMidOff, ItemExtract(1, strRect, " ") - (nDlgWidth/2))
         strRect       = DialogControlGet(MyDialog_Handle, "Resize_21", 17 )
         pnRightOff    = PtrPersistent(nRightOff, nDlgWidth - ItemExtract(1, strRect, " ") )

         pnAccumulator = PtrPersistent(nAccumulator, 0)

         ; Space text controls evenly so resize codes does not exagerate small spacing difference.
         nY = 0
         For x = 1 To 30
            strRect = DialogControlGet(MyDialog_Handle, "Resize_":x, 17 )
            If (x - 1) mod 10
               nY = nY + 23
               strRect = ItemReplace(nY , 2, strRect, " ")
               DialogControlSet(MyDialog_Handle,"Resize_":x, 17, strRect )
            Else
               nY = ItemExtract(2, strRect, " ")
            EndIf
         Next

           Return(@retdefault)

        Case @depbpush
           If MyDialog_Name == "PushButton_OK"                ; OK
              Return(@retdefault)

           ElseIf MyDialog_Name == "PushButton_Cancel"        ; Cancel
            Return(@retdefault)

           EndIf                                              ; MyDialog_Name
           Return(@retdefault)

     Case @deresize

         ; Changes
         nDeltaX    = ItemExtract(1,MyDialog_ChangeInfo, " ")
         nDeltaY    = ItemExtract(2,MyDialog_ChangeInfo, " ")
         nDlgWidth  = ItemExtract(3,MyDialog_ChangeInfo, " ")
         nDlgHeight = ItemExtract(4,MyDialog_ChangeInfo, " ")

         ; Retrieve statics
         pnOkMidOff     = PtrPersistent(nOkMidOff,  0)
         pnCanMidOff    = PtrPersistent(nCanMidOff, 0)
         pnLeftOff      = PtrPersistent(nLeftOff, 0)
         pnMidOff       = PtrPersistent(nMidOff, 0)
         pnRightOff     = PtrPersistent(nRightOff, 0)
         pnAccumulator  = PtrPersistent(nAccumulator, 0)
         *pnAccumulator = *pnAccumulator + nDeltaY

         bDoY           = Abs(*pnAccumulator) >= 9

         ; Move text controls
         For i = 1 To 30
            strRect = DialogControlGet(MyDialog_Handle, "Resize_":i, 17 )

            ; Adjust x coorinates?
            If i > 10 && i < 21
               strRect = ItemReplace(nDlgWidth/2+*pnMidOff , 1, strRect, " ")
            ElseIf i > 20
               strRect = ItemReplace(nDlgWidth - *pnRightOff, 1, strRect, " ")
            EndIf

            ; Adjust y coorinates?
            If bDoY
               nY      = ItemExtract(2, strRect, " ") + ((*pnAccumulator/9) * ((i - 1) mod 10))
               strRect = ItemReplace(nY , 2, strRect, " ")
            EndIf
            DialogControlSet(MyDialog_Handle, "Resize_":i, 17, strRect )
         Next

         ; Save remainder to prevent creep.
         If bDoY Then *pnAccumulator = *pnAccumulator mod 9

          ; Buttons stay more or less centered at the bottom of the dialog.
         strRect = DialogControlGet(MyDialog_Handle, "PushButton_OK", 17 )
         nY      = ItemExtract(2, strRect, " ")
         strRect = ItemReplace(nDlgWidth/2+*pnOkMidOff , 1, strRect, " ")
         strRect = ItemReplace(nY+nDeltaY, 2, strRect, " ")
         DialogControlSet(MyDialog_Handle, "PushButton_OK", 17, strRect )

         strRect = DialogControlGet(MyDialog_Handle, "PushButton_Cancel", 17 )
         nY      = ItemExtract(2, strRect, " ")
         strRect = ItemReplace(nDlgWidth/2+*pnCanMidOff, 1, strRect, " ")
         strRect = ItemReplace(nY+nDeltaY, 2, strRect, " ")
         DialogControlSet(MyDialog_Handle, "PushButton_Cancel", 17, strRect )

         Message("Change Info", MyDialog_ChangeInfo)
          Return(@retdefault)

   EndSwitch                                                ; MyDialog_Message
   Return(@retdefault)
#EndSubRoutine                                              ; End of Dialog Callback MyDialogCallbackProc



MyDialogFormat=`WWWDLGED,6.2`

MyDialogCaption=`Resize Example`
MyDialogX=587
MyDialogY=084
MyDialogWidth=284
MyDialogHeight=259
MyDialogMinWidth=200
MyDialogMinHeight=200
MyDialogNumControls=032
MyDialogProcedure=`ResizeExample`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,255|255|255`
MyDialogConfig=0

MyDialog001=`073,234,033,011,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,10,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`178,234,034,011,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`004,006,041,010,STATICTEXT,"Resize_1",DEFAULT,"",DEFAULT,30,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog004=`004,023,041,011,STATICTEXT,"Resize_2",DEFAULT,"",DEFAULT,40,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog005=`004,044,042,011,STATICTEXT,"Resize_3",DEFAULT,"",DEFAULT,50,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog006=`004,071,041,011,STATICTEXT,"Resize_4",DEFAULT,"",DEFAULT,60,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog007=`004,098,041,011,STATICTEXT,"Resize_5",DEFAULT,"",DEFAULT,70,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog008=`004,126,042,010,STATICTEXT,"Resize_6",DEFAULT,"",DEFAULT,80,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog009=`004,151,041,011,STATICTEXT,"Resize_7",DEFAULT,"",DEFAULT,90,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog010=`004,174,041,010,STATICTEXT,"Resize_8",DEFAULT,"",DEFAULT,100,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog011=`004,196,041,011,STATICTEXT,"Resize_9",DEFAULT,"",DEFAULT,110,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog012=`004,215,041,011,STATICTEXT,"Resize_10",DEFAULT,"",DEFAULT,120,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog013=`121,006,041,010,STATICTEXT,"Resize_11",DEFAULT,"",DEFAULT,130,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog014=`121,023,041,011,STATICTEXT,"Resize_12",DEFAULT,"",DEFAULT,140,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog015=`121,044,041,011,STATICTEXT,"Resize_13",DEFAULT,"",DEFAULT,150,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog016=`121,071,041,011,STATICTEXT,"Resize_14",DEFAULT,"",DEFAULT,160,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog017=`121,098,041,011,STATICTEXT,"Resize_15",DEFAULT,"",DEFAULT,170,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog018=`121,126,041,010,STATICTEXT,"Resize_16",DEFAULT,"",DEFAULT,180,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog019=`121,151,041,011,STATICTEXT,"Resize_17",DEFAULT,"",DEFAULT,190,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog020=`121,174,041,010,STATICTEXT,"Resize_18",DEFAULT,"",DEFAULT,200,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog021=`121,196,041,011,STATICTEXT,"Resize_19",DEFAULT,"",DEFAULT,210,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog022=`121,215,041,011,STATICTEXT,"Resize_20",DEFAULT,"",DEFAULT,220,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog023=`236,006,041,010,STATICTEXT,"Resize_21",DEFAULT,"",DEFAULT,230,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog024=`236,023,041,011,STATICTEXT,"Resize_22",DEFAULT,"",DEFAULT,240,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog025=`236,044,041,011,STATICTEXT,"Resize_23",DEFAULT,"",DEFAULT,250,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog026=`236,071,041,011,STATICTEXT,"Resize_24",DEFAULT,"",DEFAULT,260,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog027=`236,098,041,010,STATICTEXT,"Resize_25",DEFAULT,"",DEFAULT,270,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog028=`236,126,041,011,STATICTEXT,"Resize_26",DEFAULT,"",DEFAULT,280,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog029=`236,151,041,011,STATICTEXT,"Resize_27",DEFAULT,"",DEFAULT,290,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog030=`236,174,041,010,STATICTEXT,"Resize_28",DEFAULT,"",DEFAULT,300,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog031=`236,196,041,011,STATICTEXT,"Resize_29",DEFAULT,"",DEFAULT,310,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`
MyDialog032=`236,215,041,011,STATICTEXT,"Resize_30",DEFAULT,"",DEFAULT,320,DEFAULT,DEFAULT,DEFAULT,"255|0|128"`

ButtonPushed=Dialog("MyDialog")


Article ID:   W17761
Filename:   Resize Dialog and Controls Dynamically.txt
File Created: 2020:06:24:13:24:52
Last Updated: 2020:06:24:13:24:52