Page 1 of 1

Enable Disable ListViewGadget MultiSelect [Windows]

Posted: Fri Sep 29, 2017 6:25 am
by RASHAD
It is a workaround
Save and sound :)
PB 5.61 x86 Windows 10 x64

Code: Select all

#LB_ITEMFROMPOINT = $1A9

Global Sel

Procedure WndProc(hwnd, uMsg, wParam, lParam)
 result = #PB_ProcessPureBasicEvents
 Select uMsg 
                                      
  Case #WM_NCACTIVATE
        Result = 1
        
  Case #WM_SIZE,#WM_MOVE
    If Sel = 1          
      ResizeWindow(1,GadgetX(0,#PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate), GadgetWidth(0), GadgetHeight(0))
    Else
      ResizeWindow(1,0,0,0,0)
    EndIf  
 EndSelect   
ProcedureReturn result 
EndProcedure

LoadFont(0,"Georgia",12)

OpenWindow(0, 0, 0, 600, 400, "ListViewGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(0, 10, 10, 580, 320,#PB_ListView_MultiSelect)
SetGadgetFont(0,FontID(0))
ButtonGadget(1, 10, 360, 150, 25, "Disable Multiselection")

For i = 1 To 12
  AddGadgetItem (0, -1, "Item " + Str(i) + " of the ListView")
Next

OpenWindow(1, 0,0,0,0, "",#PB_Window_BorderLess ,WindowID(0))
SetWindowLongPtr_(WindowID(1),#GWL_EXSTYLE, GetWindowLongPtr_(WindowID(1),#GWL_EXSTYLE)|#WS_EX_LAYERED) 
SetLayeredWindowAttributes_(WindowID(1),$FFFFFF,5,#LWA_ALPHA)

SetActiveWindow(0)
SetWindowCallback(@WndProc())
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #WM_LBUTTONDOWN
      If Sel = 1
        GetCursorPos_(@p.POINT)
        ScreenToClient_ (GadgetID(0), @p)
        item = SendMessage_(GadgetID(0),#LB_ITEMFROMPOINT,0,p\y<<16+p\x)
        SetGadgetState(0,-1)
        SetGadgetItemState(0,item,1)
      EndIf     
     
    Case #PB_Event_Gadget
      Select EventGadget()         
        Case 1         
          Sel ! 1
          If Sel = 1
            SetGadgetText(1,"Enable Multiselection")
            SetGadgetState(0,-1)
            ResizeWindow(1,GadgetX(0,#PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate), GadgetWidth(0), GadgetHeight(0))
          Else
            SetGadgetText(1,"Disable Multiselection")
            ResizeWindow(1,0,0,0,0)
          EndIf
      EndSelect
  EndSelect
Until Quit = 1

Re: Enable Disable ListViewGadget MultiSelect [Windows]

Posted: Tue Oct 03, 2017 3:05 pm
by Kwai chang caine
Works very well :D
Thanks a lot for sharing 8)