Updated:ComboBox Edit (Windows Only)
Posted: Sun Sep 13, 2009 12:57 am
Edit ComboBox Live:
Advancd Hand Made ComboBox:
No Ownerdrawn, No API just PureBasic Native commands
1- Any No. of items per line
2- Can insert Image / Icon / Text per one line
3- Color control For each item
4- Can disable any item (Color = $C2C2C2 )
5- Can Delete any row
No limit To your imagination
You can add what you want
Edit:Updated for speed and compatibility
Have fun
Code: Select all
Global Pos
OpenWindow(0, 200, 100, 300, 100 , "Edit CB List Live", #PB_Window_SystemMenu |#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
CB_1 = ComboBoxGadget(1, 10, 30, 280, 21,#PB_ComboBox_Editable)
For a = 1 To 5
AddGadgetItem(1, -1,"ComboBox item " + Str(a))
Next
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Result = GetGadgetState(1)
If Result >= 0
Pos = Result
EndIf
EndSelect
Case #WM_CHAR
String$ = GetGadgetText(1)
If EventwParam() = 13 ;Return to confirm
SetGadgetItemText(1,Pos, String$)
ElseIf EventwParam() = 27 ;Escape to reset
SetGadgetState(1,Pos)
ElseIf EventwParam() = 19 ;Ctrl + S (Add At Start)
AddGadgetItem(1, 0, String$)
ElseIf EventwParam() = 5 ;Ctrl + E (Add At End)
AddGadgetItem(1,-1, String$)
ElseIf EventwParam() = 4 ;Ctrl + D Delete
RemoveGadgetItem(1, Pos)
EndIf
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit
End
No Ownerdrawn, No API just PureBasic Native commands
1- Any No. of items per line
2- Can insert Image / Icon / Text per one line
3- Color control For each item
4- Can disable any item (Color = $C2C2C2 )
5- Can Delete any row
No limit To your imagination
You can add what you want
Code: Select all
Global Pos,WFlag,LI_1,hwnd_1,hwnd_2,hwnd_3,BG_1,Image0,Lih
LoadFont(0, "Marlett",10)
LoadFont(1, "Arial",10,#PB_Font_HighQuality)
Procedure WndProc(hwnd, uMsg, wParam, lParam)
rw.RECT
GetWindowRect_(hwnd_1, rw)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_GETMINMAXINFO
*pMinMax.MINMAXINFO = lParam
*pMinMax\ptMinTrackSize\x=640
*pMinMax\ptMinTrackSize\y=400
*pMinMax\ptMaxTrackSize\x=GetSystemMetrics_(#SM_CXSCREEN)
*pMinMax\ptMaxTrackSize\y=GetSystemMetrics_(#SM_CYSCREEN)
Case #WM_MOVE,#WM_SIZE
MoveWindow_(hwnd_2,rw\right-310,rw\top+50,282,Lih+6,1)
MoveWindow_(hwnd_3,rw\right-310,rw\top+Lih+55,282,402,1)
EndSelect
ProcedureReturn result
EndProcedure
Procedure FCombo()
result = #PB_ProcessPureBasicEvents
rw.RECT
GetWindowRect_(hwnd_1, rw)
hwnd_2 = OpenWindow(2,rw\right-310,rw\top+50,282,25,"",#PB_Window_BorderLess|#WS_BORDER,WindowID(0))
LI_1 = ListIconGadget(1,0,0,260,24,"", 30,#PB_ListIcon_GridLines|#LVS_NOCOLUMNHEADER)
SetGadgetColor(1,#PB_Gadget_BackColor,$D7FFFF)
AddGadgetColumn(1,1,"",150)
AddGadgetColumn(1,2,"",75)
AddGadgetItem(1, 0, ""+Chr(10)+""+Chr(10)+"")
SetGadgetFont(1, FontID(1))
Lih = SendMessage_(LI_1, #LVM_GETITEMSPACING, 1, 0) >> 16
MoveWindow_(hwnd_2,rw\right-310,rw\top+50,282,Lih+5,1)
MoveWindow_(LI_1,0,0,260,Lih+4,1)
BG_1 = ButtonGadget(2,260,0,20,Lih+3,Chr(117),#PB_Button_Toggle)
SetGadgetFont(2, FontID(0))
hwnd_3 = OpenWindow(3,rw\right-310,rw\top+Lih+55,280,400,"",#PB_Window_BorderLess|#WS_BORDER,WindowID(0))
LI_2 = ListIconGadget(10,0,0,280,400,"Test1",30,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#LVS_NOCOLUMNHEADER)
SetGadgetColor(10,#PB_Gadget_BackColor,$D7FFFF)
AddGadgetColumn(10,1,"",150)
AddGadgetColumn(10,2,"",78)
For i = 0 To 50
AddGadgetItem(10,i,"test"+Chr(10)+"test"+Str(i)+Chr(10)+"test"+Str(i))
Next
SetGadgetFont(10, FontID(1))
ProcedureReturn result
EndProcedure
hwnd_1 = OpenWindow(0, 200, 100, 800, 500 , "Advanced ComboBox", #PB_Window_SystemMenu |#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
SetWindowCallback(@WndProc())
FCombo()
SetGadgetItemColor(10,1,#PB_Gadget_FrontColor,$C2C2C2)
SetGadgetItemColor(10,5,#PB_Gadget_FrontColor,$0303FC)
SetGadgetItemColor(10,8,#PB_Gadget_FrontColor,$79FC86)
WFlag = 1
HideWindow(3,WFlag)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 10
Select EventType()
Case #PB_EventType_LeftClick
Pos = GetGadgetState(10)
For i = 0 To 2
Color = GetGadgetItemColor(10,Pos,#PB_Gadget_FrontColor,i)
If Color = $C2C2C2
Goto noaction
EndIf
Text$ = GetGadgetItemText(10,Pos,i)
SetGadgetItemText(1,0,Text$,i)
SetGadgetItemColor(1,0,#PB_Gadget_FrontColor, Color ,i)
Next
noaction:
WFlag = WFlag!1
AnimateWindow_(hwnd_3,100,#AW_HIDE|#AW_BLEND)
SetActiveWindow(0)
Case #PB_EventType_RightClick
Case #PB_EventType_LeftDoubleClick
; Pos = GetGadgetState(10)
; For i = 0 To 2
; Color = GetGadgetItemColor(10,Pos,#PB_Gadget_FrontColor,i)
; If Color = $C2C2C2
; Goto noaction
; EndIf
; Text$ = GetGadgetItemText(10,Pos,i)
; SetGadgetItemText(1,0,Text$,i)
; SetGadgetItemColor(1,0,#PB_Gadget_FrontColor, Color ,i)
; Next
; noaction:
; WFlag = WFlag!1
; AnimateWindow_(hwnd_3,500,#AW_HIDE|#AW_BLEND)
Case #PB_EventType_RightDoubleClick
EndSelect
Case 2
WFlag = WFlag!1
If Wflag = 1
AnimateWindow_(hwnd_3,100,#AW_HIDE|#AW_BLEND)
Else
AnimateWindow_(hwnd_3,100,#AW_ACTIVATE|#AW_VER_POSITIVE)
EndIf
SetActiveWindow(0)
EndSelect
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit
End
Have fun