- Offizieller Beitrag
Die Combobox/Ex-UDF bieten viele Funktionen - aber keine Möglichkeit zur Textausrichtung. Bei reinen Texteinträgen ist meist linksbündig passend aber wenn man Zahlenwerte in der Box hat ist rechtsbündig zu bevorzugen. Die Funktion zum Ausrichten habe ich hier erstellt.
Die zweite Funktion betrifft die optische Darstellung der Box (im Dropdown-Style). Für ein geschmeidiges Aussehen möchte man Ctrl, die nebeneinander liegen, auch gern in einer Höhe zeichnen. Dazu war bisher auch keine Funktion vorgesehen.
Das nachfolgende Bsp. zeigt die Funktionen und ihre Anwendung:
AutoIt
#include <GuiComboBox.au3>
Example()
Func Example()
Local $hGUI = GUICreate("Example", 300, 200)
Local $idComboBox = GUICtrlCreateCombo("Item 1", 10, 10, 185)
GUICtrlSetData($idComboBox, "Item 2|Item 3", "Item 2")
_GuiCtrlComboBox_SetCtrlHeight($idComboBox, 40)
Local $idClose = GUICtrlCreateButton("Close", 210, 10, 85, 40)
GUISetState(@SW_SHOW, $hGUI)
Sleep(2000)
; zentriert
_GuiCtrlComboBox_SetEditAlign($idComboBox, 1)
Sleep(2000)
; rechts
_GuiCtrlComboBox_SetEditAlign($idComboBox, 2)
Sleep(2000)
; links
_GuiCtrlComboBox_SetEditAlign($idComboBox, 0)
While 1
Switch GUIGetMsg()
Case -3, $idClose
ExitLoop
EndSwitch
WEnd
GUIDelete($hGUI)
EndFunc ;==>Example
; #FUNCTION# ====================================================================================================================
; Name ..........: _GuiCtrlComboBox_SetCtrlHeight
; Description ...: Sets the height of a collapsed combobox with style $CBS_DROPDOWN.
; Syntax ........: _GuiCtrlComboBox_SetCtrlHeight($_iID_Hwnd, $_iHeight)
; Parameters ....: $_iID_Hwnd - ID or Handle of the combobox.
; $_iHeight - The new height of the collapsed combobox.
; Return values .: None
; Author ........: BugFix
; Remarks .......: #include <GuiComboBox.au3> required
; ===============================================================================================================================
Func _GuiCtrlComboBox_SetCtrlHeight($_iID_Hwnd, $_iHeight)
Local $hWnd = $_iID_Hwnd
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
_GUICtrlComboBox_SetItemHeight($hWnd, $_iHeight)
Local $iHeightReal = (WinGetPos($hWnd))[3]
_GUICtrlComboBox_SetItemHeight($hWnd, $_iHeight-($iHeightReal-$_iHeight))
EndFunc ;==>_GuiCtrlComboBox_SetCtrlHeight
; #FUNCTION# ====================================================================================================================
; Name ..........: _GuiCtrlComboBox_SetEditAlign
; Description ...: Sets the horizontal alignment in the edit field of a combobox
; Syntax ........: _GuiCtrlComboBox_SetEditAlign($_iID_Hwnd[, $_iAlign = -1])
; Parameters ....: $_iID_Hwnd - The combobox's ID or handle.
; $_iAlign - [optional] Default is -1 (ES_LEFT).
; possible values:
; keyword "Default" or -1 or 0 = ES_LEFT
; 1 = ES_CENTER
; 2 = ES_RIGHT
; Return values .: None
; Author ........: BugFix
; Remarks .......: #include <GuiComboBox.au3> required
; ===============================================================================================================================
Func _GuiCtrlComboBox_SetEditAlign($_iID_Hwnd, $_iAlign=-1)
Local Const $_ES_LEFT = 0, $_ES_CENTER = 1, $_ES_RIGHT = 2
If $_iAlign < -1 Or $_iAlign > 2 Then $_iAlign = $_ES_LEFT
$_iAlign = ($_iAlign = -1 Or $_iAlign = Default) ? $_ES_LEFT : $_iAlign
Local $hWnd = $_iID_Hwnd
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $tInfo, $iStyleXOR = 0
_GUICtrlComboBox_GetComboBoxInfo($hWnd, $tInfo)
Local $hEdit = DllStructGetData($tInfo, "hEdit")
Local $sFuncName = @AutoItX64 ? "GetWindowLongPtrW" : "GetWindowLongW"
Local $iStyle = (DllCall("user32.dll", "long_ptr", $sFuncName, "hwnd", $hEdit, "int", 0xFFFFFFF0))[0]
If BitAND($iStyle, $_ES_CENTER) Then $iStyleXOR = $_ES_CENTER
If BitAND($iStyle, $_ES_RIGHT) Then $iStyleXOR = $_ES_RIGHT
$sFuncName = @AutoItX64 ? "SetWindowLongPtrW" : "SetWindowLongW"
DllCall("user32.dll", "long_ptr", $sFuncName, "hwnd", $hEdit, "int", 0xFFFFFFF0, "long_ptr", BitOR(BitXOR($iStyle, $iStyleXOR), $_iAlign))
DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hEdit, "struct*", 0, "handle", 0, "uint", 5)
EndFunc ;==>_GuiCtrlComboBox_SetEditAlign
Alles anzeigen