Page 1 of 1
dynamically expanding combobox
Posted: Thu Dec 23, 2004 9:00 am
by jmf73
Hi everyone,
could someone tell me how to make a combobox expand whilst it is being clicked so that the dropdown menu is long enough to show data that is longer that the actual combobox..
Thanks.
John Finney
Posted: Thu Dec 23, 2004 2:43 pm
by Sparkie
Welcome aboard to PureBasic jmf73

You'll need the full version of PBWin since this uses Win32 API.
Code: Select all
If OpenWindow(0, 0, 0, 270, 240, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Resizable ComboBoxGadget") And CreateGadgetList(WindowID(0))
TextGadget(0, 10, 10, 100, 20, "Items to view")
StringGadget(1, 120, 10, 50, 20, "8", #PB_String_Numeric)
ComboBoxGadget(2, 10, 40, 250, 100); -- Add #CBS_NOINTEGRALHEIGHT flag For WinXP
; --> Get 3d border height
vEdge = GetSystemMetrics_(#SM_CYEDGE)
; --> Number of items to view
itemsToView = Val(GetGadgetText(1))
; --> Get height of ComboBox selection field
cbSelectedItemHeight = SendMessage_(GadgetID(2), #CB_GETITEMHEIGHT, -1, 0)
; --> get height of ComboBox item
cbListItemHeight = SendMessage_(GadgetID(2), #CB_GETITEMHEIGHT, 0, 0)
; -- Resize adding 4 units of vEdge (2 for selection field and 2 for dropdown)
ResizeGadget(2, -1, -1, -1, cbSelectedItemHeight + (cbListItemHeight * itemsToView) + vEdge*4)
For a = 1 To 29
AddGadgetItem(2, -1, "ComboBox item " + Str(a))
Next
Repeat
event = WaitWindowEvent()
If event = #PB_EventGadget And EventGadgetID() = 1
itemsToView = Val(GetGadgetText(1))
If itemsToView > 0 And itemsToView < CountGadgetItems(2)+1
ResizeGadget(2, -1, -1, -1, cbSelectedItemHeight + (cbListItemHeight * itemsToView)+ vEdge*4)
Else
MessageRequester("Error", "enter a number between 1 and " + Str(CountGadgetItems(2)), 0)
SetGadgetText(1, "8")
EndIf
EndIf
Until event = #PB_Event_CloseWindow
EndIf
End