Advertisement
AZJIO

цвет+NOTIFY спектр

Dec 24th, 2011
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 3.98 KB | None | 0 0
  1. #include <WinAPI.au3>
  2. #include <WindowsConstants.au3>
  3.  
  4. Global Const $GUI_RUNDEFMSG = 'GUI_RUNDEFMSG'
  5. Global $btn1, $btn2, $iMemo=0, $Button1, $aHSB[3]=[0,0,0]
  6.  
  7.  
  8. $Gui=GUICreate('My Program', 250, 260)
  9. $Button1=GUICtrlCreateButton('Start', 10, 10, 120, 22)
  10. $Label1=GUICtrlCreateLabel('StatusBar', 5, 260-20, 150, 17)
  11. GUISetState()
  12. GUIRegisterMsg(0x004E, "WM_NOTIFY")
  13.  
  14. While 1
  15.     $msg = GUIGetMsg()
  16.         If $iMemo=2 Then
  17.             $iMemo=0
  18.             _MsgFile($Button1)
  19.         EndIf
  20.     Switch $msg
  21.         Case -3
  22.              Exit
  23.     EndSwitch
  24. WEnd
  25.  
  26. Func _MsgFile($ctrl)
  27. $cgp=ControlGetPos($Gui, "", $ctrl)
  28. $tpoint = DllStructCreate("int X;int Y")
  29. _WinAPI_ClientToScreen($Gui, $tpoint)
  30. $x=DllStructGetData($tpoint, "X")+$cgp[0]
  31. $y=DllStructGetData($tpoint, "Y")+$cgp[1]+$cgp[3]
  32.  
  33. Local $EditBut, $Gui1, $GuiPos, $msg, $StrBut
  34.     ; GUISetState(@SW_DISABLE, $Gui)
  35.  
  36.     $Gui1 = GUICreate('Сообщение', 22*7, 22*5,$x, $y, $WS_POPUP+$WS_DLGFRAME,-1,$Gui)
  37.     Dim $aWord[36]
  38.     $aWord[0]=35
  39.     Local $aBt[$aWord[0]+1]
  40.  
  41.  
  42.     $aHSB[1]=100
  43.     $aHSB[2]=100
  44.  
  45.     For $i = 1 to $aWord[0]
  46.  
  47.         $aHSB[0]=$i*10
  48.         $aRGB=_HSB_2_RGB($aHSB)
  49.         $aWord[$i]=StringTrimLeft($aRGB[0], 6) & StringTrimLeft($aRGB[1], 6) & StringTrimLeft($aRGB[2], 6)
  50.  
  51.     $gcm=Opt("GUICoordMode", 2)
  52.     Switch $i
  53.         Case 8,15,22,29
  54.             $aBt[$i]=GUICtrlCreateLabel('', -22*7, 0, 22, 22)
  55.             GUICtrlSetBkColor(-1, Dec($aWord[$i]))
  56.         Case 1
  57.             $aBt[$i]=GUICtrlCreateLabel('', 1, 2, 22, 22)
  58.             GUICtrlSetBkColor(-1, Dec($aWord[$i]))
  59.         Case Else
  60.             $aBt[$i]=GUICtrlCreateLabel('', 0, -1, 22, 22)
  61.             GUICtrlSetBkColor(-1, Dec($aWord[$i]))
  62.     EndSwitch
  63.     Opt("GUICoordMode", $gcm)
  64.     Next
  65.     GUISetState(@SW_SHOW, $Gui1)
  66.  
  67.     While 1
  68.         $msg = GUIGetMsg()
  69.         For $i = 1 to $aWord[0]
  70.             If $msg = $aBt[$i] Then
  71.                 GUICtrlSetData($Button1, $aWord[$i])
  72.                 GUICtrlSetBkColor($Gui, Dec($aWord[$i]))
  73.                 GUISetBkColor(Dec($aWord[$i]), $Gui)
  74.                 ExitLoop 2
  75.             EndIf
  76.         Next
  77.         If $iMemo=1 Then
  78.             $Gui1ci=GUIGetCursorInfo($Gui1)
  79.             ; GUICtrlSetData($Label1, $Gui1ci[0])
  80.             If $Gui1ci[0]<-2 Or $Gui1ci[1]<-5 Or $Gui1ci[0]>154 Or $Gui1ci[1]>110 Then
  81.                 $iMemo=0
  82.                 ExitLoop
  83.             EndIf
  84.         EndIf
  85.     WEnd
  86.     ; GUISetState(@SW_ENABLE, $Gui)
  87.     GUIDelete($Gui1)
  88. EndFunc
  89.  
  90.  
  91.  
  92. Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
  93.  
  94.     #forceref $hWnd, $Msg, $wParam
  95.     ; If $hWnd<>$Gui Then Return $GUI_RUNDEFMSG
  96.     Local Const $BCN_HOTITEMCHANGE = -1249
  97.     Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
  98.     Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code")
  99.     Local $nID = DllStructGetData($tNMBHOTITEM, "IDFrom")
  100.     Local $hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom")
  101.     Local $dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")
  102.     Local $sText = ""
  103.  
  104.     If $nID = $Button1 Then
  105.         Switch $nNotifyCode
  106.             Case $BCN_HOTITEMCHANGE ; Win XP and Above
  107.                 If BitAND($dwFlags, 0x10) = 0x10 Then
  108.                     $iMemo=2
  109.                 ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
  110.                     $iMemo=1
  111.                 EndIf
  112.         EndSwitch
  113.     EndIf
  114.     Return $GUI_RUNDEFMSG
  115. EndFunc
  116.  
  117.  
  118. Func _HSB_2_RGB($aHSB)
  119.     Local $min, $max, $aRGB[3]
  120.  
  121.     $aHSB[2]/=100
  122.  
  123.     If $aHSB[1] = 0 Then
  124.         $aRGB[0]=Hex(Round($aHSB[2]*255))
  125.         $aRGB[1]=$aRGB[0]
  126.         $aRGB[2]=$aRGB[0]
  127.         Return $aRGB
  128.     EndIf
  129.  
  130.     While $aHSB[0]>=360
  131.         $aHSB[0]-=360
  132.     WEnd
  133.  
  134.     $aHSB[1]/=100
  135.     $aHSB[0] /= 60
  136.     $Sector=Int($aHSB[0])
  137.  
  138.     $f=$aHSB[0] - $Sector
  139.     $p=$aHSB[2]*(1-$aHSB[1])
  140.     $q=$aHSB[2]*(1-$aHSB[1]*$f)
  141.     $t=$aHSB[2]*(1-$aHSB[1]*(1-$f))
  142.  
  143.     Switch $Sector
  144.         Case 0
  145.            $aRGB[0]=$aHSB[2]
  146.            $aRGB[1]=$t
  147.            $aRGB[2]=$p
  148.         Case 1
  149.            $aRGB[0]=$q
  150.            $aRGB[1]=$aHSB[2]
  151.            $aRGB[2]=$p
  152.         Case 2
  153.            $aRGB[0]=$p
  154.            $aRGB[1]=$aHSB[2]
  155.            $aRGB[2]=$t
  156.         Case 3
  157.            $aRGB[0]=$p
  158.            $aRGB[1]=$q
  159.            $aRGB[2]=$aHSB[2]
  160.         Case 4
  161.            $aRGB[0]=$t
  162.            $aRGB[1]=$p
  163.            $aRGB[2]=$aHSB[2]
  164.         Case Else
  165.            $aRGB[0]=$aHSB[2]
  166.            $aRGB[1]=$p
  167.            $aRGB[2]=$q
  168.     EndSwitch
  169.  
  170.    $aRGB[0]=Hex(Round($aRGB[0]*255))
  171.    $aRGB[1]=Hex(Round($aRGB[1]*255))
  172.    $aRGB[2]=Hex(Round($aRGB[2]*255))
  173.  
  174.     Return $aRGB
  175. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement