Code: Select all
; Most of the credit goes to :El Choni ,Danilo ,Netmaestro ,Sparkie ,Srod ,Fluid Byte
; And all the other members of the forum
;
; This source need to be cleand and optimized
; But be careful there ,It is not that easy, I assure you
;
; More bugs are fixed - New System detection (Compatibility with Other OS refined as possible as I can) - Can now edit column 0
;
; RASHAD
Global Column_0_W,WinX,WinY,XX,YY,SS,StdColor,AltColor,ColColor,Item_Sp
Global OldCallback,OldEditProc,hEdit,rct.RECT,CellSelectOn,CurItem,CurSubItem,CurSelItem,CurSelSubItem,EditColor,WState,Sortflag,Editflag,HCFlag
Global rfont,hfont,hfonth,rfonth,AnsiString.s,UniString.s,RFontS,HFontS,STCbcolor.l,STCfcolor.l,Oddbrush,Evenbrush,index,Coln,LI_size
Global Dim AlignColumn(0),Dim MaskedColumn(0),Dim FixedColumn(0)
#CDDS_ITEMPREPAINT = #CDDS_ITEM|#CDDS_PREPAINT
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM|#CDDS_ITEMPREPAINT
Procedure LoWord(value)
ProcedureReturn value & $FFFF
EndProcedure
Procedure HiWord(value)
ProcedureReturn value >> 16 & $FFFF
EndProcedure
Procedure RAddColumn(LiID.l,Title$,Colw.l,Align.l,Editmask.l,Fixedmask.l)
Coln = Coln + 1
ReDim AlignColumn(Coln)
ReDim MaskedColumn(Coln)
ReDim FixedColumn(Coln)
AddGadgetColumn(LiID,Coln,Title$,Colw)
liColumn.LV_COLUMN
liColumn\mask = #LVCF_FMT
Select align
Case 0: liColumn\fmt = #LVCFMT_LEFT
Case 1: liColumn\fmt = #LVCFMT_CENTER
Case 2: liColumn\fmt = #LVCFMT_RIGHT
EndSelect
SendMessage_(GadgetID(LiID), #LVM_SETCOLUMN,coln, liColumn)
AlignColumn(Coln) = Align.l
MaskedColumn(Coln) = Editmask
FixedColumn(Coln) = Fixedmask
EndProcedure
ProcedureDLL.l Ansi2Uni(string.s)
*out = AllocateMemory(Len(string)*2 * 2)
MultiByteToWideChar_(#CP_ACP, 0, string, -1, *out, Len(string))
ProcedureReturn *out
EndProcedure
Procedure EndEdit()
If hEdit
SetGadgetItemText(1, CurItem, GetGadgetText(2)+Chr(10), CurSubItem)
If CurSubItem = 0
SetGadgetItemText(4, CurItem, GetGadgetText(2)+Chr(10), 0)
EndIf
FreeGadget(2)
hEdit = 0
EndIf
EndProcedure
Procedure EditFocus(hwnd, *rc.RECT)
hDC = GetDC_(hwnd)
OldPen = SelectObject_(hDC, CreatePen_(#PS_INSIDEFRAME,1,$0000FF))
OldBrush = SelectObject_(hDC, GetStockObject_(#NULL_BRUSH))
Rectangle_(hDC, *rc\left+1, *rc\top+1, *rc\right-1, *rc\bottom-1)
SelectObject_(hDC, OldBrush)
SelectObject_(hDC, OldPen)
ReleaseDC_(hwnd, hDC)
EndProcedure
Procedure EditProc(hwnd, uMsg, wParam, lParam)
result = 0
Select uMsg
Case #WM_KEYDOWN ,#WM_MENUSELECT
result = CallWindowProc_(OldEditProc, hwnd, uMsg, wParam, lParam)
RedrawWindow_(hEdit, 0, 0, #RDW_INTERNALPAINT|#RDW_ERASE|#RDW_INVALIDATE)
If wParam=#VK_RETURN
EndEdit()
EndIf
Default
result = CallWindowProc_(OldEditProc, hwnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure LIcallback(hwnd, msg, wparam, lparam)
If IsGadget(4)
ShowScrollBar_(GadgetID(4),#SB_BOTH,0)
EndIf
Protected hdi.hd_item
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_NOTIFY
If HCFlag = 0
Goto nohcolor
EndIf
*NMHDR.NMHDR = lparam
If *NMHDR\code = #NM_CUSTOMDRAW
*pnmcd.NMCUSTOMDRAW = lparam
Select *pnmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
text$=GetGadgetItemText(GetDlgCtrlID_(hWnd),-1,*pnmcd\dwItemSpec)
If *pnmcd\uItemState & #CDIS_SELECTED
DrawFrameControl_(*pnmcd\hdc, *pnmcd\rc, #DFC_BUTTON, #DFCS_BUTTONPUSH|#DFCS_PUSHED)
InflateRect_(*pnmcd\rc,-1,-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,Oddbrush)
SetTextColor_(*pnmcd\hdc, #Blue)
Else
FillRect_(*pnmcd\hdc, *pnmcd\rc,Evenbrush)
SetTextColor_(*pnmcd\hdc, #Red)
EndIf
*pnmcd\rc\top+1
InflateRect_(*pnmcd\rc,-5,0)
If *pnmcd\rc\right>*pnmcd\rc\left
DrawText_(*pnmcd\hdc, @text$, Len(text$), *pnmcd\rc,AlignColumn(*pnmcd\dwItemSpec)|#DT_VCENTER|#DT_END_ELLIPSIS)
EndIf
result = #CDRF_SKIPDEFAULT
EndSelect
EndIf
nohcolor:
Case #WM_RBUTTONDOWN
For i=1 To coln
SendMessage_(GadgetID(1), #LVM_SETCOLUMNWIDTH, i,#LVSCW_AUTOSIZE)
Next
SendMessage_(GadgetID(1), #LVM_SETCOLUMNWIDTH, coln,#LVSCW_AUTOSIZE_USEHEADER)
Case #WM_RBUTTONDBLCLK
For i=1 To coln
SendMessage_(GadgetID(1), #LVM_SETCOLUMNWIDTH, i,#LVSCW_AUTOSIZE_USEHEADER & #LVSCW_AUTOSIZE)
Length1=SendMessage_(hwnd, #LVM_GETCOLUMNWIDTH, i, 0)
StartDrawing(WindowOutput(0))
DrawingFont(hfont)
Length2 = TextWidth(GetGadgetItemText(1,-1,i))+2*hfonth
StopDrawing()
If Length2 > Length1
SendMessage_(hwnd, #LVM_SETCOLUMNWIDTH, i,Length2)
EndIf
Next
Case #WM_LBUTTONDBLCLK
If Editflag = 0
Goto noedit
EndIf
If hwnd<>hEdit
EndEdit()
pInfo.LVHITTESTINFO
pInfo\pt\x = LoWord(lParam)
pInfo\pt\y = HiWord(lParam)
SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, pInfo)
rc.RECT
rc\top = pInfo\iSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, pInfo\iItem, rc)
If hEdit=0
UseGadgetList(hwnd)
CurItem = pInfo\iItem
CurSubItem = pInfo\iSubItem
If CurItem < 0 Or MaskedColumn(CurSubItem) = 1 Or GetDlgCtrlID_(hWnd) = 4
Goto noedit
EndIf
Text$ = GetGadgetItemText(1, CurItem, CurSubItem)
If CurSubItem=0
rc\right = rc\left+SendMessage_(hwnd, #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
hEdit = StringGadget(2, rc\left+1, rc\top+1, rc\right-rc\left-2, rc\bottom-rc\top-2, Text$,#PB_String_BorderLess)
;If CurSubItem=0
SendMessage_(hEdit, #WM_SETFONT, rfont, #True)
;Else
;SendMessage_(hEdit, #WM_SETFONT, rfont, #True)
OldEditProc = SetWindowLong_(hEdit, #GWL_WNDPROC, @EditProc())
SetFocus_(hEdit)
EndIf
Else
result = CallWindowProc_(oldCallback, hwnd, uMsg, wParam, lParam)
noedit:
EndIf
Case #WM_LBUTTONDOWN
If hwnd<>hEdit
EndEdit()
pInfo.LVHITTESTINFO
pInfo\pt\x = LoWord(lParam)
pInfo\pt\y = HiWord(lParam)
SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, pInfo)
rc.RECT
rc\top = pInfo\iSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, pInfo\iItem, rc)
rc\left+1
rc\bottom-1
If CellSelectOn
InvalidateRect_(hwnd, rct, #True)
EndIf
CellSelectOn = 1
CurSelItem = pInfo\iItem
CurSelSubItem = pInfo\iSubItem
If CurSelSubItem=0
rc\right = rc\left+SendMessage_(hwnd, #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
If CurSelItem < 0 Or Editflag = 0 Or GetDlgCtrlID_(hWnd) = 4
RedrawWindow_(GadgetID(1),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW)
CellSelectOn = 0
Goto norect
EndIf
EditFocus(hwnd, rc)
norect:
CopyMemory(rc, rct, SizeOf(RECT))
Else
SetFocus_(hEdit)
result = CallWindowProc_(oldCallback, hwnd, uMsg, wParam, lParam)
EndIf
Case #WM_CTLCOLOREDIT
If GetFocus_()=lParam
SetBkMode_(wParam, #TRANSPARENT)
If CurItem&1=0
TextBkColor = $FFFFFF
;If CurSubItem=3
EditColor = $0000FF
;EndIf
Else
TextBkColor = $FFFFFF
;If CurSubItem=3
EditColor = $0000FF
;EndIf
EndIf
SetTextColor_(wParam, EditColor)
result = CreateSolidBrush_(TextBkColor)
Else
result = CallWindowProc_(oldCallback, hwnd, uMsg, wParam, lParam)
EndIf
Case #WM_VSCROLL
Item_Sp = SendMessage_(GadgetID(1), #LVM_GETITEMSPACING, #True, 0) >> 16
SelItem = GetScrollPos_(GadgetID(1),#SB_VERT) - GetScrollPos_(GadgetID(4),#SB_VERT)
SendMessage_(GadgetID(4), #LVM_SCROLL, 0, SelItem * Item_Sp)
UpdateWindow_(GadgetID(4))
rc.RECT
TopVisibleItem = SendMessage_(hwnd, #LVM_GETTOPINDEX, 0, 0)
If CellSelectOn
rc\top = CurSelSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, CurSelItem, rc)
rct\top = rc\top
rct\bottom = rc\bottom
If TopVisibleItem <= CurSelItem
EditFocus(hwnd, rct)
EndIf
EndIf
If hEdit
If TopVisibleItem<=CurItem
ResizeGadget(2,#PB_Ignore, rc\top,#PB_Ignore,#PB_Ignore)
HideGadget(2, #False)
RedrawWindow_(hEdit, 0, 0, #RDW_INTERNALPAINT|#RDW_ERASE|#RDW_INVALIDATE)
Else
HideGadget(2, #True)
EndIf
SetFocus_(hEdit)
EndIf
If OSVersion() > 65 And IsThemeActive_() = 0
InvalidateRect_(WindowID(0),0,#True)
InvalidateRect_(WindowID(2),0,#True)
EndIf
;
Case #WM_HSCROLL
rc.RECT
TopVisibleItem = SendMessage_(hwnd, #LVM_GETTOPINDEX, 0, 0)
If CellSelectOn
rc\top = CurSelSubItem
rc\left = #LVIR_BOUNDS
SendMessage_(hwnd, #LVM_GETSUBITEMRECT, CurSelItem, rc)
rct\left = rc\left
rct\right = rc\right
If TopVisibleItem<=CurSelItem
EditFocus(hwnd, rct)
EndIf
EndIf
If hEdit
If TopVisibleItem<=CurItem
ResizeGadget(2, rc\left+2,#PB_Ignore,#PB_Ignore,#PB_Ignore)
HideGadget(2, #False)
RedrawWindow_(hEdit, 0, 0, #RDW_INTERNALPAINT|#RDW_ERASE|#RDW_INVALIDATE)
Else
HideGadget(2, #True)
EndIf
SetFocus_(hEdit)
EndIf
Case #WM_KEYDOWN ,#WM_MENUSELECT
If wParam=#VK_NEXT
SendMessage_(GadgetID(1),#WM_VSCROLL,#SB_PAGEDOWN,0)
ElseIf wParam=#VK_PRIOR
SendMessage_(GadgetID(1),#WM_VSCROLL,#SB_PAGEUP,0)
ElseIf wParam=#VK_UP
SendMessage_(GadgetID(1),#WM_VSCROLL,#SB_LINEUP,0)
ElseIf wParam=#VK_DOWN
SendMessage_(GadgetID(1),#WM_VSCROLL,#SB_LINEDOWN,0)
ElseIf wParam=#VK_HOME
SendMessage_(GadgetID(1),#WM_VSCROLL,#SB_TOP,0)
ElseIf wParam=#VK_END
SendMessage_(GadgetID(1),#WM_VSCROLL,#SB_BOTTOM,0)
ElseIf lParam=#VK_LEFT
SendMessage_(GadgetID(1),#WM_HSCROLL,#SB_LINELEFT,0)
ElseIf lParam=#VK_RIGHT
SendMessage_(GadgetID(1),#WM_HSCROLL,#SB_LINERIGHT,0)
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure SortingUpd(ListIconGadget,columns)
ItemCount = SendMessage_(ListIconGadget, #LVM_GETITEMCOUNT, 0, 0)
lvi.LV_ITEM
lvi\mask = #LVIF_PARAM
lvi\iItem = 0
While ItemCount>0
lvi\lParam = lvi\iItem
For SubItem = 0 To columns-1
lvi\iSubItem = SubItem
SendMessage_(ListIconGadget, #LVM_SETITEM, 0, @lvi)
Next SubItem
lvi\iItem +1
ItemCount -1
Wend
EndProcedure
Procedure ListIconSortFunction(lParam1,lParam2,lParamSort)
A$ = Space(200)
B$ = Space(200)
result = 0
lvi.LV_ITEM
lvi\iSubItem = lParamSort&$FFFF
lvi\pszText = @A$
lvi\cchTextMax = 200
lvi\mask = #LVIF_TEXT
SendMessage_(GadgetID(1), #LVM_GETITEMTEXT,lParam1,@lvi)
lvi\pszText = @B$
SendMessage_(GadgetID(1), #LVM_GETITEMTEXT,lParam2,@lvi)
If A$ = B$
ProcedureReturn 0 ; equal
EndIf
x = (lParamSort>>16)&$FFFF
If x
If A$ > B$
ProcedureReturn 1
Else
ProcedureReturn -1
EndIf
Else
If A$ > B$
ProcedureReturn -1
Else
ProcedureReturn 1
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure RTrimColumn(LiID.l,Coln,Title$,align,Editmask.l)
If Title$ = ""
Title$ = GetGadgetItemText(LiID,-1,Coln)
EndIf
SetGadgetItemText(LiID,-1,Title$,Coln)
liColumn.LV_COLUMN
liColumn\mask = #LVCF_FMT
Select align
Case 0: liColumn\fmt = #LVCFMT_LEFT
Case 1: liColumn\fmt = #LVCFMT_CENTER
Case 2: liColumn\fmt = #LVCFMT_RIGHT
EndSelect
SendMessage_(GadgetID(LiID), #LVM_SETCOLUMN,coln, liColumn)
MaskedColumn(Coln) = Editmask
EndProcedure
Procedure RHR_F_St_Sz( hfontn$,hh.l,hfflag.l,rfontn$,rh.l,rfflag.l)
hfonth = hh
rfonth = rh
rfont = LoadFont(0, rfontn$, rfonth,rfflag)
SendMessage_(GadgetID(1), #WM_SETFONT, rfont, 1)
SendMessage_(GadgetID(4), #WM_SETFONT, rfont, 1)
If hfonth = 0
SetWindowLong_(GadgetID(1), #GWL_STYLE, GetWindowLong_(GadgetID(1), #GWL_STYLE)|#LVS_NOCOLUMNHEADER)
SetWindowLong_(GadgetID(4), #GWL_STYLE, GetWindowLong_(GadgetID(4), #GWL_STYLE)|#LVS_NOCOLUMNHEADER)
Goto noheader
EndIf
Header_1 = SendMessage_(GadgetID(1), #LVM_GETHEADER, 0, 0)
Header_4 = SendMessage_(GadgetID(4), #LVM_GETHEADER, 0, 0)
SetWindowTheme_(Header_1, @null.w, @null.w)
SetWindowTheme_(Header_4, @null.w, @null.w)
hfont = LoadFont(1, hfontn$, hfonth,hfflag)
SendMessage_(Header_1, #WM_SETFONT, hfont, 1)
SendMessage_(Header_4, #WM_SETFONT, hfont, 1)
If OpenLibrary(0, "UxTheme.dll") = 0
MessageRequester("Error", "Couldn't open UxTheme.dll")
Else
*f = GetFunction(0, "IsThemeActive")
If *f
newth = GetFunction(0, "SetWindowTheme")
CompilerIf #PB_Compiler_Unicode
CallFunctionFast(newth, Header_1, @null.w, "HEADER")
CallFunctionFast(newth, Header_4, @null.w, "HEADER")
CompilerElse
CallFunctionFast(newth, Header_1, @null.w, Ansi2Uni("HEADER"))
CallFunctionFast(newth, Header_4, @null.w, Ansi2Uni("HEADER"))
CompilerEndIf
EndIf
EndIf
CloseLibrary(0)
noheader:
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
If GetActiveGadget() = 4
SetActiveGadget(1)
EndIf
WinX = WindowWidth(0)
WinY = WindowHeight(0)
GetWindowRect_(WindowID(0), wr.RECT)
GetWindowRect_(GadgetID(1), gr.RECT)
XX = gr\left - wr\left - 2
YY = gr\top - wr\top - 2
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
; Sort by Column
If *NMHDR\hWndFrom = GetDlgItem_(hwnd,wParam) And Sortflag = 1
If *NMHDR\code = #LVN_COLUMNCLICK
*NMLV.NMLISTVIEW = lParam
column = *NMLV\iSubItem
index = index!1
SendMessage_(GadgetID(1),#LVM_SORTITEMS,column|((index)<<16),@ListIconSortFunction())
For i=0 To LI_size
SetGadgetItemText(4,i,GetGadgetItemText(1,i ,0),0)
Next
SortingUpd(GadgetID(1),coln)
EndIf ;
EndIf
; Fixed Column Length
If *NMHDR\hWndFrom = GetWindow_(GadgetID(1),#GW_CHILD) And *NMHDR\code = #HDN_FIRST
*phdn.NMHEADER = lParam
If FixedColumn(*phdn\Iitem) = 1
ProcedureReturn 1
ElseIf *phdn\Iitem = 0 And FixedColumn(0) = 0
Column_0_W = SendMessage_(GadgetID(1),#LVM_GETCOLUMNWIDTH,0,0) + 5
EndIf
EndIf
Select *NMHDR\code
Case #NM_CUSTOMDRAW
*LVCDHeader.NMLVCUSTOMDRAW = lParam
If *LVCDHeader\nmcd\hdr\hWndFrom = GadgetID(1)
Select *LVCDHeader\nmcd\dwDrawStage
Case #CDDS_PREPAINT
;result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
result = #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
Row = *LVCDHeader\nmcd\dwItemSpec
Col = *LVCDHeader\iSubItem
If Col=0
SelectObject_(*LVCDHeader\nmcd\hDC, rfont)
Else
SelectObject_(*LVCDHeader\nmcd\hDC, rfont)
EndIf
; Odd Row Color
If Row&1=1
If GetDlgItem_(hwnd,wParam) = GadgetID(1)
*LVCDHeader\clrTextBk = ColColor
Else
*LVCDHeader\clrTextBk = AltColor
EndIf
;If Col=2
;*LVCDHeader\clrText = $0000FF
;Else
; *LVCDHeader\clrText = $000000
;EndIf
; Even Row Color
; Else
; *LVCDHeader\clrTextBk = ColColor
;If Col=2
;*LVCDHeader\clrText = $FF0000
;Else
; *LVCDHeader\clrText = $000000
;EndIf
EndIf
If Right(GetGadgetItemText(1,Row,Col), 1)=Chr(10)
*LVCDHeader\clrText = $0000FF
Else
*LVCDHeader\clrText = $000000
EndIf
result = #CDRF_NEWFONT
EndSelect
EndIf
EndSelect
*nmHEADER.HD_NOTIFY = lParam
Gadget_ID = *nmHEADER\hdr\hwndFrom
Select *nmHEADER\hdr\code
Case #HDN_ITEMCHANGING
Select GetParent_(Gadget_ID)
Case GadgetID(1)
SendMessage_(GadgetID(1),#LVM_GETITEMRECT,0,r.Rect)
If (r\right - r\left + 40) > WinX
MoveWindow_(WindowID(2),WindowX(0)+XX ,WindowY(0)+YY,Column_0_W,WinY-76,1)
Else
MoveWindow_(WindowID(2),WindowX(0)+XX ,WindowY(0)+YY,Column_0_W,WinY-56,1)
EndIf
If CellSelectOn = 1
FreeGadget(2)
hEdit = 0
InvalidateRect_(GadgetID(1),0,#True)
CellSelectOn = 0
EndIf
Case GadgetID(4)
EndSelect
EndSelect
Case #WM_SIZE,#WM_MOVE,#WM_PAINT
MoveWindow_(GadgetID(1),10,10,WinX-20,WinY-60,1)
SendMessage_(GadgetID(1),#LVM_GETITEMRECT,0,r.Rect)
If (r\right - r\left + 40) > WinX
MoveWindow_(WindowID(2),WindowX(0)+XX ,WindowY(0)+YY,Column_0_W,WinY-76,1)
Else
MoveWindow_(WindowID(2),WindowX(0)+XX ,WindowY(0)+YY,Column_0_W,WinY-56,1)
EndIf
MoveWindow_(GadgetID(4),2,2,Column_0_W-4,WinY-60,1)
SendMessage_(GadgetID(4), #LVM_SETCOLUMNWIDTH, 0,Column_0_W)
MoveWindow_(GadgetID(5),10,WinY-35,100,25,1)
MoveWindow_(GadgetID(6),120,WinY-35,100,25,1)
MoveWindow_(GadgetID(7),230,WinY-35,100,25,1)
MoveWindow_(GadgetID(8),340,WinY-35,100,25,1)
MoveWindow_(GadgetID(9),450,WinY-35,100,25,1)
EndSelect
ProcedureReturn result
EndProcedure
Procedure RAdd_0_Column(Align.l,Editmask.l,Fixedmask.l,STCbcolor.l,STCfcolor.l)
SendMessage_(WindowID(0),#LVM_GETITEMRECT,0,r.Rect)
OpenWindow(2,r\left+10 ,r\top+10,Column_0_W,r\bottom-78,"FixedIconGadget Test",#WS_POPUP,WindowID(0))
ListIconGadget(4,0,0,Column_0_W-2,r\bottom-80,"Column 0", Column_0_W,#PB_ListIcon_GridLines)
oldCallback = SetWindowLong_(GadgetID(4), #GWL_WNDPROC, @LIcallback())
liColumn.LV_COLUMN
liColumn\mask = #LVCF_FMT
Select align
Case 0: liColumn\fmt = #LVCFMT_LEFT
Case 1: liColumn\fmt = #LVCFMT_CENTER
Case 2: liColumn\fmt = #LVCFMT_RIGHT
EndSelect
SendMessage_(GadgetID(4), #LVM_SETCOLUMN,0,liColumn)
AlignColumn(0) = Align
MaskedColumn(0) = Editmask
FixedColumn(0) = Fixedmask
SetGadgetColor(4,#PB_Gadget_BackColor,STCbcolor)
SetGadgetColor(4,#PB_Gadget_FrontColor,STCfcolor)
SetActiveGadget(1)
EndProcedure
Procedure Start()
ColColor = StdColor
HideWindow(2,1)
EndProcedure
AnsiString.s = "HEADER"
UniString.s = Space (13)
index = 1
WinX = 1024
WinY = 768
LI_size = 1000
Column_0_W = 240 ;Default Column Width
StdColor = $E6FFFF ;Default Row Color
AltColor = $BAEEE8 ;Alternate Row Color
Oddbrush=CreateSolidBrush_($00FFFF) ;Odd Header Style Back Color
Evenbrush=CreateSolidBrush_($00FFFF) ;Even Header Style Back Color
;HSOcolor = $FF0000 ;Header Style Text Odd Color
;HSEcolor = $0000FF ;Header Style Text Even Color
HFontS=18 ;New Header Font Size
RFontS=12 ;New Item Font Size
Sortflag = 1 ;Sorting Flag (1 = Sort , 0 = No Sort)
new:
coln = 0
OpenWindow(0,0,0,WinX,WinY,"RASHAD ListView Pro",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
If WState = #PB_Window_Maximize
SetWindowState(0,#PB_Window_Maximize)
EndIf
ListIconGadget(1,10,10,WinX-20,WinY-60,"Column 0", Column_0_W-5,#PB_ListIcon_GridLines)
oldCallback = SetWindowLong_(GadgetID(1), #GWL_WNDPROC, @LIcallback())
HideGadget(1,1)
SetGadgetColor(1,#PB_Gadget_BackColor,StdColor)
ButtonGadget(5,10,WinY - 35,100,25,"Fr/Unfreeze C0" ,#PB_Button_Toggle)
ButtonGadget(6,120,WinY - 35,100,25,"En/Disable Edit" ,#PB_Button_Toggle)
ButtonGadget(7,230,WinY - 35,100,25,"Font and Size" ,#PB_Button_Toggle)
ButtonGadget(8,340,WinY - 35,100,25,"Header Style" ,#PB_Button_Toggle)
ButtonGadget(9,450,WinY - 35,100,25,"Columns Color" ,#PB_Button_Toggle)
;RAddColumn(ListIconID, Title$, Column_Width, Column_Alignment(0=Left 1=Center 2=Right), Column_Edit_Mask(1=Masked 0=Non Masked), Column_Width_Fixed(1=Masked 0=Non Masked)
RAddColumn(1,"Column 1",200,1,0,0)
RAddColumn(1,"Column 2",200,1,0,1)
RAddColumn(1,"Column 3",200,0,0,0)
RAddColumn(1,"Column 4",200,0,1,1)
RAddColumn(1,"Column 5",200,0,0,0)
RAddColumn(1,"Column 6",200,2,0,0)
RAddColumn(1,"Column 7",200,2,0,0)
;First Column RAdd_0_Column(Align.l,Editmask.l,Fixedmask.l,Column_0 Backcolor,Column_0 Frontcolor)
;Align.l : 0 = Left aligned 1 = Center aligned 2 = Right aligned
;Editmask.l : 1 = noedit / 0 = editable
;Fixedmask.l : 1 = Fixed width / 0 = Resizeable
;To edit Column 0 : 1- Make Editmask = 1 2- Unfreeze C0 3- Edit the subitems 4- Freeze it again
RAdd_0_Column(0,0,0,$CFFECD,$000000)
;Remember to add the data of column 0 of Gadget(1) to column 0 of Gadget(4)
For i=0 To LI_size
;First
AddGadgetItem(1, -1, "Line "+Str(i)+" column number zero"+Chr(10)+"Line "+Str(i)+" col 1"+Chr(10)+"Line "+Str(i)+" col 2"+Chr(10)+"Line "+Str(i)+" col 3"+Chr(10)+"Line "+Str(i)+" col 4"+Chr(10)+"Line "+Str(i)+" col 5"+Chr(10)+"Line "+Str(i)+" col 6"+Chr(10)+"Line "+Str(i)+" col 7")
;Second
AddGadgetItem(4, -1, "Line "+Str(i)+" column number zero")
Next
SortingUpd(GadgetID(1),Coln) ;For Sorting
;RHR_F_St_St(Header_Font_name ,Header_Font_Height ,Header_Font_Style ,Row_Font_name ,Row_Font_Height ,Row_Font_Style)
;Header_Font_Height : HFontS = 0 No Header
;Header_Font_Style / Row_Font_Style : Bold = 256 ,Default = 0 ,Heigh Quality = 16 ,Italic = 512 ,StrikeOut = 8 ,Underline = 4
RHR_F_St_Sz("Tahoma",HFontS,16,"Microsoft Sans Serif",RFontS,0)
HideGadget(1,0)
SetWindowCallback(@WndProc())
Start()
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 5
If GetGadgetState(5) = 1
HideWindow(2,0)
SetActiveGadget(1)
Else
HideWindow(2,1)
EndIf
Case 6
Editflag = Editflag!1
For i = 1 To LI_size
SetGadgetItemText(4,i,GetGadgetItemText(1,i,0),0)
Next
Case 7
Fontflag = Fontflag!1
If Fontflag = 1
HFontS = 30
RFontS = 14
Else
HFontS = 18
RFontS = 12
EndIf
WState = GetWindowState(0)
Goto new
Case 8
HCFlag = HCFlag!1
InvalidateRect_(WindowID(0),0,#True)
Case 9
If GetGadgetState(9) = 1
ColColor = AltColor
Else
ColColor = StdColor
EndIf
RedrawWindow_(GadgetID(1), 0, 0, #RDW_INTERNALPAINT|#RDW_INVALIDATE)
SetActiveGadget(1)
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
More bugs are fixed
New System detection (Compatibility with Other OS refined as possible as I can)
Can now edit column 0
RASHAD