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.

Background Colors - Slowly Shifting

This example has slowly shifting background colors for an interesting dialog. It uses Dialog Callback routines.
; shlw_colors.wbt
#DefineFunction shlwRGBToHLS(rgb)

  r = ItemExtract(1,rgb,"|")
  g = ItemExtract(2,rgb,"|")
  b = ItemExtract(3,rgb,"|")

  ;rgb = (b << 8 + g) << 8 + r   ; incorrect!

  rgb = (b*256*256 + g*256 + r) ; make a COLORREF

  bb = BinaryAlloc(6)
  BinaryEodSet(bb,6)
  pwH = IntControl(42,bb,0,0,0) + 0
  pwL = IntControl(42,bb,0,0,0) + 2
  pwS = IntControl(42,bb,0,0,0) + 4

  DllCall(StrCat(DirWindows(1),"shlwapi.dll"), void:"ColorRGBToHLS", long:rgb, long:pwH, long:pwL, long:pwS)

  arr = ArrDimension(3)
  arr[0] = BinaryPeek2(bb,0) ; H
  arr[1] = BinaryPeek2(bb,2) ; L
  arr[2] = BinaryPeek2(bb,4) ; S

  BinaryFree(bb)
  Return arr

#EndFunction

#DefineFunction shlwHLSToRGB(hls)

  h = hls[0]
  l = hls[1]
  s = hls[2]

  rgb = DllCall(StrCat(DirWindows(1),"shlwapi.dll"), long:"ColorHLSToRGB", word:h, word:l, word:s)

  ;; incorrect!
  ;r = rgb       & 255
  ;g = rgb >> 8  & 255
  ;b = rgb >> 16 & 255

  ; decode the COLORREF
  r = rgb & 255
  g = (rgb & (255 * 256)) / 256
  b = (rgb & (255 * 256 * 256)) / (256 * 256)

  rgb = StrCat(r,"|",g,"|",b)
  Return rgb

#EndFunction

#DefineFunction shlwAdjustLuma(rgb,n,flag)
  ;n is 
  ;   Luminance in units of 0.1 percent of the total range. For 
  ;   example, a value of n = 50 corresponds to 5 percent of the 
  ;   maximum luminance. 
  ;fScale is 
  ;   If fScale is set to TRUE, n specifies how much to increment 
  ;   or decrement the current luminance. If fScale is set to FALSE, 
  ;   n specifies the absolute luminance. 

  r = ItemExtract(1,rgb,"|")
  g = ItemExtract(2,rgb,"|")
  b = ItemExtract(3,rgb,"|")

  rgb = (b*256*256 + g*256 + r) ; make a COLORREF

  rgb = DllCall(StrCat(DirWindows(1),"shlwapi.dll"), long:"ColorAdjustLuma", long:rgb, long:n, long:flag)

  ; decode the COLORREF
  r = rgb & 255
  g = (rgb & (255 * 256)) / 256
  b = (rgb & (255 * 256 * 256)) / (256 * 256)

  rgb = StrCat(r,"|",g,"|",b)
  Return rgb

#EndFunction

#DefineSubRoutine ExampleProc(DialogHandle, EventCode, ControlNum, Res4, Res5)
Switch( EventCode)
    Case 0
      DialogProcOptions(DialogHandle, 1, 100)         ; timer events
      Return -2
    Case 1
      rgb = DialogProcOptions(DialogHandle, 1001, -1) ; get the color
      aHLS = shlwRGBToHLS(rgb)                        ; convert to HLS
      aHLS[0] = aHLS[0] + 3                           ; incrememt the hue
      rgb = shlwHLSToRGB(aHLS)                        ; convert back to RGB
      DialogProcOptions(DialogHandle, 1001, rgb)      ; set the color
      Return -2
EndSwitch
#EndSubRoutine


MyDialogFormat=`WWWDLGED,6.1`

MyDialogCaption=`Color has low saturation, medium brightness, and rotating hue`
MyDialogX=073
MyDialogY=070
MyDialogWidth=344
MyDialogHeight=182
MyDialogNumControls=002
MyDialogProcedure=`ExampleProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,187|173|168`
MyDialogConfig=4513660

MyDialog001=`091,161,036,012,PUSHBUTTON,DEFAULT,"OK",1,1,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`217,161,036,012,PUSHBUTTON,DEFAULT,"Cancel",0,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")

Exit

Article ID:   W15911
File Created: 2004:03:30:15:41:42
Last Updated: 2004:03:30:15:41:42