ListIconGadget Events
-
- User
- Posts: 81
- Joined: Thu May 02, 2019 3:57 am
- Location: USA
- Contact:
ListIconGadget Events
If I display a ListIconGadget in a form, I can trap the events such as #PB_EventType_LeftClick. But how do I determine the column and row that was clicked?
Thank you,
Robert
Thank you,
Robert
Re: ListIconGadget Events
To get the row, read the help on GetGadgetState()
and to get the column, use this (Windows only):
and to get the column, use this (Windows only):
Code: Select all
Procedure GetSelectedColumn(ListIcon)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Protected CursorLocation.POINT, HitInfo.LVHITTESTINFO
GetCursorPos_(CursorLocation)
MapWindowPoints_(0, GadgetID(ListIcon), CursorLocation, 1)
Hitinfo\pt\x = CursorLocation\x
HitInfo\pt\y = CursorLocation\y
SendMessage_(GadgetID(ListIcon), #LVM_SUBITEMHITTEST, 0, HitInfo)
ProcedureReturn HitInfo\iSubItem
CompilerEndIf
EndProcedure
-
- User
- Posts: 81
- Joined: Thu May 02, 2019 3:57 am
- Location: USA
- Contact:
Re: ListIconGadget Events
Thanks for your reply.
GetGadgetState() only returns the row if you click on column 0. Else it returns -1.
But I read up on LVHITTESTINFO and learned that iSubItem returns the column and iItem returns the row.
I am trying to produce a gadget that behaves like a spreadsheet, where you can click on an item and change it at will. Do you know of any way to do this? Maybe someone has already done it.
Thank you,
Robert
GetGadgetState() only returns the row if you click on column 0. Else it returns -1.
But I read up on LVHITTESTINFO and learned that iSubItem returns the column and iItem returns the row.
I am trying to produce a gadget that behaves like a spreadsheet, where you can click on an item and change it at will. Do you know of any way to do this? Maybe someone has already done it.
Thank you,
Robert
Re: ListIconGadget Events
Not so - no idea what you did wrong, but as you see here, GetGadgetState() works as advertised:
And yes, this is doable - but not without leaving the comfort of using PB only. On Windows that means diving into WinAPI; other people will have to speak on how to do this with Cocoa on MacOS and whatever graphics system PB uses on Linux if you require x-platform ...
Check this out - looks promising:
https://backups.rsbasic.de/GridExModule.pbi
Code: Select all
Procedure ListIconClick()
Debug "Row: " + Str(GetGadgetState(1))
EndProcedure
If OpenWindow(0, 0, 0, 500, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 5, 5, 480, 190, "Name", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(1, 1, "Address", 350)
AddGadgetColumn(1, 2, "Age", 60)
AddGadgetItem(1, -1, "Harry Rannit" + Chr(10) + "12 Parliament Way, Battle Street, By the Bay" + Chr(10) + "55")
AddGadgetItem(1, -1, "Ginger Brokeit" + Chr(10) + "130 PureBasic Road, BigTown, CodeCity" + Chr(10) + "27")
;
BindGadgetEvent(1, @ListIconClick())
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Check this out - looks promising:
https://backups.rsbasic.de/GridExModule.pbi
-
- User
- Posts: 81
- Joined: Thu May 02, 2019 3:57 am
- Location: USA
- Contact:
Re: ListIconGadget Events
I figured it out. It only works if you use #PB_ListIcon_FullRowSelect when you create the ListIconGadget.
I will look into the GridExModule.
Thank you,
Robert
I will look into the GridExModule.
Thank you,
Robert
Re: ListIconGadget Events
I already posted this cross-platform example to get row and column of a clicked cell more than 10 years ago. That example also contains the function GetSelectedColumn() to get the clicked column.
A cross-platform example from this year to get the clicked header column I posted here. In that posting I also linked to the above example:
A cross-platform example from this year to get the clicked header column I posted here. In that posting I also linked to the above example:
Shardik wrote:Therefore you may try out this cross-platform example which displays the row and column of a clicked cell in a ListIconGadget.
Collection of cross-platform examples with API functions to extend PureBasic
Re: ListIconGadget Events
Hi RobertRioja
I did the next snippet long time back using virtual ListIcon for speed
1- Load 350000 row in no time
2- You can edit any cell
3- Sort items by clicking the header item
4- With drop down menu you can save
5- You can print
6- You can search
7- You can add or delete any item
8- You can change the style
And more
Maybe it needs some modification for Windows DPI
Good luck
Edit : Fixed the save procedure
you can design the tabs then you can save the file as CSV
I did the next snippet long time back using virtual ListIcon for speed
1- Load 350000 row in no time
2- You can edit any cell
3- Sort items by clicking the header item
4- With drop down menu you can save
5- You can print
6- You can search
7- You can add or delete any item
8- You can change the style
And more
Maybe it needs some modification for Windows DPI
Good luck

Code: Select all
Procedure ThemesEnabled()
dll.DLLVERSIONINFO
dll\cbsize=SizeOf(dll)
lib=OpenLibrary(#PB_Any,"comctl32.dll")
If lib
CallFunction(lib,"DllGetVersion",@dll)
DLLVersion = dll\dwMajorVersion
CloseLibrary(lib)
EndIf
If DLLVersion = 6
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
If ThemesEnabled() = 0
MessageRequester("Error","Please Enable Modern them first",#MB_OK|#MB_ICONERROR)
End
EndIf
#LVSICF_NOINVALIDATEALL = 1
#LVSICF_NOSCROLL = 2
#LVN_ODCACHEHINT = #LVN_FIRST - 13
#HDS_CHECKBOXES = $0400
#HDF_CHECKBOX = $0040
#HDF_CHECKED = $0080
Prototype.i p_PrintWindow(hWnd, hdc, flags)
OpenLibrary(1, "User32.dll")
Global PrintWindow.p_PrintWindow = GetFunction(1, "PrintWindow")
Global start,finish,selno
Structure Licon Align 4 ;#PB_Structure_AlignC
index.i
imgID.i
item1.s
item2.f
item3.s
EndStructure
Global NewList myItems.licon() ,NewList state() ,Dim ssort(5,1)
Global oldproc,oldliCB ,styleflag,header, header_h,sort ,editflag ,row,col,crow,ccol,rowed,coled
Global cont1,start,finish,brush,chkcol ,chkno,popt1,sopt1
Global HitInfo.LVHITTESTINFO ,cbox.HDITEM,titem ,dpix.d,dpiy.d
titem = 350000
ExamineDesktops()
olddesktop = DesktopWidth(0)
dpix = DesktopResolutionX()
dpiy = DesktopResolutionY()
cbox\mask = #HDI_FORMAT
cbox\fmt = #HDF_CHECKBOX | #HDF_STRING | #HDF_BITMAP_ON_RIGHT
sort = 1
brush=CreateSolidBrush_($CCFFFF)
ssort(1,0) = OffsetOf(Licon\index)
ssort(1,1) = TypeOf(Licon\index)
ssort(3,0) = OffsetOf(Licon\item1)
ssort(3,1) = TypeOf(Licon\item1)
ssort(4,0) = OffsetOf(Licon\item2)
ssort(4,1) = TypeOf(Licon\item2)
ssort(5,0) = OffsetOf(Licon\item3)
ssort(5,1) = TypeOf(Licon\item3)
Procedure SaveListIconGadget(Gadget)
StandardFile$ = "C:\Licontest.txt"
Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
File$ = SaveFileRequester("Please choose file to save", StandardFile$, Pattern$, Pattern)
If File$
If GetGadgetState(sopt1) = 1
finish = titem
EndIf
OpenFile(0,File$)
For item = start To finish
SelectElement(myItems(),item)
WriteStringN(0,Str(myItems()\index)+" "+myItems()\item1+" "+StrD(myItems()\item2)+" "+myItems()\item3,#PB_UTF8 )
Next
CloseFile(0)
MessageRequester("Information", "You have selected following file:"+Chr(10)+File$, 0)
Else
MessageRequester("Information", "The requester was canceled.", 0)
EndIf
EndProcedure
Procedure PrintListIconGadget (Gadget)
ColumnCount = SendMessage_(Header, #HDM_GETITEMCOUNT, 0, 0)
RowCount = SendMessage_(GadgetID(Gadget),#LVM_GETITEMCOUNT, 0, 0)
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, RowCount - 1, #True)
For CC = 0 To ColumnCount - 1
SendMessage_(GadgetID(gadget), #LVM_SETCOLUMNWIDTH,CC,#LVSCW_AUTOSIZE_USEHEADER & #LVSCW_AUTOSIZE)
Next
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, 0, #True)
header_h = 35
SetWindowTheme_(header, "", "")
SetGadgetColor(gadget,#PB_Gadget_LineColor,0)
x = GadgetX(gadget)
y = GadgetY(gadget)
w = GadgetWidth(gadget)
h = GadgetHeight(gadget)
SendMessage_(GadgetID(gadget), #LVM_GETITEMRECT, RowCount - 1,r.RECT)
NoPages = RowCount/30
SetGadgetState(gadget,-1)
PrintRequester()
If StartPrinting("ListIcon")
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0,start*1000)
ResizeGadget(gadget,x,y,r\right-12,1025)
CreateImage(1,r\right-12,1025, 24)
If GetGadgetState(popt1) = 1
start = 0
finish = RowCount
EndIf
For sc = start To finish
ShowScrollBar_(GadgetID(gadget),#SB_BOTH,0)
hdc = StartDrawing(ImageOutput(1))
If hdc
If sc >= start And sc <= finish
PrintWindow(GadgetID(gadget), hdc, 0)
EndIf
StopDrawing()
EndIf
If StartDrawing(PrinterOutput())
DrawImage(ImageID(1), 400, 400 ,ImageWidth(1)*6,ImageHeight(1)*6)
If sc < finish
NewPrinterPage()
EndIf
StopDrawing()
EndIf
InvalidateRect_(GadgetID(gadget),0,#True)
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0,1000)
Next
StopPrinting()
EndIf
If IsImage(1)
FreeImage(1)
EndIf
ResizeGadget(gadget,x,y,w,h)
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, 0, #True)
SetGadgetColor(gadget,#PB_Gadget_LineColor,#PB_Default)
SetWindowTheme_(header, "", 0)
EndProcedure
Procedure Hheight(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #HDM_LAYOUT
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = header_h
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = header_h
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure liCB(hWnd, uMsg, wParam, lParam)
Protected hdi.hd_item
result = CallWindowProc_(oldliCB, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_NOTIFY
*pnmh.NMHDR = lparam
If *pnmh\code = #NM_CUSTOMDRAW
*pnmcd.NMCUSTOMDRAW = lparam
Select *pnmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
text$=GetGadgetItemText(0, -1, *pnmcd\dwItemSpec)
If *pnmcd\uItemState & #CDIS_SELECTED
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED)
*pnmcd\rc\left+2 : *pnmcd\rc\top+1
Else
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH)
EndIf
*pnmcd\rc\bottom-1 : *pnmcd\rc\right-1
SetBkMode_(*pnmcd\hdc,#TRANSPARENT)
If *pnmcd\dwItemSpec&1
FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
SetTextColor_(*pnmcd\hdc, #Blue)
Else
FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
SetTextColor_(*pnmcd\hdc, #Red)
EndIf
If *pnmcd\rc\right>*pnmcd\rc\left
DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_CENTER|#DT_VCENTER|#DT_SINGLELINE|#DT_END_ELLIPSIS)
EndIf
result = #CDRF_SKIPDEFAULT
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure winCB(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
; Case #WM_CTLCOLORSTATIC
; Select GetProp_(lParam, "PB_ID")
; Case opt1,opt2,opt3
; SetBkMode_(wParam,#TRANSPARENT)
; SetTextColor_(wParam,$FFFFFF)
; ProcedureReturn Bkgcolor_1
; EndSelect
Case #WM_PRINTCLIENT ;Transparent Trackbars windows 7 to 10
Result = 0
Case #WM_NOTIFY
*pnmh.NMHEADER = lParam
; If *pnmh\hdr\hwndFrom = header
; If *pnmh\iItem = 0
; ProcedureReturn 1
; EndIf
; EndIf
Select *pnmh\hdr\code
Case #NM_CUSTOMDRAW
*LVCDHeader.NMLVCUSTOMDRAW = lParam
Select *LVCDHeader\nmcd\dwDrawStage ;
Case #CDDS_PREPAINT
Case #CDDS_ITEMPREPAINT
result = #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
Row = *LVCDHeader\nmcd\dwItemSpec
Col = *LVCDHeader\iSubItem
If Row & 1 And styleflag = 1
If GetDlgItem_(hwnd,wParam) = GadgetID(0)
*LVCDHeader\clrTextBk = $BAEEE8
EndIf
EndIf
result = #CDRF_DODEFAULT
EndSelect
Case #HDN_ITEMCHANGED
If editflag = 1
r.RECT\top = coled
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, rowed, r)
If coled = 0
r\left+trimx + 2
r\right = r\left + SendMessage_(GadgetID(0),#LVM_GETCOLUMNWIDTH,0,0)
EndIf
MoveWindow_(GadgetID(100),r\left+xed,r\top+yed,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(100))
EndIf
Case #HDN_DIVIDERDBLCLICK
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
editflag = 0
Case #LVN_ODCACHEHINT
result = 0
; Case #LVN_ODFINDITEM
; result = -1
Case #LVN_GETDISPINFO ;
*pnmlvdi.NMLVDISPINFO = lParam
row = *pnmlvdi\item\iItem
col = *pnmlvdi\item\iSubItem
If col = 0 And *pnmlvdi\item\mask & #LVIF_STATE
*pnmlvdi\item\stateMask = #LVIS_STATEIMAGEMASK
If SelectElement(state(),myItems()\index)
If state() = 0 And chkcol = 0
*pnmlvdi\item\state = 1<<12
Else
*pnmlvdi\item\state = 2<<12
EndIf
EndIf
EndIf
If SelectElement(myItems(), row) <> 0
If *pnmlvdi\item\mask & #LVIF_IMAGE And *pnmlvdi\item\iSubItem = 2
*pnmlvdi\item\mask & #LVIF_IMAGE
*pnmlvdi\item\iImage = PeekI(@myItems()\imgID)
EndIf
If *pnmlvdi\item\mask & #LVIF_TEXT
Select *pnmlvdi\item\iSubItem
Case 1
PokeS(*pnmlvdi\item\pszText ,Str(PeekI(@myItems()\index)))
Case 3
PokeS(*pnmlvdi\item\pszText , PeekS(@myItems()\item1),-1, #PB_Unicode)
Case 4
PokeS(*pnmlvdi\item\pszText ,StrF(PeekF(@myItems()\item2)))
Case 5
PokeS(*pnmlvdi\item\pszText , PeekS(@myItems()\item3),-1, #PB_Unicode)
EndSelect
EndIf
EndIf
Case #LVN_BEGINSCROLL
editflag = 0
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
Case #LVN_COLUMNCLICK ;Click Header item
SendMessage_(GadgetID(0), #LVM_HITTEST, 0, @HitInfo)
*nmlv.NM_LISTVIEW = lParam
sortcol = *nmlv\iSubItem
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
If sortcol <> 0 And sortcol <> 2
SortStructuredList(myItems(),sort, ssort(sortcol,0), ssort(sortcol,1))
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW | #RDW_ERASE)
cbox\fmt = #HDF_CHECKBOX | #HDF_STRING
SendMessage_(Header, #HDM_SETITEM, 1, @cbox)
For index = 0 To 5
cbox\fmt = #HDF_STRING
SendMessage_(Header, #HDM_SETITEM, index, @cbox)
Next
sort ! 1
If sort = 0
cbox\fmt = #HDF_STRING | #HDF_SORTUP
Else
cbox\fmt = #HDF_STRING | #HDF_SORTDOWN
EndIf
SendMessage_(Header, #HDM_SETITEM, sortcol, @cbox)
cbox\fmt = #HDF_CHECKBOX
SendMessage_(Header, #HDM_SETITEM, 0, @cbox)
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW | #RDW_ERASE )
EndIf
Case #NM_DBLCLK ;LV Cell Double Click
Hitinfo\pt\x = WindowMouseX(0)
HitInfo\pt\y = WindowMouseY(0) - GadgetY(0)
SendMessage_(GadgetID(0), #LVM_SUBITEMHITTEST, 0, @HitInfo)
rowed = hitinfo\iItem
coled = hitinfo\iSubItem
r.RECT\top = coled
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, rowed, r)
If coled > 2
SetParent_(GadgetID(100),GadgetID(0))
ShowWindow_(GadgetID(100),#SW_SHOW)
MoveWindow_(GadgetID(100),r\left+xed,r\top+yed,r\right-r\left,r\bottom-r\top,1)
SetGadgetText(100,GetGadgetItemText(0,rowed,coled))
SetFocus_(GadgetID(100))
editflag = 1
Else
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
EndIf
Case #NM_CLICK ;LV Row Click
Hitinfo\pt\x = WindowMouseX(0)
HitInfo\pt\y = WindowMouseY(0) - GadgetY(0)
SendMessage_(GadgetID(0), #LVM_SUBITEMHITTEST, 0, @HitInfo)
crow = Hitinfo\iItem
ccol = Hitinfo\iSubItem
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE )
EndIf
SelectElement(state(), myItems()\index)
If ccol = 0
If state() = 0
state() = 1
selno + 1
Else
state() = 0
selno - 1
EndIf
EndIf
SendMessage_(GadgetID(0), #LVM_REDRAWITEMS ,crow,crow)
EndSelect
Case #WM_SIZE
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE )
EndIf
MoveWindow_(GadgetID(0),10*dpix,10*dpiy,(WindowWidth(0)-20)*dpix,(WindowHeight(0)-45)*dpiy,1)
MoveWindow_(GadgetID(2),10*dpix,(WindowHeight(0)-30)*dpiy,120*dpix,24*dpiy,1)
Case #WM_EXITSIZEMOVE
If IsWindowVisible_(GadgetID(cont1))
ResizeGadget(cont1,(WindowWidth(0)/2-125)*dpix,(WindowHeight(0)/2-90)*dpiy,250*dpix,180*dpiy)
EndIf
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Tahoma",12)
LoadFont(1,"consolas",16,#PB_Font_Bold )
If OpenWindow(0, 0, 0, 700*dpix, 450*dpiy, "Virtual ListIconGadget", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If CreatePopupImageMenu(0, #PB_Menu_ModernLook)
MenuItem(1, "Add before")
MenuItem(2, "Get Full Text")
MenuItem(3, "Delete")
MenuBar()
MenuItem(4, "Save")
MenuItem(5, "Print")
MenuBar()
MenuItem(6, "Find")
MenuItem(7, "Scroll to")
MenuItem(10, "Quit")
EndIf
SetWindowCallback(@winCB())
ListIconGadget(0,10*dpix,10*dpiy,680*dpix,390*dpiy,"*",30,#LVS_OWNERDATA| #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect |#PB_ListIcon_MultiSelect| #PB_ListIcon_CheckBoxes)
SendMessage_(GadgetID(0), #LVM_SETEXTENDEDLISTVIEWSTYLE , #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0,2,"Index",70)
AddGadgetColumn(0,3,"Image",80)
AddGadgetColumn(0,4,"TEST2",150)
AddGadgetColumn(0,5,"TEST3",150)
AddGadgetColumn(0,6,"TEST4",150)
ButtonGadget(2,10*dpix,415*dpiy,120*dpix,24*dpiy,"List Style")
SetGadgetFont(2,FontID(0))
li = ImageList_Create_(32,32,#ILC_COLOR32| #ILC_MASK, 0, titem)
file$ = "Shell32.dll"
nimg = ExtractIconEx_(file$, -1, 0 ,0, 0)
Dim sicon(nimg)
ExtractIconEx_(file$, 0, 0 ,sicon(), nimg)
For icon = 0 To nimg
ImageList_AddIcon_(li,sicon(icon))
Next
FreeArray(sicon())
SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_SMALL, li)
header_h = 45
Header = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
SetWindowLongPtr_(Header, #GWL_STYLE, GetWindowLongPtr_(Header, #GWL_STYLE) | #HDS_CHECKBOXES)
SendMessage_(header,#HDM_SETBITMAPMARGIN,-2,0)
SendMessage_(header,#WM_SETFONT,FontID(0),0)
SendMessage_(Header, #HDM_SETITEM, 0, @cbox)
oldproc = SetWindowLongPtr_(Header, #GWL_WNDPROC, @Hheight())
;oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
SendMessage_(GadgetID(0), #LVM_SETITEMCOUNT, titem, #LVSICF_NOINVALIDATEALL| #LVSICF_NOSCROLL)
For i = 0 To titem
AddElement(state())
AddElement(myItems())
myItems()\index = i
myItems()\imgID = i
myItems()\item1 = "PureBasic " + Str(i)
myItems()\item2 = Random(titem)/14
myItems()\item3 = "TEST3 " + Str(i)
Next
StringGadget(100,0,0,0,0,"")
SetGadgetFont(100,FontID(1))
SetParent_(GadgetID(100),GadgetID(0))
;****************** Save LI ***************************
cont2 = ContainerGadget(#PB_Any,WindowWidth(0)/2-125,WindowHeight(0)/2-90,250,180,#PB_Container_Flat )
SetGadgetColor(cont2,#PB_Gadget_BackColor,$BCBCBD)
;FrameGadget(#PB_Any,2,2,GadgetWidth(cont1)-5,GadgetHeight(cont1)-5,"",#PB_Frame_Flat)
sopt1 = OptionGadget(#PB_Any,10,10,100,18,"All LI :")
SetGadgetState(sopt1,1)
; spt2 = OptionGadget(#PB_Any,10,40,100,18,"Pages :")
sopt2 = OptionGadget(#PB_Any,10,40,100,18,"Selected :")
stx1 = TextGadget(#PB_Any,20,65,100,24," From Row :")
SetGadgetColor(stx1,#PB_Gadget_BackColor,$BCBCBD)
fromp = SpinGadget(#PB_Any,160,65,80,24,0,1000,#PB_Spin_Numeric)
SetGadgetState(fromp,0)
stx2 = TextGadget(#PB_Any,20,90,100,24," To Row :")
SetGadgetColor(stx2,#PB_Gadget_BackColor,$BCBCBD)
stop = SpinGadget(#PB_Any,160,90,80,24,1,1000,#PB_Spin_Numeric)
SetGadgetState(stop,0)
sokb = ButtonGadget(#PB_Any,10,145,60,24,"Save")
scancelb = ButtonGadget(#PB_Any,80,145,60,24,"Cancel")
CloseGadgetList()
HideGadget(cont2,1)
;***********************************************************
;****************** Print LI ***************************
cont1 = ContainerGadget(#PB_Any,WindowWidth(0)/2-125,WindowHeight(0)/2-90,250,180,#PB_Container_Flat )
SetGadgetColor(cont1,#PB_Gadget_BackColor,$BCBCBD)
;FrameGadget(#PB_Any,2,2,GadgetWidth(cont1)-5,GadgetHeight(cont1)-5,"",#PB_Frame_Flat)
popt1 = OptionGadget(#PB_Any,10,10,100,18,"Document :")
SetGadgetState(popt1,1)
popt2 = OptionGadget(#PB_Any,10,40,100,18,"Pages :")
popt3 = OptionGadget(#PB_Any,10,120,100,18,"Selected :")
ptx1 = TextGadget(#PB_Any,20,65,100,24," From page :")
SetGadgetColor(ptx1,#PB_Gadget_BackColor,$BCBCBD)
pfromp = SpinGadget(#PB_Any,160,65,80,24,0,1000,#PB_Spin_Numeric)
SetGadgetState(pfromp,0)
ptx2 = TextGadget(#PB_Any,20,90,100,24," To page :")
SetGadgetColor(ptx2,#PB_Gadget_BackColor,$BCBCBD)
ptop = SpinGadget(#PB_Any,160,90,80,24,1,1000,#PB_Spin_Numeric)
SetGadgetState(ptop,0)
pokb = ButtonGadget(#PB_Any,10,145,60,24,"Print")
pcancelb = ButtonGadget(#PB_Any,80,145,60,24,"Cancel")
CloseGadgetList()
HideGadget(cont1,1)
;***********************************************************
;********************** Find Window ************************
;***********************************************************
;********************** Scroll To **************************
;***********************************************************
AddKeyboardShortcut(0,#PB_Shortcut_Return,50)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,60)
;AddKeyboardShortcut(0,#PB_Shortcut_Control|#PB_Shortcut_A,70)
styleflag = 1
SetGadgetColor(0,#PB_Gadget_BackColor,$DEFEFE)
oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
InvalidateRect_(GadgetID(0),0,1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If IsLibrary(1)
CloseLibrary(1)
EndIf
Quit = 1
Case #WM_LBUTTONUP
HdItem.HDITEM
HdItem\mask = #HDI_FORMAT
SendMessage_(Header, #HDM_GETITEM, 0, @HdItem)
If HdItem\mask & #HDI_FORMAT And HdItem\fmt & #HDF_CHECKED
chkcol = 1
chkno = 1
Else
chkcol = 0
chkno = 0
EndIf
Case #WM_RBUTTONDOWN
;If chkno = 1 Or selno > 1
;MessageRequester("Error","More than one item selected not suppoted",#MB_OK|#MB_ICONERROR)
;Else
DisplayPopupMenu(0, WindowID(0))
;EndIf
Case #PB_Event_Menu
Select EventMenu()
Case 1 ;Add
If SelectElement(myItems(), GetGadgetState(0)-1) <> 0
titem + 1
AddElement(myItems())
AddElement(state())
myItems()\imgID = 0
myItems()\index = titem
myItems()\item1 = "PureBasic " + Str(titem)
myItems()\item2 = Random(titem)/14
myItems()\item3 = "TEST3 " + Str(titem)
RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
EndIf
Case 2 ;Get full text
draw = GetGadgetState(0)
SelectElement(myItems(),draw)
Debug Str(myItems()\index)+" "+myItems()\item1+" "+StrD(myItems()\item2)+" "+myItems()\item3
Case 3 ;Delete
draw = GetGadgetState(0)
SetGadgetState(0,-1)
SelectElement(myItems(),draw)
DeleteElement(myItems())
;SelectElement(state(), draw)
;DeleteElement(state())
RemoveGadgetItem(0,draw)
titem - 1
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
Case 4
DisableGadget(0,1)
HideGadget(cont2,0)
ResizeGadget(cont2,WindowWidth(0)/2-125,WindowHeight(0)/2-90,250,180)
Case 5 ;Print
DisableGadget(0,1)
HideGadget(cont1,0)
ResizeGadget(cont1,WindowWidth(0)/2-125,WindowHeight(0)/2-90,250,180)
Case 6 ;Find
Input$ = InputRequester("Find", "Please make your input:", "")
If Input$ > ""
frow = 0
Repeat
ForEach myItems() ; Process all the elements...
input1$ = myItems()\item1
input2$ = StrF(myItems()\item2)
input3$ = myItems()\item3
If (FindString(input1$,Input$) > 0 Or FindString(input2$,Input$) > 0 Or FindString(input3$,Input$) > 0) And myItems()\index > frow
frow = myItems()\index
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, frow-1, r.RECT)
SendMessage_(GadgetID(0), #LVM_SCROLL, 0, r\top)
SetGadgetItemState(0,frow,#PB_ListIcon_Selected)
If frow > 0
Result = MessageRequester("Info","Found at Index :"+Str(frow)+#CRLF$+"Next find ?",#MB_YESNO|#MB_ICONINFORMATION)
If Result = #PB_MessageRequester_Yes
nomore = frow
Else
Break
EndIf
EndIf
EndIf
Next
Until Result = #PB_MessageRequester_No Or frow = nomore
MessageRequester("Info","Finished",#MB_OK|#MB_ICONINFORMATION)
Else
MessageRequester("Info","Nothing to find",#MB_OK|#MB_ICONINFORMATION)
EndIf
Case 7 ;Scroll to
;SendMessage_(GadgetID(0),#LVM_ENSUREVISIBLE,100000,1)
SendMessage_(GadgetID(gadget), #LVM_GETITEMRECT, 99999, r.RECT)
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0, r\top)
Case 10 ;Quit
If IsLibrary(1)
CloseLibrary(1)
EndIf
End
Case 50 ;Return to accept
If GetActiveGadget() = 100
SelectElement(myItems(), rowed)
edit$ = GetGadgetText(100)
Select coled
Case 3
myItems()\item1 = edit$
Case 4
myItems()\item2 = ValF(edit$)
Case 5
myItems()\item3 = edit$
EndSelect
;RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
SetGadgetText(100,"")
editflag = 0
EndIf
Case 60 ;Esc to dismiss
If GetActiveGadget() = 100
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
SetGadgetText(100,"")
editflag = 0
EndIf
; Case 70 ;Select all
; HitInfo.LVHITTESTINFO
; SendMessage_(GadgetID(0), #LVM_HITTEST, 0, @HitInfo)
; SetGadgetItemState(0, HitInfo\iItem, #PB_ListIcon_Selected)
; selno =10000000
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 0
draw = myItems()\index
Case 2
styleflag ! 1
If styleflag = 0
SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, 0)
SetGadgetColor(0,#PB_Gadget_BackColor,$0)
SetGadgetColor(0,#PB_Gadget_FrontColor,$FFFFFF)
Else
SetGadgetColor(0,#PB_Gadget_BackColor,$DEFEFE)
SetGadgetColor(0,#PB_Gadget_FrontColor,#PB_Default)
oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
EndIf
InvalidateRect_(GadgetID(0),0,1)
Case sfrom
start = GetGadgetState(sfromp)
Case stop
finish = GetGadgetState(stop)
Case sokb ;Save
HideGadget(cont2,1)
DisableGadget(0,0)
SaveListIconGadget(0)
Case scancelb
HideGadget(cont2,1)
DisableGadget(0,0)
Case pfromp ;From Page
start = GetGadgetState(pfromp)
Case ptop ;To Page
finish = GetGadgetState(ptop)
Case pokb ;Print
HideGadget(cont1,1)
DisableGadget(0,0)
PrintListIconGadget(0)
Case pcancelb ;Cancel printing
HideGadget(cont1,1)
DisableGadget(0,0)
EndSelect
EndSelect
Until Quit = 1
If IsLibrary(1)
CloseLibrary(1)
EndIf
EndIf
you can design the tabs then you can save the file as CSV

Last edited by RASHAD on Sun May 18, 2025 3:42 pm, edited 1 time in total.
Egypt my love
Re: ListIconGadget Events
New edition
A lot of modifications
Have fun

A lot of modifications
Have fun
Code: Select all
#LVSICF_NOINVALIDATEALL = 1
#LVSICF_NOSCROLL = 2
#LVN_ODCACHEHINT = #LVN_FIRST - 13
#HDS_CHECKBOXES = $0400
#HDF_CHECKBOX = $0040
#HDF_CHECKED = $0080
Prototype.i p_PrintWindow(hWnd, hdc, flags)
OpenLibrary(1, "User32.dll")
Global PrintWindow.p_PrintWindow = GetFunction(1, "PrintWindow")
Global start,finish,selno
Structure Licon Align 4 ;#PB_Structure_AlignC
index.i
imgID.i
item1.s
item2.f
item3.s
EndStructure
Global NewList myItems.licon() ,NewList state() ,Dim ssort(5,1)
Global oldproc,oldliCB ,styleflag,header, header_h,sort ,editflag ,row,col,crow,ccol,rowed,coled
Global start,finish,brush,chkcol ,chkno,popt1,sopt1
Global HitInfo.LVHITTESTINFO ,cbox.HDITEM,titem ,dpix.d,dpiy.d
titem = 350000
ExamineDesktops()
olddesktop = DesktopWidth(0)
dpix = DesktopResolutionX()
dpiy = DesktopResolutionY()
cbox\mask = #HDI_FORMAT
cbox\fmt = #HDF_CHECKBOX | #HDF_STRING | #HDF_BITMAP_ON_RIGHT
sort = 1
brush=CreateSolidBrush_($CCFFFF)
ssort(1,0) = OffsetOf(Licon\index)
ssort(1,1) = TypeOf(Licon\index)
ssort(3,0) = OffsetOf(Licon\item1)
ssort(3,1) = TypeOf(Licon\item1)
ssort(4,0) = OffsetOf(Licon\item2)
ssort(4,1) = TypeOf(Licon\item2)
ssort(5,0) = OffsetOf(Licon\item3)
ssort(5,1) = TypeOf(Licon\item3)
Procedure SaveListIconGadget(Gadget)
StandardFile$ = "C:\Licontest.txt"
Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
File$ = SaveFileRequester("Please choose file to save", StandardFile$, Pattern$, Pattern)
If File$
If GetGadgetState(sopt1) = 1
finish = titem
EndIf
OpenFile(0,File$)
For item = start To finish
SelectElement(myItems(),item)
WriteStringN(0,Str(myItems()\index)+" "+myItems()\item1+" "+StrD(myItems()\item2)+" "+myItems()\item3,#PB_UTF8 )
Next
CloseFile(0)
MessageRequester("Information", "You have selected following file:"+Chr(10)+File$, 0)
Else
MessageRequester("Information", "The requester was canceled.", 0)
EndIf
EndProcedure
Procedure PrintListIconGadget (Gadget)
ColumnCount = SendMessage_(Header, #HDM_GETITEMCOUNT, 0, 0)
RowCount = SendMessage_(GadgetID(Gadget),#LVM_GETITEMCOUNT, 0, 0)
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, RowCount - 1, #True)
For CC = 0 To ColumnCount - 1
SendMessage_(GadgetID(gadget), #LVM_SETCOLUMNWIDTH,CC,#LVSCW_AUTOSIZE_USEHEADER & #LVSCW_AUTOSIZE)
Next
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, 0, #True)
header_h = 35
SetWindowTheme_(header, "", "")
SetGadgetColor(gadget,#PB_Gadget_LineColor,0)
x = GadgetX(gadget)
y = GadgetY(gadget)
w = GadgetWidth(gadget)
h = GadgetHeight(gadget)
SendMessage_(GadgetID(gadget), #LVM_GETITEMRECT, RowCount - 1,r.RECT)
NoPages = RowCount/30
SetGadgetState(gadget,-1)
PrintRequester()
If StartPrinting("ListIcon")
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0,start*1000)
ResizeGadget(gadget,x,y,r\right-12,1025)
CreateImage(1,r\right-12,1025, 24)
If GetGadgetState(popt1) = 1
start = 0
finish = RowCount
EndIf
For sc = start To finish
ShowScrollBar_(GadgetID(gadget),#SB_BOTH,0)
hdc = StartDrawing(ImageOutput(1))
If hdc
If sc >= start And sc <= finish
PrintWindow(GadgetID(gadget), hdc, 0)
EndIf
StopDrawing()
EndIf
If StartDrawing(PrinterOutput())
DrawImage(ImageID(1), 400, 400 ,ImageWidth(1)*6,ImageHeight(1)*6)
If sc < finish
NewPrinterPage()
EndIf
StopDrawing()
EndIf
InvalidateRect_(GadgetID(gadget),0,#True)
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0,1000)
Next
StopPrinting()
EndIf
If IsImage(1)
FreeImage(1)
EndIf
ResizeGadget(gadget,x,y,w,h)
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, 0, #True)
SetGadgetColor(gadget,#PB_Gadget_LineColor,#PB_Default)
SetWindowTheme_(header, "", 0)
EndProcedure
Procedure Hheight(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #HDM_LAYOUT
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = header_h
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = header_h
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure liCB(hWnd, uMsg, wParam, lParam)
Protected hdi.hd_item
result = CallWindowProc_(oldliCB, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_NOTIFY
*pnmh.NMHDR = lparam
If *pnmh\code = #NM_CUSTOMDRAW
*pnmcd.NMCUSTOMDRAW = lparam
Select *pnmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
text$=GetGadgetItemText(0, -1, *pnmcd\dwItemSpec)
If *pnmcd\uItemState & #CDIS_SELECTED
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED)
*pnmcd\rc\left+2 : *pnmcd\rc\top+1
Else
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH)
EndIf
*pnmcd\rc\bottom-1 : *pnmcd\rc\right-1
SetBkMode_(*pnmcd\hdc,#TRANSPARENT)
If *pnmcd\dwItemSpec&1
FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
SetTextColor_(*pnmcd\hdc, #Blue)
Else
FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
SetTextColor_(*pnmcd\hdc, #Red)
EndIf
If *pnmcd\rc\right>*pnmcd\rc\left
DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_CENTER|#DT_VCENTER|#DT_SINGLELINE|#DT_END_ELLIPSIS)
EndIf
result = #CDRF_SKIPDEFAULT
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure winCB(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
; Case #WM_CTLCOLORSTATIC
; Select GetProp_(lParam, "PB_ID")
; Case opt1,opt2,opt3
; SetBkMode_(wParam,#TRANSPARENT)
; SetTextColor_(wParam,$FFFFFF)
; ProcedureReturn Bkgcolor_1
; EndSelect
Case #WM_PRINTCLIENT ;Transparent Trackbars windows 7 to 10
Result = 0
Case #WM_NOTIFY
*pnmh.NMHEADER = lParam
; If *pnmh\hdr\hwndFrom = header
; If *pnmh\iItem = 0
; ProcedureReturn 1
; EndIf
; EndIf
Select *pnmh\hdr\code
Case #NM_CUSTOMDRAW
*LVCDHeader.NMLVCUSTOMDRAW = lParam
Select *LVCDHeader\nmcd\dwDrawStage ;
Case #CDDS_PREPAINT
Case #CDDS_ITEMPREPAINT
result = #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
Row = *LVCDHeader\nmcd\dwItemSpec
Col = *LVCDHeader\iSubItem
If Row & 1 And styleflag = 1
If GetDlgItem_(hwnd,wParam) = GadgetID(0)
*LVCDHeader\clrTextBk = $BAEEE8
EndIf
EndIf
result = #CDRF_DODEFAULT
EndSelect
Case #HDN_ITEMCHANGED
If editflag = 1
r.RECT\top = coled
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, rowed, r)
If coled = 0
r\left+trimx + 2
r\right = r\left + SendMessage_(GadgetID(0),#LVM_GETCOLUMNWIDTH,0,0)
EndIf
MoveWindow_(GadgetID(100),r\left+xed,r\top+yed,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(100))
EndIf
Case #HDN_DIVIDERDBLCLICK
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
editflag = 0
Case #LVN_ODCACHEHINT
result = 0
; Case #LVN_ODFINDITEM
; result = -1
Case #LVN_GETDISPINFO ;
*pnmlvdi.NMLVDISPINFO = lParam
row = *pnmlvdi\item\iItem
col = *pnmlvdi\item\iSubItem
If col = 0 And *pnmlvdi\item\mask & #LVIF_STATE
*pnmlvdi\item\stateMask = #LVIS_STATEIMAGEMASK
If SelectElement(state(),myItems()\index)
If state() = 0 And chkcol = 0
*pnmlvdi\item\state = 1<<12
Else
*pnmlvdi\item\state = 2<<12
EndIf
EndIf
EndIf
If SelectElement(myItems(), row) <> 0
If *pnmlvdi\item\mask & #LVIF_IMAGE And *pnmlvdi\item\iSubItem = 2
*pnmlvdi\item\mask & #LVIF_IMAGE
*pnmlvdi\item\iImage = PeekI(@myItems()\imgID)
EndIf
If *pnmlvdi\item\mask & #LVIF_TEXT
Select *pnmlvdi\item\iSubItem
Case 1
PokeS(*pnmlvdi\item\pszText ,Str(PeekI(@myItems()\index)))
Case 3
PokeS(*pnmlvdi\item\pszText , PeekS(@myItems()\item1),-1, #PB_Unicode)
Case 4
PokeS(*pnmlvdi\item\pszText ,StrF(PeekF(@myItems()\item2)))
Case 5
PokeS(*pnmlvdi\item\pszText , PeekS(@myItems()\item3),-1, #PB_Unicode)
EndSelect
EndIf
EndIf
Case #LVN_BEGINSCROLL
editflag = 0
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
Case #LVN_COLUMNCLICK ;Click Header item
SendMessage_(GadgetID(0), #LVM_HITTEST, 0, @HitInfo)
*nmlv.NM_LISTVIEW = lParam
sortcol = *nmlv\iSubItem
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
If sortcol <> 0 And sortcol <> 2
SortStructuredList(myItems(),sort, ssort(sortcol,0), ssort(sortcol,1))
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW | #RDW_ERASE)
cbox\fmt = #HDF_CHECKBOX | #HDF_STRING
SendMessage_(Header, #HDM_SETITEM, 1, @cbox)
For index = 0 To 5
cbox\fmt = #HDF_STRING
SendMessage_(Header, #HDM_SETITEM, index, @cbox)
Next
sort ! 1
If sort = 0
cbox\fmt = #HDF_STRING | #HDF_SORTUP
Else
cbox\fmt = #HDF_STRING | #HDF_SORTDOWN
EndIf
SendMessage_(Header, #HDM_SETITEM, sortcol, @cbox)
cbox\fmt = #HDF_CHECKBOX
SendMessage_(Header, #HDM_SETITEM, 0, @cbox)
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW | #RDW_ERASE )
EndIf
Case #NM_DBLCLK ;LV Cell Double Click
Hitinfo\pt\x = WindowMouseX(0)
HitInfo\pt\y = WindowMouseY(0) - GadgetY(0)
SendMessage_(GadgetID(0), #LVM_SUBITEMHITTEST, 0, @HitInfo)
rowed = hitinfo\iItem
coled = hitinfo\iSubItem
r.RECT\top = coled
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, rowed, r)
If coled > 2
SetParent_(GadgetID(100),GadgetID(0))
ShowWindow_(GadgetID(100),#SW_SHOW)
MoveWindow_(GadgetID(100),r\left+xed,r\top+yed,r\right-r\left,r\bottom-r\top,1)
SetGadgetText(100,GetGadgetItemText(0,rowed,coled))
SetFocus_(GadgetID(100))
editflag = 1
Else
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
EndIf
Case #NM_CLICK ;LV Row Click
Hitinfo\pt\x = WindowMouseX(0)
HitInfo\pt\y = WindowMouseY(0) - GadgetY(0)
SendMessage_(GadgetID(0), #LVM_SUBITEMHITTEST, 0, @HitInfo)
crow = Hitinfo\iItem
ccol = Hitinfo\iSubItem
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE )
EndIf
SelectElement(state(), myItems()\index)
If ccol = 0
If state() = 0
state() = 1
selno + 1
Else
state() = 0
selno - 1
EndIf
EndIf
SendMessage_(GadgetID(0), #LVM_REDRAWITEMS ,crow,crow)
EndSelect
Case #WM_SIZE
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE )
EndIf
MoveWindow_(GadgetID(0),10*dpix,10*dpiy,(WindowWidth(0)-20)*dpix,(WindowHeight(0)-45)*dpiy,1)
MoveWindow_(GadgetID(2),10*dpix,(WindowHeight(0)-30)*dpiy,120*dpix,24*dpiy,1)
; Case #WM_EXITSIZEMOVE
; If IsWindowVisible_(WindowID(3))
; ResizeWindow(3,(WindowWidth(0)/2-125)*dpix,(WindowHeight(0)/2-90)*dpiy,250*dpix,180*dpiy)
; EndIf
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Tahoma",12)
LoadFont(1,"consolas",16,#PB_Font_Bold )
If OpenWindow(0, 0, 0, 700*dpix, 450*dpiy, "Virtual ListIconGadget", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If CreatePopupImageMenu(0)
MenuItem(1, "Add before ")
MenuItem(2, "Get Full Text ")
MenuItem(3, "Delete")
MenuBar()
MenuItem(4, "Save")
MenuItem(5, "Print")
MenuBar()
MenuItem(6, "Find")
MenuItem(7, "Scroll to")
MenuItem(10, "Quit")
EndIf
SetWindowCallback(@winCB())
ListIconGadget(0,10*dpix,10*dpiy,680*dpix,390*dpiy,"*",30,#LVS_OWNERDATA| #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect |#PB_ListIcon_MultiSelect| #PB_ListIcon_CheckBoxes)
SendMessage_(GadgetID(0), #LVM_SETEXTENDEDLISTVIEWSTYLE , #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0,2,"Index",70)
AddGadgetColumn(0,3,"Image",80)
AddGadgetColumn(0,4,"TEST2",150)
AddGadgetColumn(0,5,"TEST3",150)
AddGadgetColumn(0,6,"TEST4",150)
ButtonGadget(2,10*dpix,415*dpiy,120*dpix,24*dpiy,"List Style")
SetGadgetFont(2,FontID(0))
li = ImageList_Create_(32,32,#ILC_COLOR32| #ILC_MASK, 0, titem)
file$ = "Shell32.dll"
nimg = ExtractIconEx_(file$, -1, 0 ,0, 0)
Dim sicon(nimg)
ExtractIconEx_(file$, 0, 0 ,sicon(), nimg)
For icon = 0 To nimg
ImageList_AddIcon_(li,sicon(icon))
Next
FreeArray(sicon())
SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_SMALL, li)
header_h = 45
Header = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
SetWindowLongPtr_(Header, #GWL_STYLE, GetWindowLongPtr_(Header, #GWL_STYLE) | #HDS_CHECKBOXES)
SendMessage_(header,#HDM_SETBITMAPMARGIN,-2,0)
SendMessage_(header,#WM_SETFONT,FontID(0),0)
SendMessage_(Header, #HDM_SETITEM, 0, @cbox)
oldproc = SetWindowLongPtr_(Header, #GWL_WNDPROC, @Hheight())
;oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
SendMessage_(GadgetID(0), #LVM_SETITEMCOUNT, titem, #LVSICF_NOINVALIDATEALL| #LVSICF_NOSCROLL)
For i = 0 To titem
AddElement(state())
AddElement(myItems())
myItems()\index = i
myItems()\imgID = i
myItems()\item1 = "PureBasic " + Str(i)
myItems()\item2 = Random(titem)/14
myItems()\item3 = "TEST3 " + Str(i)
Next
StringGadget(100,0,0,0,0,"")
SetGadgetFont(100,FontID(1))
SetParent_(GadgetID(100),GadgetID(0))
;****************** Save LI ***************************
OpenWindow(1,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,180,"",#WS_BORDER|#PB_Window_BorderLess,WindowID(0))
UseGadgetList(WindowID(1))
FrameGadget(#PB_Any,2,2,WindowWidth(1)-4,WindowHeight(1)-4,"",#PB_Frame_Flat)
sopt1 = OptionGadget(#PB_Any,10,10,100,18,"All LI :")
SetGadgetState(sopt1,1)
; spt2 = OptionGadget(#PB_Any,10,40,100,18,"Pages :")
sopt2 = OptionGadget(#PB_Any,10,40,100,18,"Selected :")
stx1 = TextGadget(#PB_Any,20,65,100,24," From Row :")
;SetGadgetColor(stx1,#PB_Gadget_BackColor,$BCBCBD)
fromp = SpinGadget(#PB_Any,160,65,80,24,0,1000,#PB_Spin_Numeric)
SetGadgetState(fromp,0)
stx2 = TextGadget(#PB_Any,20,90,100,24," To Row :")
;SetGadgetColor(stx2,#PB_Gadget_BackColor,$BCBCBD)
stop = SpinGadget(#PB_Any,160,90,80,24,1,1000,#PB_Spin_Numeric)
SetGadgetState(stop,0)
sokb = ButtonGadget(#PB_Any,10,145,60,24,"Save")
scancelb = ButtonGadget(#PB_Any,80,145,60,24,"Cancel")
HideWindow(1,1)
;***********************************************************
;****************** Print LI ***************************
OpenWindow(2,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,180,"",#WS_BORDER|#PB_Window_BorderLess,WindowID(0))
UseGadgetList(WindowID(2))
FrameGadget(#PB_Any,2,2,WindowWidth(2)-4,WindowHeight(2)-4,"",#PB_Frame_Flat)
popt1 = OptionGadget(#PB_Any,10,10,100,18,"Document :")
SetGadgetState(popt1,1)
popt2 = OptionGadget(#PB_Any,10,40,100,18,"Pages :")
popt3 = OptionGadget(#PB_Any,10,120,100,18,"Selected :")
ptx1 = TextGadget(#PB_Any,20,65,100,24," From page :")
;SetGadgetColor(ptx1,#PB_Gadget_BackColor,$BCBCBD)
pfromp = SpinGadget(#PB_Any,160,65,80,24,0,1000,#PB_Spin_Numeric)
SetGadgetState(pfromp,0)
ptx2 = TextGadget(#PB_Any,20,90,100,24," To page :")
;SetGadgetColor(ptx2,#PB_Gadget_BackColor,$BCBCBD)
ptop = SpinGadget(#PB_Any,160,90,80,24,1,1000,#PB_Spin_Numeric)
SetGadgetState(ptop,0)
pokb = ButtonGadget(#PB_Any,10,145,60,24,"Print")
pcancelb = ButtonGadget(#PB_Any,80,145,60,24,"Cancel")
HideWindow(2,1)
;***********************************************************
UseGadgetList(WindowID(0))
;********************** Find Window ************************
;***********************************************************
;********************** Scroll To **************************
;***********************************************************
AddKeyboardShortcut(0,#PB_Shortcut_Return,50)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,60)
;AddKeyboardShortcut(0,#PB_Shortcut_Control|#PB_Shortcut_A,70)
styleflag = 1
SetGadgetColor(0,#PB_Gadget_BackColor,$DEFEFE)
oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
InvalidateRect_(GadgetID(0),0,1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If IsLibrary(1)
CloseLibrary(1)
EndIf
Quit = 1
Case #WM_LBUTTONUP
HdItem.HDITEM
HdItem\mask = #HDI_FORMAT
SendMessage_(Header, #HDM_GETITEM, 0, @HdItem)
If HdItem\mask & #HDI_FORMAT And HdItem\fmt & #HDF_CHECKED
chkcol = 1
chkno = 1
Else
chkcol = 0
chkno = 0
EndIf
Case #WM_RBUTTONDOWN
;SetActiveGadget(-1)
DisplayPopupMenu(0, WindowID(0))
Case #PB_Event_Menu
Select EventMenu()
Case 1 ;Add
If SelectElement(myItems(), GetGadgetState(0)-1) <> 0
titem + 1
AddElement(myItems())
AddElement(state())
myItems()\imgID = 0
myItems()\index = titem
myItems()\item1 = "PureBasic " + Str(titem)
myItems()\item2 = Random(titem)/14
myItems()\item3 = "TEST3 " + Str(titem)
RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
EndIf
Case 2 ;Get full text
draw = GetGadgetState(0)
SelectElement(myItems(),draw)
Debug Str(myItems()\index)+" "+myItems()\item1+" "+StrD(myItems()\item2)+" "+myItems()\item3
Case 3 ;Delete
draw = GetGadgetState(0)
SetGadgetState(0,-1)
SelectElement(myItems(),draw)
DeleteElement(myItems())
;SelectElement(state(), draw)
;DeleteElement(state())
RemoveGadgetItem(0,draw)
titem - 1
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
Case 4
HideWindow(1,0)
ResizeWindow(1,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,180)
Case 5 ;Print
HideWindow(2,0)
ResizeWindow(1,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,180)
Case 6 ;Find
Input$ = InputRequester("Find", "Please make your input:", "")
If Input$ > ""
frow = 0
Repeat
ForEach myItems() ; Process all the elements...
input1$ = myItems()\item1
input2$ = StrF(myItems()\item2)
input3$ = myItems()\item3
If (FindString(input1$,Input$) > 0 Or FindString(input2$,Input$) > 0 Or FindString(input3$,Input$) > 0) And myItems()\index > frow
frow = myItems()\index
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, frow-1, r.RECT)
SendMessage_(GadgetID(0), #LVM_SCROLL, 0, r\top)
SetGadgetItemState(0,frow,#PB_ListIcon_Selected)
If frow > 0
Result = MessageRequester("Info","Found at Index :"+Str(frow)+#CRLF$+"Next find ?",#MB_YESNO|#MB_ICONINFORMATION)
If Result = #PB_MessageRequester_Yes
nomore = frow
Else
Break
EndIf
EndIf
EndIf
Next
Until Result = #PB_MessageRequester_No Or frow = nomore
MessageRequester("Info","Finished",#MB_OK|#MB_ICONINFORMATION)
Else
MessageRequester("Info","Nothing to find",#MB_OK|#MB_ICONINFORMATION)
EndIf
Case 7 ;Scroll to
;SendMessage_(GadgetID(0),#LVM_ENSUREVISIBLE,100000,1)
SendMessage_(GadgetID(gadget), #LVM_GETITEMRECT, 99999, r.RECT)
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0, r\top)
Case 10 ;Quit
If IsLibrary(1)
CloseLibrary(1)
EndIf
End
Case 50 ;Return to accept
If GetActiveGadget() = 100
SelectElement(myItems(), rowed)
edit$ = GetGadgetText(100)
Select coled
Case 3
myItems()\item1 = edit$
Case 4
myItems()\item2 = ValF(edit$)
Case 5
myItems()\item3 = edit$
EndSelect
;RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
SetGadgetText(100,"")
editflag = 0
EndIf
Case 60 ;Esc to dismiss
If GetActiveGadget() = 100
If IsWindowVisible_(GadgetID(100))
SetParent_(GadgetID(100),0)
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
SetGadgetText(100,"")
editflag = 0
EndIf
; Case 70 ;Select all
; HitInfo.LVHITTESTINFO
; SendMessage_(GadgetID(0), #LVM_HITTEST, 0, @HitInfo)
; SetGadgetItemState(0, HitInfo\iItem, #PB_ListIcon_Selected)
; selno =10000000
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 0
draw = myItems()\index
Case 2
styleflag ! 1
If styleflag = 0
SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, 0)
SetGadgetColor(0,#PB_Gadget_BackColor,$0)
SetGadgetColor(0,#PB_Gadget_FrontColor,$FFFFFF)
Else
SetGadgetColor(0,#PB_Gadget_BackColor,$DEFEFE)
SetGadgetColor(0,#PB_Gadget_FrontColor,#PB_Default)
oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
EndIf
InvalidateRect_(GadgetID(0),0,1)
Case sfrom
start = GetGadgetState(sfromp)
Case stop
finish = GetGadgetState(stop)
Case sokb ;Save
HideWindow(1,1)
DisableGadget(0,0)
SaveListIconGadget(0)
Case scancelb
HideWindow(1,1)
DisableGadget(0,0)
Case pfromp ;From Page
start = GetGadgetState(pfromp)
Case ptop ;To Page
finish = GetGadgetState(ptop)
Case pokb ;Print
HideWindow(2,1)
DisableGadget(0,0)
PrintListIconGadget(0)
Case pcancelb ;Cancel printing
HideWindow(2,1)
DisableGadget(0,0)
EndSelect
EndSelect
Until Quit = 1
If IsLibrary(1)
CloseLibrary(1)
EndIf
EndIf
Egypt my love
-
- User
- Posts: 81
- Joined: Thu May 02, 2019 3:57 am
- Location: USA
- Contact:
Re: ListIconGadget Events
Tua: Thank you for your replies. It was very useful and got me started on the right road.
Shardik: Thank you for your example. This was very useful also.
Rashad: I am working with your code. It looks great !!! I am thinking of turning it into a Module, and separate it from the demo code. Once I do it, I will post it. Thank you.
Robert
Shardik: Thank you for your example. This was very useful also.
Rashad: I am working with your code. It looks great !!! I am thinking of turning it into a Module, and separate it from the demo code. Once I do it, I will post it. Thank you.
Robert
Re: ListIconGadget Events
Hi
Added LoadData() to populate the ListIcon() from previously Saved data file
Bug fixed correspondingly
Still very fast (350000 row 4 items each)
Edit :Code modified
Added LoadData() to populate the ListIcon() from previously Saved data file
Bug fixed correspondingly
Still very fast (350000 row 4 items each)

Code: Select all
#LVSICF_NOINVALIDATEALL = 1
#LVSICF_NOSCROLL = 2
#LVN_ODCACHEHINT = #LVN_FIRST - 13
#HDS_CHECKBOXES = $0400
#HDF_CHECKBOX = $0040
#HDF_CHECKED = $0080
Prototype.i p_PrintWindow(hWnd, hdc, flags)
OpenLibrary(1, "User32.dll")
Global PrintWindow.p_PrintWindow = GetFunction(1, "PrintWindow")
Global start,finish,selno
Structure Licon Align 4 ;#PB_Structure_AlignC
index.i
imgID.i
item1.s
item2.f
item3.s
EndStructure
Global NewList myItems.licon() ,NewList state() ,Dim ssort(5,1)
Global oldproc,oldliCB ,styleflag,header, header_h,sort ,editflag ,row,col,crow,ccol,rowed,coled
Global start,finish,brush,chkcol ,chkno,popt1,sopt1
Global HitInfo.LVHITTESTINFO ,cbox.HDITEM,titem ,dpix.d,dpiy.d
titem = 350000
ExamineDesktops()
olddesktop = DesktopWidth(0)
dpix = DesktopResolutionX()
dpiy = DesktopResolutionY()
cbox\mask = #HDI_FORMAT
cbox\fmt = #HDF_CHECKBOX | #HDF_STRING | #HDF_BITMAP_ON_RIGHT
sort = 1
brush=CreateSolidBrush_($CCFFFF)
ssort(1,0) = OffsetOf(Licon\index)
ssort(1,1) = TypeOf(Licon\index)
ssort(3,0) = OffsetOf(Licon\item1)
ssort(3,1) = TypeOf(Licon\item1)
ssort(4,0) = OffsetOf(Licon\item2)
ssort(4,1) = TypeOf(Licon\item2)
ssort(5,0) = OffsetOf(Licon\item3)
ssort(5,1) = TypeOf(Licon\item3)
Procedure LoadData()
StandardFile$ = "C:\*.txt"
Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
File$ = OpenFileRequester("Please choose file to load", StandardFile$, Pattern$, Pattern)
If File$
ReadFile(0,File$)
ReadStringFormat(0)
While Eof(0) = 0
AddElement(state())
AddElement(myItems())
txt$ = ReadString(0,#PB_UTF8)
result$ = StringField(txt$, 1, ";")
myItems()\index = Val(result$)
result$ = StringField(txt$, 2, ";")
myItems()\item1 = result$
result$ = StringField(txt$, 3, ";")
myItems()\item2 = ValF(result$)
result$ = StringField(txt$, 4, ";")
myItems()\item3 = result$
Wend
CloseFile(0)
MessageRequester("Information", "You have selected following file:"+Chr(10)+File$, 0)
Else
MessageRequester("Information", "The requester was canceled.", 0)
EndIf
EndProcedure
Procedure SaveListIconGadget(Gadget)
StandardFile$ = "C:\Licontest.txt"
Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
File$ = SaveFileRequester("Please choose file to save", StandardFile$, Pattern$, Pattern)
If File$
If GetGadgetState(sopt1) = 1
finish = titem
EndIf
OpenFile(0,File$)
For item = start To finish
SelectElement(myItems(),item)
WriteStringN(0,Str(myItems()\index)+";"+myItems()\item1+";"+StrD(myItems()\item2)+";"+myItems()\item3,#PB_UTF8 )
If GetAsyncKeyState_(#VK_ESCAPE) & $8000 = $8000
Break
EndIf
Next
CloseFile(0)
MessageRequester("Information", "You have selected following file:"+Chr(10)+File$, 0)
Else
MessageRequester("Information", "The requester was canceled.", 0)
EndIf
EndProcedure
Procedure PrintListIconGadget (Gadget)
ColumnCount = SendMessage_(Header, #HDM_GETITEMCOUNT, 0, 0)
RowCount = SendMessage_(GadgetID(Gadget),#LVM_GETITEMCOUNT, 0, 0)
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, RowCount - 1, #True)
For CC = 0 To ColumnCount - 1
SendMessage_(GadgetID(gadget), #LVM_SETCOLUMNWIDTH,CC,#LVSCW_AUTOSIZE_USEHEADER & #LVSCW_AUTOSIZE)
Next
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, 0, #True)
header_h = 35
SetWindowTheme_(header, "", "")
SetGadgetColor(gadget,#PB_Gadget_LineColor,0)
x = GadgetX(gadget)
y = GadgetY(gadget)
w = GadgetWidth(gadget)
h = GadgetHeight(gadget)
SendMessage_(GadgetID(gadget), #LVM_GETITEMRECT, RowCount - 1,r.RECT)
NoPages = RowCount/30
SetGadgetState(gadget,-1)
PrintRequester()
If StartPrinting("ListIcon")
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0,start*1000)
ResizeGadget(gadget,x,y,r\right-12,1025)
CreateImage(1,r\right-12,1025, 24)
If GetGadgetState(popt1) = 1
start = 0
finish = RowCount
EndIf
For sc = start To finish
ShowScrollBar_(GadgetID(gadget),#SB_BOTH,0)
hdc = StartDrawing(ImageOutput(1))
If hdc
If sc >= start And sc <= finish
PrintWindow(GadgetID(gadget), hdc, 0)
EndIf
StopDrawing()
EndIf
If StartDrawing(PrinterOutput())
DrawImage(ImageID(1), 400, 400 ,ImageWidth(1)*6,ImageHeight(1)*6)
If sc < finish
NewPrinterPage()
EndIf
StopDrawing()
EndIf
InvalidateRect_(GadgetID(gadget),0,#True)
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0,1000)
If GetAsyncKeyState_(#VK_ESCAPE) & $8000 = $8000
Break
EndIf
Next
StopPrinting()
EndIf
If IsImage(1)
FreeImage(1)
EndIf
ResizeGadget(gadget,x,y,w,h)
SendMessage_(GadgetID(gadget), #LVM_ENSUREVISIBLE, 0, #True)
SetGadgetColor(gadget,#PB_Gadget_LineColor,#PB_Default)
SetWindowTheme_(header, "", 0)
EndProcedure
Procedure Hheight(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #HDM_LAYOUT
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = header_h
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = header_h
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure liCB(hWnd, uMsg, wParam, lParam)
Protected hdi.hd_item
result = CallWindowProc_(oldliCB, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_NOTIFY
*pnmh.NMHDR = lparam
If *pnmh\code = #NM_CUSTOMDRAW
*pnmcd.NMCUSTOMDRAW = lparam
Select *pnmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
text$=GetGadgetItemText(0, -1, *pnmcd\dwItemSpec)
If *pnmcd\uItemState & #CDIS_SELECTED
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED)
*pnmcd\rc\left+2 : *pnmcd\rc\top+1
Else
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH)
EndIf
*pnmcd\rc\bottom-1 : *pnmcd\rc\right-1
SetBkMode_(*pnmcd\hdc,#TRANSPARENT)
If *pnmcd\dwItemSpec&1
FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
SetTextColor_(*pnmcd\hdc, #Blue)
Else
FillRect_(*pnmcd\hdc, *pnmcd\rc, brush)
SetTextColor_(*pnmcd\hdc, #Red)
EndIf
If *pnmcd\rc\right>*pnmcd\rc\left
DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc, #DT_CENTER|#DT_VCENTER|#DT_SINGLELINE|#DT_END_ELLIPSIS)
EndIf
result = #CDRF_SKIPDEFAULT
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure winCB(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
; Case #WM_CTLCOLORSTATIC
; Select GetProp_(lParam, "PB_ID")
; Case opt1,opt2,opt3
; SetBkMode_(wParam,#TRANSPARENT)
; SetTextColor_(wParam,$FFFFFF)
; ProcedureReturn Bkgcolor_1
; EndSelect
Case #WM_PRINTCLIENT ;Transparent Trackbars windows 7 to 10
Result = 0
Case #WM_NOTIFY
*pnmh.NMHEADER = lParam
; If *pnmh\hdr\hwndFrom = header
; If *pnmh\iItem = 0
; ProcedureReturn 1
; EndIf
; EndIf
Select *pnmh\hdr\code
Case #NM_CUSTOMDRAW
*LVCDHeader.NMLVCUSTOMDRAW = lParam
Select *LVCDHeader\nmcd\dwDrawStage ;
Case #CDDS_PREPAINT
Case #CDDS_ITEMPREPAINT
result = #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
Row = *LVCDHeader\nmcd\dwItemSpec
Col = *LVCDHeader\iSubItem
If Row & 1 And styleflag = 1
If GetDlgItem_(hwnd,wParam) = GadgetID(0)
*LVCDHeader\clrTextBk = $BAEEE8
EndIf
EndIf
result = #CDRF_DODEFAULT
EndSelect
Case #HDN_ITEMCHANGED
If editflag = 1
r.RECT\top = coled
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, rowed, r)
If coled = 0
r\left+trimx + 2
r\right = r\left + SendMessage_(GadgetID(0),#LVM_GETCOLUMNWIDTH,0,0)
EndIf
HideGadget(100,1)
EndIf
Case #HDN_DIVIDERDBLCLICK
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
editflag = 0
Case #LVN_ODCACHEHINT
result = 0
; Case #LVN_ODFINDITEM
; result = -1
Case #LVN_GETDISPINFO ;
*pnmlvdi.NMLVDISPINFO = lParam
row = *pnmlvdi\item\iItem
col = *pnmlvdi\item\iSubItem
If col = 0 And *pnmlvdi\item\mask & #LVIF_STATE
*pnmlvdi\item\stateMask = #LVIS_STATEIMAGEMASK
If SelectElement(state(),myItems()\index)
If state() = 0 And chkcol = 0
*pnmlvdi\item\state = 1<<12
Else
*pnmlvdi\item\state = 2<<12
EndIf
EndIf
EndIf
If SelectElement(myItems(), row) <> 0
If *pnmlvdi\item\mask & #LVIF_IMAGE And *pnmlvdi\item\iSubItem = 2
*pnmlvdi\item\mask & #LVIF_IMAGE
*pnmlvdi\item\iImage = PeekI(@myItems()\imgID)
EndIf
If *pnmlvdi\item\mask & #LVIF_TEXT
Select *pnmlvdi\item\iSubItem
Case 1
PokeS(*pnmlvdi\item\pszText ,Str(PeekI(@myItems()\index)))
Case 3
PokeS(*pnmlvdi\item\pszText , PeekS(@myItems()\item1),-1, #PB_Unicode)
Case 4
PokeS(*pnmlvdi\item\pszText ,StrF(PeekF(@myItems()\item2)))
Case 5
PokeS(*pnmlvdi\item\pszText , PeekS(@myItems()\item3),-1, #PB_Unicode)
EndSelect
EndIf
EndIf
Case #LVN_BEGINSCROLL
editflag = 0
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
Case #LVN_COLUMNCLICK ;Click Header item
SendMessage_(GadgetID(0), #LVM_HITTEST, 0, @HitInfo)
*nmlv.NM_LISTVIEW = lParam
sortcol = *nmlv\iSubItem
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
If sortcol <> 0 And sortcol <> 2
SortStructuredList(myItems(),sort, ssort(sortcol,0), ssort(sortcol,1))
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW | #RDW_ERASE)
cbox\fmt = #HDF_CHECKBOX | #HDF_STRING
SendMessage_(Header, #HDM_SETITEM, 1, @cbox)
For index = 0 To 5
cbox\fmt = #HDF_STRING
SendMessage_(Header, #HDM_SETITEM, index, @cbox)
Next
sort ! 1
If sort = 0
cbox\fmt = #HDF_STRING | #HDF_SORTUP
Else
cbox\fmt = #HDF_STRING | #HDF_SORTDOWN
EndIf
SendMessage_(Header, #HDM_SETITEM, sortcol, @cbox)
cbox\fmt = #HDF_CHECKBOX
SendMessage_(Header, #HDM_SETITEM, 0, @cbox)
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW | #RDW_ERASE )
EndIf
Case #NM_DBLCLK ;LV Cell Double Click
Hitinfo\pt\x = WindowMouseX(0)
HitInfo\pt\y = WindowMouseY(0) - GadgetY(0)
SendMessage_(GadgetID(0), #LVM_SUBITEMHITTEST, 0, @HitInfo)
rowed = hitinfo\iItem
coled = hitinfo\iSubItem
r.RECT\top = coled
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, rowed, r)
If coled > 2
ShowWindow_(GadgetID(100),#SW_SHOW)
MoveWindow_(GadgetID(100),r\left+16,r\top+16,r\right-r\left,r\bottom-r\top,1)
SetGadgetText(100,GetGadgetItemText(0,rowed,coled))
SetFocus_(GadgetID(100))
editflag = 1
Else
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
EndIf
Case #NM_CLICK ;LV Row Click
Hitinfo\pt\x = WindowMouseX(0)
HitInfo\pt\y = WindowMouseY(0) - GadgetY(0)
SendMessage_(GadgetID(0), #LVM_SUBITEMHITTEST, 0, @HitInfo)
crow = Hitinfo\iItem
ccol = Hitinfo\iSubItem
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE )
EndIf
SelectElement(state(), myItems()\index)
If ccol = 0
If state() = 0
state() = 1
selno + 1
Else
state() = 0
selno - 1
EndIf
EndIf
SendMessage_(GadgetID(0), #LVM_REDRAWITEMS ,crow,crow)
EndSelect
Case #WM_SIZE,#WM_MOVE
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE )
EndIf
MoveWindow_(GadgetID(0),10*dpix,10*dpiy,(WindowWidth(0)-20)*dpix,(WindowHeight(0)-45)*dpiy,1)
MoveWindow_(GadgetID(2),10*dpix,(WindowHeight(0)-30)*dpiy,120*dpix,24*dpiy,1)
If IsWindow(1) And IsWindowVisible_(WindowID(1))
ResizeWindow(1,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,210)
EndIf
If IsWindow(2) And IsWindowVisible_(WindowID(2))
ResizeWindow(2,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,210)
EndIf
; Case #WM_EXITSIZEMOVE
; If IsWindowVisible_(WindowID(3))
; ResizeWindow(3,(WindowWidth(0)/2-125)*dpix,(WindowHeight(0)/2-90)*dpiy,250*dpix,180*dpiy)
; EndIf
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Tahoma",14)
;LoadFont(1,"consolas",16,#PB_Font_Bold )
If OpenWindow(0, 0, 0, 700*dpix, 450*dpiy, "Virtual ListIconGadget", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If CreatePopupImageMenu(0)
MenuItem(1, "Add before ")
MenuItem(2, "Get Full Text ")
MenuItem(3, "Delete")
MenuBar()
MenuItem(4, "Save")
MenuItem(5, "Print")
MenuBar()
MenuItem(6, "Find")
MenuItem(7, "Scroll to")
MenuItem(10, "Quit")
EndIf
ListIconGadget(0,10*dpix,10*dpiy,680*dpix,390*dpiy,"*",30,#LVS_OWNERDATA| #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect |#PB_ListIcon_MultiSelect| #PB_ListIcon_CheckBoxes)
SendMessage_(GadgetID(0), #LVM_SETEXTENDEDLISTVIEWSTYLE , #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0,2,"Index",70)
AddGadgetColumn(0,3,"Image",80)
AddGadgetColumn(0,4,"TEST2",150)
AddGadgetColumn(0,5,"TEST3",150)
AddGadgetColumn(0,6,"TEST4",150)
ButtonGadget(2,10*dpix,415*dpiy,120*dpix,24*dpiy,"List Style")
SetGadgetFont(2,FontID(0))
li = ImageList_Create_(32,32,#ILC_COLOR32| #ILC_MASK, 0, titem)
file$ = "Shell32.dll"
nimg = ExtractIconEx_(file$, -1, 0 ,0, 0)
Dim sicon(nimg)
ExtractIconEx_(file$, 0, 0 ,sicon(), nimg)
For icon = 0 To nimg
ImageList_AddIcon_(li,sicon(icon))
Next
FreeArray(sicon())
SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_SMALL, li)
header_h = 45
Header = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
SetWindowLongPtr_(Header, #GWL_STYLE, GetWindowLongPtr_(Header, #GWL_STYLE) | #HDS_CHECKBOXES)
SendMessage_(header,#HDM_SETBITMAPMARGIN,-2,0)
SendMessage_(header,#WM_SETFONT,FontID(0),0)
SendMessage_(Header, #HDM_SETITEM, 0, @cbox)
oldproc = SetWindowLongPtr_(Header, #GWL_WNDPROC, @Hheight())
SendMessage_(GadgetID(0), #LVM_SETITEMCOUNT, titem, #LVSICF_NOINVALIDATEALL| #LVSICF_NOSCROLL)
LoadData()
; For i = 0 To titem
; AddElement(state())
; AddElement(myItems())
; myItems()\index = i
; myItems()\imgID = i
; myItems()\item1 = "PureBasic " + Str(i)
; myItems()\item2 = Random(titem)/14
; myItems()\item3 = "TEST3 " + Str(i)
; Next
SetWindowCallback(@winCB())
StringGadget(100,0,0,0,0,"")
SetGadgetFont(100,FontID(0))
SetGadgetColor(100,#PB_Gadget_FrontColor,$0000FF)
;****************** Save LI ***************************
OpenWindow(1,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,210,"",#WS_BORDER|#PB_Window_BorderLess,WindowID(0))
UseGadgetList(WindowID(1))
FrameGadget(#PB_Any,2,2,WindowWidth(1)-4,WindowHeight(1)-4,"",#PB_Frame_Flat)
sopt1 = OptionGadget(#PB_Any,10,10,100,18,"All LI :")
SetGadgetState(sopt1,1)
; spt2 = OptionGadget(#PB_Any,10,40,100,18,"Pages :")
sopt2 = OptionGadget(#PB_Any,10,40,100,18,"Selected :")
stx1 = TextGadget(#PB_Any,20,65,100,24," From Row :")
;SetGadgetColor(stx1,#PB_Gadget_BackColor,$BCBCBD)
fromp = SpinGadget(#PB_Any,160,65,80,24,0,1000,#PB_Spin_Numeric)
SetGadgetState(fromp,0)
stx2 = TextGadget(#PB_Any,20,90,100,24," To Row :")
;SetGadgetColor(stx2,#PB_Gadget_BackColor,$BCBCBD)
stop = SpinGadget(#PB_Any,160,90,80,24,1,1000,#PB_Spin_Numeric)
SetGadgetState(stop,0)
sokb = ButtonGadget(#PB_Any,10,145,60,24,"Save")
scancelb = ButtonGadget(#PB_Any,80,145,60,24,"Cancel")
struncate = TextGadget(#PB_Any,2,180,250,24,"Escape to truncate",#SS_CENTER|#SS_CENTERIMAGE)
SetGadgetColor(struncate,#PB_Gadget_FrontColor ,$0000FF)
HideWindow(1,1)
;***********************************************************
;****************** Print LI ***************************
OpenWindow(2,WindowX(0)+WindowWidth(0)/2-125,WindowY(0)+WindowHeight(0)/2-90,250,210,"",#WS_BORDER|#PB_Window_BorderLess,WindowID(0))
UseGadgetList(WindowID(2))
FrameGadget(#PB_Any,2,2,WindowWidth(2)-4,WindowHeight(2)-4,"",#PB_Frame_Flat)
popt1 = OptionGadget(#PB_Any,10,10,100,18,"Document :")
SetGadgetState(popt1,1)
popt2 = OptionGadget(#PB_Any,10,40,100,18,"Pages :")
popt3 = OptionGadget(#PB_Any,10,120,100,18,"Selected :")
ptx1 = TextGadget(#PB_Any,20,65,100,24," From page :")
;SetGadgetColor(ptx1,#PB_Gadget_BackColor,$BCBCBD)
pfromp = SpinGadget(#PB_Any,160,65,80,24,0,1000,#PB_Spin_Numeric)
SetGadgetState(pfromp,0)
ptx2 = TextGadget(#PB_Any,20,90,100,24," To page :")
;SetGadgetColor(ptx2,#PB_Gadget_BackColor,$BCBCBD)
ptop = SpinGadget(#PB_Any,160,90,80,24,1,1000,#PB_Spin_Numeric)
SetGadgetState(ptop,0)
pokb = ButtonGadget(#PB_Any,10,145,60,24,"Print")
pcancelb = ButtonGadget(#PB_Any,80,145,60,24,"Cancel")
ptruncate = TextGadget(#PB_Any,2,180,250,24,"Escape to truncate",#SS_CENTER|#SS_CENTERIMAGE)
SetGadgetColor(ptruncate,#PB_Gadget_FrontColor ,$0000FF)
HideWindow(2,1)
;***********************************************************
UseGadgetList(WindowID(0))
;********************** Find Window ************************
;***********************************************************
;********************** Scroll To **************************
;***********************************************************
AddKeyboardShortcut(0,#PB_Shortcut_Return,50)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,60)
;AddKeyboardShortcut(0,#PB_Shortcut_Control|#PB_Shortcut_A,70)
styleflag = 1
SetGadgetColor(0,#PB_Gadget_BackColor,$DEFEFE)
oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
InvalidateRect_(GadgetID(0),0,1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If IsLibrary(1)
CloseLibrary(1)
EndIf
Quit = 1
Case #WM_LBUTTONUP
HdItem.HDITEM
HdItem\mask = #HDI_FORMAT
SendMessage_(Header, #HDM_GETITEM, 0, @HdItem)
If HdItem\mask & #HDI_FORMAT And HdItem\fmt & #HDF_CHECKED
chkcol = 1
chkno = 1
Else
chkcol = 0
chkno = 0
EndIf
Case #WM_RBUTTONDOWN
;SetActiveGadget(-1)
DisplayPopupMenu(0, WindowID(0))
Case #PB_Event_Menu
Select EventMenu()
Case 1 ;Add
If SelectElement(myItems(), GetGadgetState(0)-1) <> 0
titem + 1
AddElement(myItems())
AddElement(state())
myItems()\imgID = 0
myItems()\index = titem
myItems()\item1 = "PureBasic " + Str(titem)
myItems()\item2 = Random(titem)/14
myItems()\item3 = "TEST3 " + Str(titem)
RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
EndIf
Case 2 ;Get full text
draw = GetGadgetState(0)
SelectElement(myItems(),draw)
Debug Str(myItems()\index)+" "+myItems()\item1+" "+StrD(myItems()\item2)+" "+myItems()\item3
Case 3 ;Delete
draw = GetGadgetState(0)
SetGadgetState(0,-1)
SelectElement(myItems(),draw)
DeleteElement(myItems())
;SelectElement(state(), draw)
;DeleteElement(state())
RemoveGadgetItem(0,draw)
titem - 1
RedrawWindow_(GadgetID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
Case 4
HideWindow(1,0)
Case 5 ;Print
HideWindow(2,0)
Case 6 ;Find
Input$ = InputRequester("Find", "Please make your input:", "")
If Input$ > ""
frow = 0
Repeat
ForEach myItems() ; Process all the elements...
input1$ = myItems()\item1
input2$ = StrF(myItems()\item2)
input3$ = myItems()\item3
If (FindString(input1$,Input$) > 0 Or FindString(input2$,Input$) > 0 Or FindString(input3$,Input$) > 0) And myItems()\index > frow
frow = myItems()\index
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, frow-1, r.RECT)
SendMessage_(GadgetID(0), #LVM_SCROLL, 0, r\top)
SetGadgetItemState(0,frow,#PB_ListIcon_Selected)
If frow > 0
Result = MessageRequester("Info","Found at Index :"+Str(frow)+#CRLF$+"Next find ?",#MB_YESNO|#MB_ICONINFORMATION)
If Result = #PB_MessageRequester_Yes
nomore = frow
Else
Break
EndIf
EndIf
EndIf
Next
Until Result = #PB_MessageRequester_No Or frow = nomore
MessageRequester("Info","Finished",#MB_OK|#MB_ICONINFORMATION)
Else
MessageRequester("Info","Nothing to find",#MB_OK|#MB_ICONINFORMATION)
EndIf
Case 7 ;Scroll to
;SendMessage_(GadgetID(0),#LVM_ENSUREVISIBLE,100000,1)
SendMessage_(GadgetID(gadget), #LVM_GETITEMRECT, 99999, r.RECT)
SendMessage_(GadgetID(gadget), #LVM_SCROLL, 0, r\top)
Case 10 ;Quit
If IsLibrary(1)
CloseLibrary(1)
EndIf
End
Case 50 ;Return to accept
If GetActiveGadget() = 100
SelectElement(myItems(), rowed)
edit$ = GetGadgetText(100)
Select coled
Case 3
myItems()\item1 = edit$
Case 4
myItems()\item2 = ValF(edit$)
Case 5
myItems()\item3 = edit$
EndSelect
;RedrawWindow_(WindowID(0),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW| #RDW_ERASE)
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
SetGadgetText(100,"")
editflag = 0
EndIf
Case 60 ;Esc to dismiss
If GetActiveGadget() = 100
If IsWindowVisible_(GadgetID(100))
ShowWindow_(GadgetID(100),#SW_HIDE)
EndIf
SetGadgetText(100,"")
editflag = 0
EndIf
; Case 70 ;Select all
; HitInfo.LVHITTESTINFO
; SendMessage_(GadgetID(0), #LVM_HITTEST, 0, @HitInfo)
; SetGadgetItemState(0, HitInfo\iItem, #PB_ListIcon_Selected)
; selno =10000000
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 0
draw = myItems()\index
Case 2
styleflag ! 1
If styleflag = 0
SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, 0)
SetGadgetColor(0,#PB_Gadget_BackColor,$0)
SetGadgetColor(0,#PB_Gadget_FrontColor,$FFFFFF)
Else
SetGadgetColor(0,#PB_Gadget_BackColor,$DEFEFE)
SetGadgetColor(0,#PB_Gadget_FrontColor,#PB_Default)
oldliCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
EndIf
InvalidateRect_(GadgetID(0),0,1)
Case sfrom
start = GetGadgetState(sfromp)
Case stop
finish = GetGadgetState(stop)
Case sokb ;Save
DisableGadget(0,0)
SaveListIconGadget(0)
HideWindow(1,1)
Case scancelb
HideWindow(1,1)
DisableGadget(0,0)
Case pfromp ;From Page
start = GetGadgetState(pfromp)
Case ptop ;To Page
finish = GetGadgetState(ptop)
Case pokb ;Print
DisableGadget(0,0)
PrintListIconGadget(0)
HideWindow(2,1)
Case pcancelb ;Cancel printing
HideWindow(2,1)
DisableGadget(0,0)
EndSelect
EndSelect
Until Quit = 1
If IsLibrary(1)
CloseLibrary(1)
EndIf
EndIf
Last edited by RASHAD on Tue May 20, 2025 10:50 am, edited 4 times in total.
Egypt my love
Re: ListIconGadget Events
Hi Rashad,
There's a big problem with your printing procedure.
I tried to test it with PrintPDF and requested a single page. The problem is that your procedure ignored it and started printing 2,750 pages!
I couldn't cancel the print job. I had to kill the process in a rather archaic way, via the Task Manager and Services, and finally got rid of it only by pausing the print spooler and then restarting the PC.
You should rename your procedure "unstoppable printing" or "Panic in Listicon"
Tested with Windows11, PB6.21B9 x86
Good day!
There's a big problem with your printing procedure.
I tried to test it with PrintPDF and requested a single page. The problem is that your procedure ignored it and started printing 2,750 pages!
I couldn't cancel the print job. I had to kill the process in a rather archaic way, via the Task Manager and Services, and finally got rid of it only by pausing the print spooler and then restarting the PC.

You should rename your procedure "unstoppable printing" or "Panic in Listicon"

Tested with Windows11, PB6.21B9 x86
Good day!
PureBasicien tu es, PureBasicien tu resteras.
Re: ListIconGadget Events
Hi Jacobus
Sorry mate
Previous post updated
Escape to Truncate

Sorry mate
Previous post updated
Escape to Truncate
Egypt my love