Hey grüßt euch,
ich möchte eine Art extended Listview mit Checkboxen und Edit Controls bauen. Ich bin soweit, dass ich die Controls integriert habe, allerdings werden die Edit Controls nicht wie die Checkboxen gezeichnet werden sondern mit _WinAPI_CreateWindowEx erstellt werden. Dementsprechend werden die Edits beim scrollen nicht neu gezeichnet und so bleiben die Edits immer On Top, also verschwinden nicht beim Scrollen. Hat jemand eine Idee wie ich das lösen kann?
#include <Array.au3>
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <GuiEdit.au3>
#include <Constants.au3>
#include <WinAPIEx.au3> ; from <a href='http://www.autoitscript.com/forum/topic/98712-winapiex-udf/' class='bbc_url' title=''>http://www.autoitscript.com/forum/topic/98712-winapiex-udf/</a>
Global $aProgress[1][4] ; stores handles of edit controls
Global Const $ODT_LISTVIEW = 102
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $SW_HIDE = 0
Global Const $SW_SHOW = 5
; ####################################
; adjustment of the icon positioning, according to windows version
Global $iAdjustV = 0
If $__WINVER > 0x0600 Then $iAdjustV = 1 ; $__WINVER defined in WinAPIEx, $__WINVER > 0x0600 means Vista+
; ####################################
; WM_MEASUREITEM allows setting the row height
Global $iListView_row_height, $hIml_Listview, $hListView
GUIRegisterMsg($WM_MEASUREITEM, "WM_MEASUREITEM") ; place before listview creation - message sent once for each ownerdrawn control created
Global $ids = 101
$hGUI = GUICreate("ListView Set Item State", 700, 300)
$cButton_CheckAll = GUICtrlCreateButton("Check All", 10, 275, 100, 20)
$cButton_UncheckAll = GUICtrlCreateButton("UnCheck All", 120, 275, 100, 20)
$cButton_StatesToArray = GUICtrlCreateButton("States to Array", 230, 275, 100, 20)
$iListView_row_height = 25
$checkbox_column = 2
$edit_column = 3
_GDIPlus_Startup()
$cListView = _GUICtrlCreateListViewEx("", 2, 2, 394, 268)
; Add columns
_GUICtrlListView_AddColumn($hListView, " ", 0)
For $i = 1 To 3
_GUICtrlListView_AddColumn($hListView, "Column " & $i, 100)
Next
Local $aItems[30][4]
For $row = 0 To 29
$aItems[$row][0] = "this won't show up"
$aItems[$row][1] = ""
$aItems[$row][2] = "Row " & $row & ": Col 2"
;~ $aItems[$row][3] = "Row " & $row & ": Col 3"
; _ListView_InsertEdit($hListView, $row, $edit_column)
Next
; only for testing
For $row = 0 To 29
_ListView_InsertEdit($hListView, $row, $edit_column)
Next
_GUICtrlListView_DeleteAllItems($hListView)
__GUI_ListView_Add_Array($hListView, $aItems) ; workaround
; -----------------------------------------------------------
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
GUISetState()
; Loop until user exits
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $cButton_CheckAll
_LV_ImgCheckboxes_CheckAll($hListView)
Case $cButton_UncheckAll
_LV_ImgCheckboxes_UncheckAll($hListView)
Case $cButton_StatesToArray
$aLVStates = _LV_ImgCheckboxes_StatesToArray($hListView)
_ArrayDisplay($aLVStates)
EndSwitch
WEnd
GUIDelete()
_GUIImageList_Destroy($hIml_Listview)
_GDIPlus_Shutdown()
Exit
Func __GUI_ListView_Add_Array($hListView, ByRef $array)
If Not IsArray($array) Then Return SetError(1, 0, 0) ; not an array
Local $iColumnCount = _GUICtrlListView_GetColumnCount($hListView)
; if the number of columns between the array and the listview doesn't match:
If UBound($array,2) <> $iColumnCount Then Return SetError(3, 1, 0)
Switch UBound($array, 0)
Case 1 ; 1-dimensioned array
_GUICtrlListView_BeginUpdate($hListView)
For $r = 0 To UBound($array, 1) - 1
_GUICtrlListView_AddItem($hListView, $array[$r], 0)
Next
_GUICtrlListView_EndUpdate($hListView)
Case 2 ; 2-dimensioned array
_GUICtrlListView_BeginUpdate($hListView)
Local $first_row
For $r = 0 To UBound($array, 1) - 1
If $r = 0 Then
$first_row = _GUICtrlListView_AddItem($hListView, $array[$r][0], 0)
Else
_GUICtrlListView_AddItem($hListView, $array[$r][0], 0)
EndIf
Next
For $r = 0 To UBound($array, 1) - 1
For $c = 1 To UBound($array, 2) - 1
;ConsoleWrite($array[$r][$c] & " " & VarGetType($array[$r][$c]) & @CRLF & @CRLF)
_GUICtrlListView_AddSubItem($hListView, $first_row + $r, $array[$r][$c], $c, 0)
Next
Next
_GUICtrlListView_EndUpdate($hListView)
Case Else
Return SetError(2, 0, 0) ; invalid array (over 2 dimensions)
EndSwitch
Return
EndFunc
Func _GUICtrlCreateListViewEx($lText, $lX, $lY, $lWidth = 50, $lHeight = 50, $lStyle = 0, $lExStyle = 0)
_GDIPlus_Startup()
Local $hBitmap_Icon
$lStyle = BitOR($lStyle, $LVS_REPORT, $LVS_OWNERDRAWFIXED, $LVS_SHOWSELALWAYS, $LVS_SINGLESEL)
$lExStyle = BitOR($lExStyle, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_TRACKSELECT)
Local $cListView = GUICtrlCreateListView($lText, $lX, $lY, $lWidth, $lHeight, $lStyle)
$hListView = GUICtrlGetHandle($cListView)
_GUICtrlListView_SetExtendedListViewStyle($hListView, $lExStyle)
; create checkbox images check and uncheck
$hIml_Listview = _GUIImageList_Create(16, 16, 5, 3)
$hBitmap_Icon = _Load_BMP_From_Mem(_Icon_Image_Checkbox_Unchecked(), True)
_GUIImageList_Add($hIml_Listview, $hBitmap_Icon)
_WinAPI_DeleteObject($hBitmap_Icon)
$hBitmap_Icon = _Load_BMP_From_Mem(_Icon_Image_Checkbox_Checked(), True)
_GUIImageList_Add($hIml_Listview, $hBitmap_Icon)
_WinAPI_DeleteObject($hBitmap_Icon)
Return $cListView
EndFunc
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Local $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
Local $nNotifyCode = DllStructGetData($tNMHDR, "Code")
; if header size is changed, change size of edit controls
Switch $nNotifyCode
Case $HDN_ITEMCHANGED, $HDN_ITEMCHANGEDW
For $i = 1 To $aProgress[0][0]
_MoveEdit($hListView, $aProgress[$i][0], $aProgress[$i][1], $aProgress[$i][2])
Next
EndSwitch
; if checkbox image is clicked
Switch $hWndFrom
Case $hListView
Switch $nNotifyCode
Case $NM_CLICK
Local $tINFO = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $iItem = DllStructGetData($tINFO, "Index")
Local $iSubitem = DllStructGetData($tINFO, "SubItem")
; click event for checkboxes in column 2
If $iSubitem == $checkbox_column And StringLen(_GUICtrlListView_GetItemText($hListView, $iItem, $iSubitem)) > 0 Then
;ConsoleWrite("painting row "&$iItem+1&" col "&$iSubitem+1&@CRLF)
_GUICtrlListView_SetItemImage($hListView, $iItem, Not _GUICtrlListView_GetItemImage($hListView, $iItem, $iSubitem), $iSubitem)
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
;~ ConsoleWrite($hWnd & " " & $Msg & " " & $wParam & " " & $lParam & @CRLF)
Local $tagDRAWITEMSTRUCT, $iBrushColor, $cID, $itmID, $itmAction, $itmState, $hItm, $hDC
$timer = TimerInit()
$tagDRAWITEMSTRUCT = DllStructCreate( _
"uint cType;" & _
"uint cID;" & _
"uint itmID;" & _
"uint itmAction;" & _
"uint itmState;" & _
"hwnd hItm;" & _
"hwnd hDC;" & _
"int itmRect[4];" & _
"dword itmData" _
, $lParam)
If DllStructGetData($tagDRAWITEMSTRUCT, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
$cID = DllStructGetData($tagDRAWITEMSTRUCT, "cID")
$itmID = DllStructGetData($tagDRAWITEMSTRUCT, "itmID")
$itmAction = DllStructGetData($tagDRAWITEMSTRUCT, "itmAction")
$itmState = DllStructGetData($tagDRAWITEMSTRUCT, "itmState")
$hItm = DllStructGetData($tagDRAWITEMSTRUCT, "hItm")
$hDC = DllStructGetData($tagDRAWITEMSTRUCT, "hDC")
Local $aDefaultVariables[9] = [$tagDRAWITEMSTRUCT, $iBrushColor, $cID, $itmID, $itmAction, $itmState, $hItm, $hDC]
Switch $cID ; will look for ControlID, not window handle.
Case $cListView
Switch $itmAction
Case $ODA_DRAWENTIRE
Local $aRowColors[2] = [0xFDFDFD, 0xEEDDBB]
Local $aRectMargins[4] = [6, -1, -4, 0]
Local $aTextFormatting[5] = [-1, _
BitOR($DT_VCENTER, $DT_SINGLELINE, $DT_CENTER, $DT_END_ELLIPSIS), _
BitOR($DT_VCENTER, $DT_SINGLELINE, $DT_CENTER, $DT_END_ELLIPSIS), _
BitOR($DT_VCENTER, $DT_SINGLELINE, $DT_RIGHT, $DT_END_ELLIPSIS), _
BitOR($DT_VCENTER, $DT_SINGLELINE, $DT_END_ELLIPSIS)]
__WM_DRAWITEM_ListView($hListView, $aDefaultVariables, $aRowColors, $aRectMargins, $aTextFormatting)
; end case
EndSwitch
; end case
EndSwitch
;~ ConsoleWrite(Round(TimerDiff($timer),2) & @TAB & "WM_DRAWITEM" & @CRLF)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_DRAWITEM
Func __WM_DRAWITEM_ListView($hListView, ByRef $aDefaultVariables, ByRef $aRowColors, ByRef $aRectMargins, ByRef $aTextFormatting)
Local $iSubItemCount = _GUICtrlListView_GetColumnCount($hListView)
If UBound($aTextFormatting) < $iSubItemCount Then Return ConsoleWrite("!> Error: invalid parameters in __WM_DRAWITEM_ListView()" & @CRLF)
Local $tagDRAWITEMSTRUCT, $iBrushColor, $cID, $itmID, $itmAction, $itmState, $hItm, $hDC
$tagDRAWITEMSTRUCT = $aDefaultVariables[0]
$iBrushColor = $aDefaultVariables[1]
$cID = $aDefaultVariables[2]
$itmID = $aDefaultVariables[3]
$itmAction = $aDefaultVariables[4]
$itmState = $aDefaultVariables[5]
$hItm = $aDefaultVariables[6]
$hDC = $aDefaultVariables[7]
If _GUICtrlListView_GetItemSelected($hListView, $itmID) Then
$iBrushColor = $aRowColors[1]
Else
$iBrushColor = $aRowColors[0]
EndIf
; create a brush with the desired color:
Local $aBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $iBrushColor)
; get the rectangle for the whole row and fill it:
Local $iLeft = DllStructGetData($tagDRAWITEMSTRUCT, "itmRect", 1)
DllStructSetData($tagDRAWITEMSTRUCT, "itmRect", $iLeft + 0, 1) ; +0 is the left margin
_WinAPI_FillRect($hDC, DllStructGetPtr($tagDRAWITEMSTRUCT, "itmRect"), $aBrush[0])
; draw the text in each subitem
For $i = 0 To $iSubItemCount - 1
; get subitem text:
Local $iSubItmText = _GUICtrlListView_GetItemText($hListView, $itmID, $i)
;~ ConsoleWrite($itmID & " ")
; get subitem coordinates for drawing its respective text:
Local $aSubItmRect = _GUICtrlListView_GetSubItemRect($hListView, $itmID, $i)
; the function above accepts not only subitems (one-based index), but also main item (index=0)
; pass the coordinates to a DLL struct:
Local $iSubItmRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
DllStructSetData($iSubItmRect, 1, $aSubItmRect[0] + $aRectMargins[0]) ; left margin
DllStructSetData($iSubItmRect, 2, $aSubItmRect[1] + $aRectMargins[1]) ; upper margin
DllStructSetData($iSubItmRect, 3, $aSubItmRect[2] + $aRectMargins[2]) ; right margin
DllStructSetData($iSubItmRect, 4, $aSubItmRect[3] + $aRectMargins[3]) ; bottom margin
Local $tRect = DllStructGetPtr($iSubItmRect)
;#cs
If $cID == $cListView And StringLen($iSubItmText) > 0 And $aTextFormatting[$i] <> - 1 Then
Local $hIcon = _GUIImageList_GetIcon($hIml_Listview, _GUICtrlListView_GetItemImage($hListView, $itmID, $i))
If $i = 0 Then ; the first column of a listview needs more handling than the other columns (sub-items)
#cs
; positioning for the icon:
DllStructSetData($iSubItmRect, "Left", DllStructGetData($iSubItmRect, "Left") + 12)
_WinAPI_DrawIconEx($hDC, DllStructGetData($iSubItmRect, "Left") - 16, Int((DllStructGetData($iSubItmRect, "Bottom") + DllStructGetData($iSubItmRect, "Top") - 16)/2) + $iAdjustV, $hIcon, 16, 16)
; positioning for the text:
DllStructSetData($iSubItmRect, "Left", DllStructGetData($iSubItmRect, "Left") + 4)
#ce
; draw checkbox images
ElseIf $i == $checkbox_column Then
_WinAPI_DrawIconEx($hDC, DllStructGetData($iSubItmRect, "Left"), Int((DllStructGetData($iSubItmRect, "Bottom") + DllStructGetData($iSubItmRect, "Top") - 16) / 2) - 1 + $iAdjustV, $hIcon, 16, 16)
; positioning for the text:
DllStructSetData($iSubItmRect, "Left", DllStructGetData($iSubItmRect, "Left") + 20)
EndIf
_GUIImageList_DestroyIcon($hIcon)
EndIf
;#ce
; column 3 has no text content so return here
If $i == $edit_column Then
; if focus on edit controls
Local $focus = ControlGetFocus($hGUI)
If StringInStr( $focus, "Edit") Then
ConsoleWrite("Jetzt" & " ")
Sleep(1000)
GUICtrlSetState(6, $GUI_FOCUS)
EndIf
_MoveEdit($hListView, $aProgress[$itmID][0], $aProgress[$itmID][1], $aProgress[$itmID][2])
Return
EndIf
If $aTextFormatting[$i] = -1 Then
; do nothing (don't draw any text)
Else
;ConsoleWrite($hDC & " " & $iSubItmText& " " & $tRect& " " & $aTextFormatting[$i] &@CRLF & "------------------------------------------"&@CRLF)
_WinAPI_DrawText($hDC, $iSubItmText, $tRect, $aTextFormatting[$i])
EndIf
Next
EndFunc ;==>__WM_DRAWITEM_ListView
Func WM_MEASUREITEM($hWnd, $Msg, $wParam, $lParam)
Local $tMEASUREITEMS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmW;uint itmH;ulong_ptr itmData", $lParam)
If DllStructGetData($tMEASUREITEMS, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
DllStructSetData($tMEASUREITEMS, "itmH", $iListView_row_height) ; row height
Return 1
EndFunc ;==>WM_MEASUREITEM
; Based on File to Base64 String Code Generator
; by UEZ
; <a href='http://www.autoitscript.com/forum/topic/...ng-code-generator-v103-build-2' class='bbc_url' title=''>http://www.autoitscript.com/forum/topic/..…or-v103-build-2</a>
;======================================================================================
; Function Name: Load_BMP_From_Mem
; Description: Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap
;
; Parameters: $bImage: the binary string which contains any valid image which is supported by GDI+
; Optional: $hHBITMAP: if false a bitmap will be created, if true a hbitmap will be created
;
; Remark: hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format
; Don't forget _GDIPlus_Startup() and _GDIPlus_Shutdown()
;
; Requirement(s): GDIPlus.au3, Memory.au3 and _GDIPlus_BitmapCreateDIBFromBitmap() from WinAPIEx.au3
; Return Value(s): Success: handle to bitmap (GDI+ bitmap format) or hbitmap (WinAPI bitmap format),
; Error: 0
; Error codes: 1: $bImage is not a binary string
; 2: unable to create stream on HGlobal
; 3: unable to create bitmap from stream
;
; Author(s): UEZ
; Additional Code: thanks to progandy for the MemGlobalAlloc and tVARIANT lines and
; Yashied for _GDIPlus_BitmapCreateDIBFromBitmap() from WinAPIEx.au3
; Version: v0.97 Build 2012-01-04 Beta
;=======================================================================================
Func _Load_BMP_From_Mem($bImage, $hHBITMAP = False)
If Not IsBinary($bImage) Then Return SetError(1, 0, 0)
Local $aResult
Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary
Local Const $len = BinaryLen($memBitmap) ;get length of image
Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002)
Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
_MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE
$aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents
If @error Then SetError(2, 0, 0)
Local Const $hStream = $aResult[3]
$aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface
If @error Then SetError(3, 0, 0)
Local Const $hBitmap = $aResult[2]
Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _
"dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak
$tMem = 0
$tVARIANT = 0
If $hHBITMAP Then
Local Const $hHBmp = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
_GDIPlus_BitmapDispose($hBitmap)
Return $hHBmp
EndIf
Return $hBitmap
EndFunc ;==>_Load_BMP_From_Mem
Func _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
Local $tBIHDR, $Ret, $tData, $pBits, $hResult = 0
$Ret = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0)
If (@error) Or ($Ret[0]) Then Return 0
$tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $Ret[2], $Ret[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB)
$pBits = DllStructGetData($tData, 'Scan0')
If Not $pBits Then Return 0
$tBIHDR = DllStructCreate('dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword')
DllStructSetData($tBIHDR, 1, DllStructGetSize($tBIHDR))
DllStructSetData($tBIHDR, 2, $Ret[2])
DllStructSetData($tBIHDR, 3, $Ret[3])
DllStructSetData($tBIHDR, 4, 1)
DllStructSetData($tBIHDR, 5, 32)
DllStructSetData($tBIHDR, 6, 0)
$hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0)
If (Not @error) And ($hResult[0]) Then
DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $Ret[2] * $Ret[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0'))
$hResult = $hResult[0]
Else
$hResult = 0
EndIf
_GDIPlus_BitmapUnlockBits($hBitmap, $tData)
Return $hResult
EndFunc ;==>_GDIPlus_BitmapCreateDIBFromBitmap
Func _Decompress_Binary_String_to_Bitmap($Base64String)
$Base64String = Binary($Base64String)
Local $iSize_Source = BinaryLen($Base64String)
Local $pBuffer_Source = _WinAPI_CreateBuffer($iSize_Source)
DllStructSetData(DllStructCreate('byte[' & $iSize_Source & ']', $pBuffer_Source), 1, $Base64String)
Local $pBuffer_Decompress = _WinAPI_CreateBuffer(8388608)
Local $Size_Decompressed = _WinAPI_DecompressBuffer($pBuffer_Decompress, 8388608, $pBuffer_Source, $iSize_Source)
Local $b_Result = Binary(DllStructGetData(DllStructCreate('byte[' & $Size_Decompressed & ']', $pBuffer_Decompress), 1))
_WinAPI_FreeMemory($pBuffer_Source)
_WinAPI_FreeMemory($pBuffer_Decompress)
Return $b_Result
EndFunc ;==>_Decompress_Binary_String_to_Bitmap
Func _Icon_Image_Checkbox_Unchecked()
Local $Base64String
$Base64String &= '7rBIAAABABAQEAFwCAAAaAUAABYAAMwAKAAYAJAAIAAYAVwZAQBAAQIYDgCAgAAAANfc3ADZ3t4AANvg4ADe4uIAAOLl5QDl6OgAAOns7ADs7+8AAO/x8QDx8/MAAPT19QD29/cAAPj5+QD6+/sAAPz9/QD+/v7wAP///xNc/wB/AD8A/z8APwA/AD8APwA/AD8ACAAb4HYLAAEJAOEBCgsMAA0ODxAREhISbeIBCQcC4gEIBwLiAQfbBwLiAQYHAuIBBQcC4gG2BAcC4gEDBwLiAQIHAv/jAQcC5AEGAuIB7BceAOCfHgN/AG0A4QZhAA=='
Return _Decompress_Binary_String_to_Bitmap(_Base64Decode($Base64String))
EndFunc ;==>_Icon_Image_Checkbox_Unchecked
Func _Icon_Image_Checkbox_Checked()
Local $Base64String
$Base64String &= 'z7BIAAABABAQEAFwCAAAaAUAABYAAMwAKAAYAJAAIAAYAVwZAQBAAQIYDgCAgAAAAISEhADe3t5AAN7n5wDnAQbvCO8A7wEG9/cA9/EABv///xN4/wE/AD8A/z8APwA/AD8AHwAMAOB6CwAGAQkA4QEHCAkJCR4KAgDjAQcC5AEHCAKDAwLiAQYHBwICAwI54gEFBsABAwLjAQUCxgIkBOIBBAUCRQbjAVgEBQUCAuQBAwUCCPPkAQUCBwjkAQYC4gHsF3seAOCfA38AbQDhBmEA'
Return _Decompress_Binary_String_to_Bitmap(_Base64Decode($Base64String))
EndFunc ;==>_Icon_Image_Checkbox_Checked
Func _Base64Decode($input_string)
Local $struct = DllStructCreate("int")
Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
If @error Or Not $a_Call[0] Then Return SetError(1, 0, "")
Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
$a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
If @error Or Not $a_Call[0] Then Return SetError(2, 0, "")
Return DllStructGetData($a, 1)
EndFunc ;==>_Base64Decode
Func _ListView_InsertEdit($sHwnd, $sItemIndex, $sSubItemIndex = 0)
If Not IsHWnd($sHwnd) Then $sHwnd = GUICtrlGetHandle($sHwnd)
Local $iStyle = _WinAPI_GetWindowLong($sHwnd, $GWL_STYLE)
If BitAND($iStyle, $WS_CLIPCHILDREN) <> $WS_CLIPCHILDREN Then
_WinAPI_SetWindowLong($sHwnd, $GWL_STYLE, BitOR($iStyle, $WS_CLIPCHILDREN))
EndIf
Local $aRect
If $sSubItemIndex = 0 Then
$aRect = _GUICtrlListView_GetItemRect($sHwnd, $sItemIndex, 2)
Else
$aRect = _GUICtrlListView_GetSubItemRect($sHwnd, $sItemIndex, $sSubItemIndex)
EndIf
$aProgress[0][0] += 1
ReDim $aProgress[$aProgress[0][0]+1][4]
$aProgress[$aProgress[0][0]][0] = _Edit_Create($sHwnd, $aRect[0] + 6, $aRect[1] + 2, ($aRect[2] - $aRect[0]) - 12, ($aRect[3] - $aRect[1]) - 4)
$aProgress[$aProgress[0][0]][1] = $sItemIndex
$aProgress[$aProgress[0][0]][2] = $sSubItemIndex
$aProgress[$aProgress[0][0]][3] = $sHwnd
Return $aProgress[$aProgress[0][0]][0]
EndFunc ;==>_ListView_InsertEdit
Func _Edit_Create($hWnd, $iX, $iY, $iWidth = -1, $iHeight = -1, $iStyle = 0, $iExStyle = 0x00000200)
$ids += 1
$iStyle = BitOR($iStyle, $WS_TABSTOP, $WS_CHILD, $WS_VISIBLE, $ES_LEFT, $ES_AUTOHSCROLL, $ES_NOHIDESEL)
Local $hEdit = _WinAPI_CreateWindowEx($iExStyle, "EDIT", "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $ids)
_SendMessage($hEdit, $__EDITCONSTANT_WM_SETFONT, _WinAPI_GetStockObject($__EDITCONSTANT_DEFAULT_GUI_FONT), True) ; set font style
; testen
_GUICtrlEdit_SetLimitText($hEdit, 0)
_GUICtrlEdit_SetText($hEdit, "test"&$ids)
Return $hEdit
EndFunc ;==>_Edit_Create
Func _MoveEdit($hListView, $hProgress, $sItemIndex, $sSubItemIndex)
Local $aRect
If $sSubItemIndex = 0 Then
$aRect = _GUICtrlListView_GetItemRect($hListView, $sItemIndex, 2)
Else
$aRect = _GUICtrlListView_GetSubItemRect($hListView, $sItemIndex, $sSubItemIndex)
EndIf
If $aRect[1] < 10 Then
_WinAPI_ShowWindow($hProgress, $SW_HIDE)
ElseIf $aRect[1] >= 10 Then
_WinAPI_ShowWindow($hProgress, $SW_SHOW)
EndIf
_WinAPI_MoveWindow($hProgress, $aRect[0] + 6, $aRect[1] + 2, ($aRect[2] - $aRect[0]) - 12, ($aRect[3] - $aRect[1]) - 4, True)
EndFunc ;==>_MoveEdit
Danke für eure Mühen!