Advertisement
wuuyi123

Icon Control

Sep 13th, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 6.20 KB | None | 0 0
  1. #include-once
  2. #cs
  3. Tên hàm........:  - _IconCtrl_Create
  4. Mô tả..........: - Tạo icon control bao gồm tên/chữ cái, icon được lấy từ tệp hình ảnh (*.bmp, *.png, *.jpg,...) và biểu tượng (*.ico), có hỗ trợ nền trong suốt.
  5.                     - Control này có chức năng hover, và có thể sử dụng như một control bình thường tạo ra từ GUICtrlCreate...
  6.                     - Lưu ý phải thêm hàm _GDIPlus_Startup() để không bị lỗi.
  7. Cú pháp........:  _IconCtrl_Create($Text, $Image, $Left, $Top, $Width, $Height, [$IconSize = 40, [$Fore = 0xFF000000, [$Back = 0xFFFFFFFF, [$Mask = 0xFF1090F0, [$Font = "Segoe UI", [$Size = 8, [$Style = 1]]]]]]])
  8. Tham số........:  - $Text  - Chuỗi kí tự, tên gán vào icon.
  9.                     - $Image - Đường dẫn đến tệp hình ảnh, biểu tượng.
  10.                     - $Left, $Top - Vị trí offset trong GUI.
  11.                     - $Width, $Height - Kích cỡ control.
  12.                     - $IconSize [optinal] - Kích cỡ của icon.
  13.                     - $Fore [optional]  - Màu của chữ (dạng ARGB).
  14.                     - $Back [optional]  - Màu nền, nên dùng trùng với màu GUI (dạng ARBG).
  15.                     - $Mask [optional]  - Phần màu phủ lên control khi hover.
  16.                     - $Font [optional]  - Tên font chữ:
  17.                         Segoe UI - Font mặc định
  18.                     - $Size [optinal]  - Kích thước font chữ:
  19.                         9 - Cỡ mặc định
  20.                     - $Style [optional]  - Kiểu chữ:
  21.                         0 - Bình thường.
  22.                         1 - In đậm (mặc định).
  23.                         2 - In nghiêng.
  24.                         4 - Gạch chân.
  25.                         8 - Gạch ngang giữa.
  26. Giá trị trả về.: - Control ID - Mã ID của control.
  27. Author.........:    by  fb.com/wuuyi123
  28. -------------------------------------------------------------
  29. Tên hàm........:  - _IconCtrl_SetText($Ctrl, $Text)
  30.                     - Thay đổi text cho icon control.
  31.  
  32. Tên hàm........:  - _IconCtrl_SetColor($Ctrl, $Fore, $Back = -1, $Mask = -1)
  33.                     - Thay đổi màu cho icon control.
  34.  
  35. Tên hàm........:  - _IconCtrl_SetFont($Ctrl, $Font, $Size = -1, $Style = -1)
  36.                     - Thay đổi font cho icon control.
  37. #ce
  38.  
  39.  
  40.  
  41. #include <GDIPlus.au3>
  42. #include <Array.au3>
  43. #include "GUICtrlOnHover.au3"
  44.  
  45. Global $__aIconCtrlList[1] = [0]
  46. Global Const $__tStrIcon =  "hwnd hwnd;int ctrl;wchar text[255];" & _
  47.                             "int width;int height;int fore;int back;" & _
  48.                             "wchar font[255];byte size;byte style;" & _
  49.                             "wchar image[500];int iconsize;int mask;"
  50.  
  51. Func _IconCtrl_Create($Text, $Image, $Left, $Top, $Width, $Height, $IconSize = 40, $Fore = 0xFF000000, $Back = 0xFFFFFFFF, $Mask = 0xFF1090F0, $Font = "Segoe UI", $Size = 8, $Style = 1)
  52.     Local $Str = DllStructCreate($__tStrIcon)
  53.     _ArrayAdd($__aIconCtrlList, $Str)
  54.     $__aIconCtrlList[0] += 1
  55.  
  56.     $Str.text = $Text
  57.     $Str.fore = $Fore
  58.     $Str.back = $Back
  59.     $Str.mask = $Mask
  60.     $Str.font = $Font
  61.     $Str.size = $Size
  62.     $Str.style = $Style
  63.     $Str.image = $Image
  64.     $Str.width = $Width
  65.     $Str.height = $Height
  66.     $Str.iconsize = $IconSize
  67.  
  68.     $Str.ctrl = GUICtrlCreatePic("", $Left, $Top, $Width, $Height)
  69.     GUICtrlSetState($Str.ctrl, 16)
  70.     GUICtrlSetCursor($Str.ctrl, 0)
  71.  
  72.     __DrawTextIcon($Str)
  73.     _GUICtrl_OnHoverRegister($Str.ctrl, "_RenderIcon", "_RenderIcon")
  74.     Return $Str.ctrl
  75. EndFunc
  76.  
  77. Func _IconCtrl_SetText($Ctrl, $Text)
  78.     Local $Struct = __GetStructFromCtrl($Ctrl)
  79.     $Struct.text = $Text
  80.     __DrawTextIcon($Struct)
  81. EndFunc
  82.  
  83. Func _IconCtrl_SetColor($Ctrl, $Fore, $Back = -1, $Mask = -1)
  84.     Local $Struct = __GetStructFromCtrl($Ctrl)
  85.  
  86.     $Struct.fore = $Fore
  87.     If Not $Back = -1 Then $Struct.back = $Back
  88.     If Not $Mask = -1 Then $Struct.mask = $Mask
  89.  
  90.     __DrawTextIcon($Struct)
  91. EndFunc
  92.  
  93. Func _IconCtrl_SetFont($Ctrl, $Font, $Size = -1, $Style = -1)
  94.     Local $Struct = __GetStructFromCtrl($Ctrl)
  95.  
  96.     $Struct.font = $Font
  97.     If Not $Size = -1 Then $Struct.size = $Size
  98.     If Not $Style = -1 Then $Struct.style = $Style
  99.  
  100.     __DrawTextIcon($Struct)
  101. EndFunc
  102.  
  103. ;==================================================================================================
  104. Func __GetStructFromCtrl($Ctrl)
  105.     Local $Struct
  106.  
  107.     If $__aIconCtrlList[0] = 0 Then Return False
  108.     For $i = $__aIconCtrlList[0] To 1 Step -1
  109.         $Struct = $__aIconCtrlList[$i]
  110.         If $Struct.ctrl == $Ctrl Then Return $Struct
  111.     Next
  112.  
  113.     Return False
  114. EndFunc
  115.  
  116. Func _RenderIcon($Ctrl, $Mode)
  117.     Local $Struct = __GetStructFromCtrl($Ctrl)
  118.     __DrawTextIcon($Struct, $Mode)
  119. EndFunc
  120.  
  121. Func __DrawTextIcon($Struct, $Mode = 0)
  122.     If Not IsDllStruct($Struct) Then Return
  123.     Local $Size = $Struct.iconsize
  124.     Local $tBmp = _GDIPlus_BitmapCreateFromScan0($Struct.width, $Struct.height)
  125.     Local $hGfx = _GDIPlus_ImageGetGraphicsContext($tBmp)
  126.     _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 5)
  127.     _GDIPlus_GraphicsClear($hGfx, $Struct.back)
  128.  
  129.     Local $hImg = _GDIPlus_ImageLoadFromFile($Struct.image)
  130.     $hImg = _GDIPlus_ImageResize($hImg, $Size, $Size)
  131.     Local $iW = Round($Size/2), $OffX = Round($Struct.width/2-$iW), $OffY = Round($OffX/2)
  132.     _GDIPlus_GraphicsDrawImage($hGfx, $hImg, $OffX, $OffY)
  133.  
  134.     __DrawText($hGfx, $Struct.text, $Struct.width, $Struct.height, $Struct.fore, $Struct.font, $Struct.size, $Struct.style)
  135.  
  136.     If $Mode = 1 Then
  137.         _GDIPlus_GraphicsClear($hGfx, $Struct.mask - 0xE0000000)
  138.         Local $hPen = _GDIPlus_PenCreate($Struct.mask, 2)
  139.         _GDIPlus_GraphicsDrawRect($hGfx, 0, 0, $Struct.width, $Struct.height, $hPen)
  140.         _GDIPlus_PenDispose($hPen)
  141.     EndIf
  142.  
  143.     _GDIPlus_ImageDispose($hImg)
  144.     Local $hBmp = _GDIPlus_BitmapCreateDIBFromBitmap($tBmp)
  145.     _WinAPI_DeleteObject(GUICtrlSendMsg($Struct.ctrl, 0x172, 0, $hBmp))
  146.     _GDIPlus_GraphicsDispose($hGfx)
  147.     _GDIPlus_BitmapDispose($tBmp)
  148.     _WinAPI_DeleteObject($hBmp)
  149. EndFunc
  150.  
  151. Func __DrawText($hGraphic, $Text, $Width, $Height, $Color = 0xFF000000, $Font = "Segoe UI", $Size = 8, $Style = 1)
  152.     Local $hFormat = _GDIPlus_StringFormatCreate()
  153.     Local $hFamily = _GDIPlus_FontFamilyCreate($Font)
  154.     Local $hFont =  _GDIPlus_FontCreate($hFamily, $Size, $Style)
  155.     Local $tLayout = _GDIPlus_RectFCreate(0, 0, $Width, $Height)
  156.     _GDIPlus_StringFormatSetAlign($hFormat, 1)
  157.     _GDIPlus_StringFormatSetLineAlign($hFormat, 2)
  158.     Local $hBrush = _GDIPlus_BrushCreateSolid($Color)
  159.     _GDIPlus_GraphicsDrawStringEx($hGraphic, $Text, $hFont, $tLayout, $hFormat, $hBrush)
  160.     _GDIPlus_StringFormatDispose($hFormat)
  161.     _GDIPlus_FontFamilyDispose($hFamily)
  162.     _GDIPlus_FontDispose($hFont)
  163.     _GDIPlus_BrushDispose($hBrush)
  164. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement