请教ListView其中某一列高度可以控制吗?
本帖最后由 zz999 于 2010-1-5 11:47 编辑如题:
比如我一共GUICtrlCreateListViewItem了两列!
第二列里我用了ListView_Progress函数进度条
这个进度条是按百分比铺满的..
这样看上去不是很好看
有没有办法控制他的高度小一点! 顶一下
继续求教! 请教下!大家帮帮忙
改UDF有人会么? 列?控制高度? 列只能控制宽度…… 行才是控制高度 回复 4# afan
又犯错了
呵呵
是行的高度
但不是整个行
就这一个列里的行
其他的行不变...这一用了这个UDF
但不能控制进度条的高度! 回复 4# afan
afan老大 帮帮忙哈
改UDF怎么改哈!
实在没则了! 回复 6# zz999
还没解决吗?那我看看吧…… 本帖最后由 afan 于 2010-1-5 01:06 编辑
回复 6# zz999
修改了下 ListView_Progress.au3 :#include-once
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <ProgressConstants.au3>
#include <HeaderConstants.au3>
#include <WinAPI.au3>
#include <GuiListView.au3>
Global Const $SW_HIDE = 0
Global Const $SW_SHOW = 5
Global $aProgress
GUIRegisterMsg($WM_NOTIFY, "_ListView_Notify")
GUIRegisterMsg($WM_SIZE, "_ListView_Notify")
; #FUNCTION# ======================================================================================
; Function Name: _ListView_InsertProgressBar()
; Description: Inserts a progressbar control in the ListView control.
; Syntax.........:_ListView_InsertProgressBar($sHwnd, $sItemIndex[, $sSubItemIndex])
; Parameter(s): $sHwnd - Handle to the ListView control.
; $sItemIndex - Zero based index of the item at which the progressbar should be inserted.
; $sSubItemIndex - One based index of the subitem where progressbar should be placed, default is 1.
;
; Return Value(s):Returns the identifier (controlID) of the new progressbar control.
; Requirement(s): AutoIt 3.2.10.0 and above
; Note(s): Optimal amount of progressbar controls is 5-10. Don`t abuse with many amount of progressbar controls.
;
; Author(s): R.Gilman (a.k.a rasim), arcker
;==================================================================================================
Func _ListView_InsertProgressBar($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 += 1
ReDim $aProgress[$aProgress + 1]
$aProgress[$aProgress] = _Progress_Create($sHwnd, $aRect, $aRect + 2, $aRect - $aRect, $aRect - $aRect - 3)
$aProgress[$aProgress] = $sItemIndex
$aProgress[$aProgress] = $sSubItemIndex
$aProgress[$aProgress] = $sHwnd
Return $aProgress[$aProgress]
EndFunc ;==>_ListView_InsertProgressBar
Func _Progress_Create($hWnd, $iX, $iY, $iWidth = -1, $iHeight = -1, $iStyle = 0, $iExStyle = 0)
$iStyle = BitOR($iStyle, $WS_CHILD, $WS_VISIBLE)
Return _WinAPI_CreateWindowEx($iExStyle, "msctls_progress32", "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd)
EndFunc ;==>_Progress_Create
Func _ListView_Notify($hWnd, $Msg, $wParam, $lParam)
If $Msg = $WM_SIZE Then
_WinAPI_InvalidateRect($hWnd)
Return $GUI_RUNDEFMSG
EndIf
Local $tNMHEADER, $hWndFrom, $iCode, $i
$tNMHEADER = DllStructCreate($tagNMHEADER, $lParam)
$hWndFrom = DllStructGetData($tNMHEADER, "hwndFrom")
$iCode = DllStructGetData($tNMHEADER, "Code")
Switch $iCode
Case $HDN_ITEMCHANGED, $HDN_ITEMCHANGEDW, $LVN_ENDSCROLL
If $iCode <> $LVN_ENDSCROLL Then $hWndFrom = _WinAPI_GetParent($hWndFrom)
For $i = 1 To $aProgress
If $aProgress[$i] = $hWndFrom Then _
_MoveProgress($hWndFrom, $aProgress[$i], $aProgress[$i], $aProgress[$i])
Next
_WinAPI_InvalidateRect($hWndFrom)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_ListView_Notify
Func _MoveProgress($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 < 10 Then
_WinAPI_ShowWindow($hProgress, $SW_HIDE)
ElseIf $aRect >= 10 Then
_WinAPI_ShowWindow($hProgress, $SW_SHOW)
EndIf
_WinAPI_MoveWindow($hProgress, $aRect, $aRect + 2, $aRect - $aRect, $aRect - $aRect - 3, True)
EndFunc ;==>_MoveProgress
; #FUNCTION# ====================================================================================================
; Description ...: Sets the color of the indicator bar
; Parameters ....: $hWnd - Handle to the control
; $iColor - The new progress indicator bar color.Specify the CLR_DEFAULT value to cause the progressbar
; +to use its default progress indicator bar color.
; Return values .: Success - The previous progress indicator bar color, or CLR_DEFAULT if the progress indicatorbarcolor
; +is the default color.
; Author ........: Paul Campbell (PaulIA), Updated By Arcker
; Remarks .......: This message is supported only in the Windows Classic theme
; Related .......:
; ====================================================================================================
Func _Progress_SetBarColor($hWnd, $iColor)
Return _SendMessage($hWnd, $PBM_SETBARCOLOR, 0, $iColor)
EndFunc ;==>_Progress_SetBarColor
; #FUNCTION# ====================================================================================================
; Description ...: Sets the current position
; Parameters ....: $hWnd - Handle to the control
; $iPos - The new position
; Return values .: Success - The previous position
; Author ........: Paul Campbell (PaulIA), Updated By Arcker
; Remarks .......:
; Related .......: _Progress_GetPos
; ====================================================================================================
Func _Progress_SetPos($hWnd, $iPos)
Return _SendMessage($hWnd, $PBM_SETPOS, $iPos, 0)
EndFunc ;==>_Progress_SetPos
; #FUNCTION# ====================================================================================================
; Description ...: Sets the background color in the progress bar
; Parameters ....: $hWnd - Handle to the control
; $iColor - The new background color.Specify the CLR_DEFAULT value to cause the progress bar touseits
; +default background color.
; Return values .: Success - The previous background color, or CLR_DEFAULT if the background color is the default color.
; Author ........: Paul Campbell (PaulIA), Updated By Arcker
; Remarks .......: This message is supported only in the Windows Classic theme
; Related .......:
; ====================================================================================================
Func _Progress_SetBkColor($hWnd, $iColor)
Return _SendMessage($hWnd, $PBM_SETBKCOLOR, 0, $iColor)
EndFunc ;==>_Progress_SetBkColor
; #FUNCTION# ====================================================================================================
; Description ...: Specifies the step increment
; Parameters ....: $hWnd - Handle to the control
; $iStep - Step increment.
; Return values .: Success - The previous step increment
; Author ........: Paul Campbell (PaulIA)
; Remarks .......: The step increment is the amount by which the progress bar increases its current position whenever you use the
; _Progress_StepIt function. By default, the step increment is set to 10.
; Related .......: _Progress_StepIt
; ====================================================================================================
Func _Progress_SetStep($hWnd, $iStep = 10)
Return _SendMessage($hWnd, $PBM_SETSTEP, $iStep, 0)
EndFunc ;==>_Progress_SetStep
; #FUNCTION# ====================================================================================================
; Description ...: Advances the current position by the step increment
; Parameters ....: $hWnd - Handle to the control
; Return values .: Success - The previous position
; Author ........: Paul Campbell (PaulIA), Updated By Arcker
; Remarks .......:
; Related .......: _Progress_SetStep
; ====================================================================================================
Func _Progress_StepIt($hWnd)
Return _SendMessage($hWnd, $PBM_STEPIT, 0, 0)
EndFunc ;==>_Progress_StepIt
; #FUNCTION# ====================================================================================================
; Description ...: Delete the progressbar control
; Parameters ....: $hWnd - Handle to the control
; Return values .: Success - True
; Failure - False
; Author ........: G. Sandler (MrCreatoR), Updated by rasim
; Remarks .......:
; Related .......: _Progress_SetStep
; ====================================================================================================
Func _Progress_Delete($hWnd)
Local $aTmpArr
For $i = 1 To $aProgress
If $aProgress[$i] <> $hWnd Then
$aTmpArr += 1
ReDim $aTmpArr[$aTmpArr + 1]
$aTmpArr[$aTmpArr] = $aProgress[$i]
$aTmpArr[$aTmpArr] = $aProgress[$i]
$aTmpArr[$aTmpArr] = $aProgress[$i]
$aTmpArr[$aTmpArr] = $aProgress[$i]
EndIf
Next
$aProgress = $aTmpArr
Local $aResult = DllCall("User32.dll", "int", "DestroyWindow", "hwnd", $hWnd)
If @error Then Return SetError(1, 0, 0)
Return $aResult <> 0
EndFunc ;==>_Progress_Delete
页:
[1]