Inververs

Anybody have analog of GUICtrlSetResizing function for _GUICtrlComboBox_Create control?

3 posts in this topic

Help me please with resizing of _GUICtrlComboBox_Create control
It should resizing like native Combo with

GUICtrlSetResizing($GUI_CMB_LIST, BitOR($GUI_DOCKRIGHT, $GUI_DOCKLEFT, $GUI_DOCKHEIGHT, $GUI_DOCKTOP))

Thank you.

Share this post


Link to post
Share on other sites



Inververs,

I usually create an invisible label which has the required resizing parameters and then resize the UDF control to fit it in a WM_SIZE message handler:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiComboBox.au3>

$hGUI = GUICreate("test", 400, 400, Default, Default, $WS_SIZEBOX)

$cLabel = GUICtrlCreateLabel("", 20, 20, 200, 20) ; Label which will adjust with the GUI
GUICtrlSetBkColor($cLabel, 0xFFCCCC)
GUICtrlSetResizing($cLabel, $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKHEIGHT + $GUI_DOCKTOP)

$hCombo = _GUICtrlComboBox_Create($hGUI, "", 20, 20, 200)

GUISetState()

GUIRegisterMsg($WM_SIZE, "_WM_SIZE")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

WEnd



Func _WM_SIZE($hWnd, $iMsg, $wParam, $lParam)

    ; Get label posiition and size and adjust child GUI to fit
    $aPos = ControlGetPos($hGUI, "", $cLabel)
    WinMove($hCombo, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3])

EndFunc

Incidentally, you should use normal addition for the resizing parameters, not BitOr as with Windows styles.

M23

1 person likes this

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Melba23, it is a good idea, thx.

Incidentally, you should use normal addition for the resizing parameters, not BitOr as with Windows styles.

got it.

 

Topic is solved, thanks!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • Terenz
      By Terenz
      Hi
      It's the fist time i'll try to make a gui resizable and i have a problem with it.
      Check this:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.Au3> $hGUI = GUICreate("I'm a test", 521, 372, -1, -1, $WS_SIZEBOX + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX) GUICtrlCreateLabel("I'm a label", 35, 253, 55, 17) GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER + $GUI_DOCKHEIGHT) $Input = GUICtrlCreateInput("", 12, 269, 100, 21) GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER + $GUI_DOCKHEIGHT) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd When is "normal" is the label is centered with the input, when i'm maximize the label is not centered in the input. I know the input become bigger in width and i like it, but there is a way to get the label centered with the input when maximize the window? Thanks
    • xavierh
      By xavierh
      Friends,
      I have written a program that among other things displays data in 3 listboxes. when the window has its original size, it works fine. But if I increase the size the window vertically the listboxes stretch as they should, and I can't select their top entries with the mouse . The last listbox entries are not affected. The more I stretch the window vertically, the more entries become out of reach by the mouse. Also the highest entry that can be selected by the mouse is iffy. It has to be low on the entry.
      But the keyboard arrow keys can select them with no problem.

      The listboxes are resized with the window because of commands like
      GUICtrlSetResizing ( $ControlHandle, $GUI_DOCKTOP + $GUI_DOCKSIZE + $GUI_DOCKRIGHT )
      and that's probably where there is a problem with listview selection.
      My OS is windows 2008R1, and I've tried this using both beta 17 and version 3.3.6.1, if that has anything to do with it.
      Ideas anyone?

      Here is the code to build a sample UI to reproduce the problem. It puts a list the folders into a listbox. Run it, try to select the top entries, then stretch the window vertically and try to select the top entries:

      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) Opt('MustDeclareVars', 1) Dim $Win, $lblFolderList, $lbFolders Main () Func Main () $Win = GUICreate("Test Script", @DesktopWidth / 2 - 255, 188, 192, @DesktopHeight / 2 - 45, $WS_OVERLAPPEDWINDOW);$WS_SIZEBOX + $WS_MINIMIZE) $lblFolderList = GUICtrlCreateLabel("Folders List", 4, 8, 37, 17) GUICtrlSetResizing ( $lblFolderList, $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKTOP ) $lbFolders = GUICtrlCreateList("", 4, 24, 65, 168) GUICtrlSetResizing ( $lbFolders, $GUI_DOCKLEFT + $GUI_DOCKWIDTH + $GUI_DOCKTOP + $GUI_DOCKBOTTOM ) GUISetState(@SW_SHOW) PopulateFolders() GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit") GUISetState() While 1 Sleep ( 1000 ) WEnd EndFunc Func OnExit() Exit EndFunc Func PopulateFolders() Dim $Search, $Found Dim $InitDir = "C:\" GUICtrlSetData ( $lbFolders, "|" ) $Search = FileFindFirstFile ( $InitDir & "\*.*" ) if $Search > -1 Then While 1 $Found = FileFindNextFile ( $Search ) if @error Then ExitLoop If @extended = 1 Then GUICtrlSetData ( $lbFolders, $Found ) EndIf WEnd EndIf EndFunc