ComboBox - Align im Editfeld und Controlhöhe beî Dropdown-Style

    • 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:

  • Hallo BugFix,

    ich habe gerade ein Problem mit _GuiCtrlComboBox_SetEditAlign.
    Ich wollte eine Combobox, in der man die Einträge nicht bearbeiten kann. Auf eine Combobox mit dem Stil $CBS_DROPDOWNLIST lässt sich die Funktion nicht erfolgreich anwenden.


    Die ganze Funktion ist mir zu hoch und ich habe keine Ahnung, ob und was Erfolg bringen würde.

    Da muss ich mich natürlich auch selbst bilden. Ein Blick in die Hilfe genügt mir leider nicht.
    Wie du schon auf "GetWindowLongPtrW" oder "GetWindowLongW" kommst ist mir schleierhaft. Hängt sicher damit zusammen, dass ich von DllStructGetData und DllCall keine Ahnung habe.

    AutoIt
    ...
    	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)

    Kannst du hier helfen BugFix?


    Könntest du oder jemand anderes mit Ahnung ein paar Kommentare zu den Zeilen verlieren, die mir das ein wenig erklären sollten?

    Vielen Dank und viele Grüße autoiter

    Grüße autoiter

    • Offizieller Beitrag

    Auf eine Combobox mit dem Stil $CBS_DROPDOWNLIST lässt sich die Funktion nicht erfolgreich anwenden.

    Genau, diese Funktion funktioniert ausschliesslich mit dem Style $CBS_DROPDOWN. Deshalb habe ich das auch ausdrücklich in der Funktion erwähnt. ^^

    Wie du schon auf "GetWindowLongPtrW" oder "GetWindowLongW" kommst ist mir schleierhaft. Hängt sicher damit zusammen, dass ich von DllStructGetData und DllCall keine Ahnung habe.

    Das ist nur drin um das Include der WinAPI-UDF zu vermeiden. Somit habe ich die Funktionen direkt als Dll-Call eingefügt.

  • Hallo BugFix,
    danke für die Info. Stimmt. In der _GuiCtrlComboBox_SetCtrlHeight-Description steht es. Darauf hatte ich gar nicht geachtet. Den Threadtitel hast du aber angepasst, oder ?( Ich hoffe es wenigstens.. :D

    Also danke nochmal für die Funktion. Werden sich bestimmt noch andere freuen.
    Vielen Dank nochmal.

    Grüße autoiter