and I miss Kale and PB ,to be in a powerful enviroment is something
Code: Select all
Global Column_0_W,WinX,WinY,XX,YY,StdColor,AltColor,ColColor,ColColor_2,Item_Sp,Nolines,brush_1,brush_1_2,brush_4,brush_4_2,XP_BR_1,XP_BR_4
Global OldCallback,OldEditProc,hEdit,rct.RECT,r.RECT,rc.RECT,CellSelectOn,CurItem,CurSubItem,CurSelItem,CurSelSubItem,WState,Sortflag,Editflag,HCFlag
Global rfont,hfont,hfonth,rfonth,RFontS,HFontS,STCbcolor,STCfcolor,Oddbrush,Evenbrush,index,Coln,LI_size
Global header_h ,row_h,imageList
Global Dim AlignColumn(0),Dim MaskedColumn(0),Dim FixedColumn(0)
#CDDS_ITEMPREPAINT = #CDDS_ITEM|#CDDS_PREPAINT 
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM|#CDDS_ITEMPREPAINT
Prototype.i SetTheme(Gadget.i, String_1.p-unicode,String_2.p-unicode) 
Procedure EndEdit() 
    If hEdit
      SetGadgetItemText(1, CurItem, GetGadgetText(2)+Chr(10), CurSubItem)
      If CurSubItem = 1
      SetGadgetItemText(4, CurItem, GetGadgetText(2)+Chr(10), 1)
      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, *rc\top, *rc\right, *rc\bottom) 
    SelectObject_(hDC, OldBrush) 
    SelectObject_(hDC, OldPen) 
    ReleaseDC_(hwnd, hDC) 
EndProcedure
;Return for new line
;Esc or 'LeftClick on any other field' to end edit
Procedure EditProc(hwnd, uMsg, wParam, lParam)
    result = CallWindowProc_(OldEditProc, hwnd, uMsg, wParam, lParam)
    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
            If SendMessage_(hwnd,#EM_GETLINECOUNT,0,0) = Int(Row_h/(RFontS+3))
               EndEdit() 
               ProcedureReturn 0
            EndIf
         ElseIf wParam=#VK_ESCAPE
             EndEdit()
         EndIf          
      EndSelect
    ProcedureReturn result 
EndProcedure
Procedure LIcallback(hwnd, msg, wparam, lparam)
If IsGadget(4)
   ShowScrollBar_(GadgetID(4),#SB_BOTH,0)
EndIf
  result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
  
  Select msg
  
    Case #WM_NOTIFY
      SetActiveGadget(1)
      If HCFlag = 1
      *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
      EndIf
    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)
          InvalidateRect_(GadgetID(1),0,1)
          InvalidateRect_(GadgetID(4),0,1)
          
          
    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
          InvalidateRect_(GadgetID(1),0,1)
          InvalidateRect_(GadgetID(4),0,1)
             
  
    Case #WM_LBUTTONDBLCLK
        If Editflag <> 0 And GetDlgCtrlID_(hWnd) <> 4
           If hwnd<>hEdit 
            EndEdit() 
            pInfo.LVHITTESTINFO 
            pInfo\pt\x = lParam & $FFFF 
            pInfo\pt\y = lParam >> 16 & $FFFF 
            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 MaskedColumn(CurSubItem) = 0 And GetDlgCtrlID_(hWnd) <> 4
                Text$ = GetGadgetItemText(1, CurItem, CurSubItem)
                hEdit = StringGadget(2, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, Text$,#ES_MULTILINE|#PB_String_BorderLess) 
                SendMessage_(hEdit, #WM_SETFONT, rfont, #True)
                RedrawWindow_(GadgetID(1),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW) 
                OldEditProc = SetWindowLongPtr_(hEdit, #GWL_WNDPROC, @EditProc()) 
                SetFocus_(hEdit)
              EndIf 
            EndIf 
           Else 
            result = CallWindowProc_(oldCallback, hwnd, uMsg, wParam, lParam)
           EndIf
        EndIf
     
    Case #WM_LBUTTONDOWN
    If GetDlgCtrlID_(hWnd) <> 4
           If hwnd<>hEdit And GetActiveGadget() = 1
            EndEdit()                      
            pInfo.LVHITTESTINFO 
            pInfo\pt\x = lParam & $FFFF
            pInfo\pt\y = lParam >> 16 & $FFFF 
            SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, pInfo) 
            rc.RECT 
            rc\top = pInfo\iSubItem 
            rc\left = #LVIR_BOUNDS
            SendMessage_(hwnd, #LVM_GETSUBITEMRECT, pInfo\iItem, rc)
            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 Editflag <> 0 Or GetDlgCtrlID_(hWnd) <> 4
              EditFocus(hwnd, rc)
              SetFocus_(hEdit)
            Else
              CellSelectOn = 0
            EndIf
            CopyMemory(rc, rct, SizeOf(RECT))
          Else       
            SetFocus_(hEdit)               
            result = CallWindowProc_(oldCallback, hwnd, uMsg, wParam, lParam)
          EndIf
   EndIf
            
       
    Case #WM_CTLCOLOREDIT 
          If GetFocus_()=lParam 
            SetBkMode_(wParam, #TRANSPARENT)
            SetTextColor_(wParam, $0000FF) 
            result = CreateSolidBrush_($FFFFFF) 
          Else 
            result = CallWindowProc_(oldCallback, hwnd, uMsg, wParam, lParam)
          EndIf
       
    Case #WM_VSCROLL,#WM_MOUSEWHEEL 
          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 And hEdit = 0
              EditFocus(hwnd, rct) 
            EndIf 
          EndIf 
          If hEdit 
            If TopVisibleItem<=CurItem 
              ResizeGadget(2,#PB_Ignore, rc\top,#PB_Ignore,#PB_Ignore) 
              HideGadget(2, 0) 
              RedrawWindow_(hEdit, 0, 0, #RDW_INTERNALPAINT|#RDW_ERASE|#RDW_INVALIDATE) 
            Else 
              HideGadget(2, 1) 
            EndIf 
            SetFocus_(hEdit)             
          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,#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 wParam=#VK_LEFT
            SendMessage_(GadgetID(1),#WM_HSCROLL,#SB_LINELEFT,0)
          ElseIf wParam=#VK_RIGHT
            SendMessage_(GadgetID(1),#WM_HSCROLL,#SB_LINERIGHT,0)
          EndIf
  
   EndSelect
  ProcedureReturn result
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
Procedure RAdd_0_Column(STCbcolor.l,STCfcolor.l,Align.l,Editmask.l,Fixedmask.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 1",0)
    SendMessage_(GadgetID(4),#LVM_SETEXTENDEDLISTVIEWSTYLE,#LVS_EX_GRIDLINES,#LVS_EX_GRIDLINES)
    AddGadgetColumn(4,1,"Column 1",Column_0_W)
    oldCallback = SetWindowLongPtr_(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)
    SendMessage_(GadgetID(4), #LVM_SETIMAGELIST, #LVSIL_SMALL, imageList)
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 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      
        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")
              swt.SetTheme = GetFunction(0, "SetWindowTheme")
              swt(Header_1,"", "HEADER")
              swt(Header_3,"", "HEADER")
              swt(Header_4,"", "HEADER")
          EndIf
       Else      
        SetWindowLongPtr_(GadgetID(1), #GWL_STYLE, GetWindowLongPtr_(GadgetID(1), #GWL_STYLE)|#LVS_NOCOLUMNHEADER)
        SetWindowLongPtr_(GadgetID(4), #GWL_STYLE, GetWindowLongPtr_(GadgetID(4), #GWL_STYLE)|#LVS_NOCOLUMNHEADER)        
      EndIf   
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
      If GetActiveGadget() = 4
        SetActiveGadget(1)
      EndIf
      If IsWindow(0)
      WinX = WindowWidth(0)
      WinY = WindowHeight(0)
      GetWindowRect_(WindowID(0), wr.RECT)
      EndIf
      If IsGadget(1)
       GetWindowRect_(GadgetID(1), gr.RECT)
      EndIf
      XX = gr\left - wr\left - 2
      YY = gr\top - wr\top - 2
      result = #PB_ProcessPureBasicEvents 
Select uMsg
   
   Case #WM_NOTIFY,#WM_SETREDRAW
    *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 ,1),1)
          Next
          SortingUpd(GadgetID(1),coln) 
        EndIf                 ;  
       EndIf      
      ; Fixed Column Width
       If *NMHDR\hWndFrom = GetWindow_(GadgetID(1),#GW_CHILD) And *NMHDR\code = #HDN_FIRST
          *phdn.NMHEADER = lParam
             Li_c0 = SendMessage_(GadgetID(1), #LVM_GETCOLUMNWIDTH, 1,0)                       
              If *phdn\Iitem = 0 Or FixedColumn(*phdn\Iitem) = 1 Or Li_c0 > WinX - 40
                    ProcedureReturn 1
              Else
                  Column_0_W = SendMessage_(GadgetID(1),#LVM_GETCOLUMNWIDTH,1,0) + 4          
              EndIf
       EndIf
       If IsGadget(4) And *NMHDR\hWndFrom = GetWindow_(GadgetID(4),#GW_CHILD) And *NMHDR\code = #HDN_FIRST
          *phdn.NMHEADER = lParam                  
              If *phdn\Iitem = 0
                    ProcedureReturn 1              
              EndIf   
       EndIf
       
       
    Select *NMHDR\code 
      Case #NM_CUSTOMDRAW 
        *LVCDHeader.NMLVCUSTOMDRAW = lParam
          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 OSVersion() = #PB_OS_Windows_XP Or OSVersion() = #PB_OS_Windows_Server_2003
                    subItemRect1.RECT\left = #LVIR_LABEL 
                    subItemRect1.RECT\top = *LVCDHeader\iSubItem
                    subItemRect4.RECT\left = #LVIR_LABEL 
                    subItemRect4.RECT\top = *LVCDHeader\iSubItem                
                    SendMessage_(GadgetID(1), #LVM_GETSUBITEMRECT, Row, @subItemRect1)
                    SendMessage_(GadgetID(4), #LVM_GETSUBITEMRECT, Row, @subItemRect4)
                    subItemText1$ = GetGadgetItemText(1, Row, Col)
                    If IsWindowVisible_(WindowID(2))
                        If Col = 1
                           subItemText1$ = ""
                        EndIf
                        subItemText4$ = GetGadgetItemText(1, Row, 1)
                    EndIf
                    If Row&1=1                      
                      If GetDlgItem_(hwnd,wParam) = GadgetID(1)
                         FillRect_(*LVCDHeader\nmcd\hdc, subItemRect1,XP_BR_1)
                      ElseIf GetDlgItem_(hwnd,wParam) = GadgetID(4)
                         FillRect_(*LVCDHeader\nmcd\hdc, subItemRect4,XP_BR_4)                         
                      EndIf
                    EndIf
                    If Right(GetGadgetItemText(1,Row,Col), 1)=Chr(10)
                        SetTextColor_(*LVCDHeader\nmcd\hdc , $0000FF)
                    Else
                        SetTextColor_(*LVCDHeader\nmcd\hdc , $000000)
                    EndIf                     
                    subItemRect1\left + 4
                    subItemRect1\top + 4  
                    subItemRect1\right - 4
                    subItemRect1\bottom - 4                                        
                    subItemRect4\left + 4
                    subItemRect4\top + 4  
                    subItemRect4\right - 4
                    subItemRect4\bottom - 4
                    DrawText_(*LVCDHeader\nmcd\hdc, subItemText1$, Len(subItemText1$), subItemRect1,AlignColumn(Col)|#DT_END_ELLIPSIS | #DT_WORDBREAK)                                       
                    DrawText_(*LVCDHeader\nmcd\hdc, subItemText4$, Len(subItemText4$), subItemRect4,AlignColumn(Col)|#DT_END_ELLIPSIS | #DT_WORDBREAK) 
                    result = #CDRF_SKIPDEFAULT
                Else
                    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
                     ElseIf GetDlgItem_(hwnd,wParam) = GadgetID(4)
                        *LVCDHeader\clrTextBk = ColColor_2
                     EndIf
                    EndIf                
                    If  Right(GetGadgetItemText(1,Row,Col), 1)=Chr(10)
                        *LVCDHeader\clrText = $0000FF
                    Else
                        *LVCDHeader\clrText = $000000
                    EndIf
                    result = #CDRF_NEWFONT
               EndIf                   
          EndSelect
    EndSelect
    
    
      *nmHEADER.HD_NOTIFY = lParam
      Gadget_ID = *nmHEADER\hdr\hwndFrom  
      Select *nmHEADER\hdr\code 
        Case #HDN_ITEMCHANGING                          
                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 #HDN_ENDTRACK,#LVN_ENDSCROLL
              If OSVersion() = #PB_OS_Windows_XP Or OSVersion() = #PB_OS_Windows_Server_2003
                 InvalidateRect_(GadgetID(1),0,1)
                 InvalidateRect_(GadgetID(4),0,1)
                 SetFocus_(hEdit)
               EndIf 
                 
                
        Case #HDN_DIVIDERDBLCLICK
                *phdn.NMHEADER = lParam
                If *phdn\iItem = 1
                    SendMessage_(GadgetID(1), #LVM_SETCOLUMNWIDTH, 1,#LVSCW_AUTOSIZE)
                EndIf
                
  EndSelect  
             
    
      Case #WM_GETMINMAXINFO                                       ;Min resizing for windows        
        *pMinMax.MINMAXINFO = lParam
        If Column_0_W+60 > 580
            *pMinMax\ptMinTrackSize\x=Column_0_W+60
        Else
            *pMinMax\ptMinTrackSize\x=580
        EndIf
            *pMinMax\ptMinTrackSize\y=350
      
      
      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-3,WinY-60,1)
        SendMessage_(GadgetID(4), #LVM_SETCOLUMNWIDTH, 1,Column_0_W +1)
        MoveWindow_(GadgetID(5),10,WinY-35,100,25,1)
        MoveWindow_(GadgetID(6),120,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
new:
  index = 1  
  WinX = 1024
  WinY = 768
  LI_size = 1000
  Column_0_W = 210                                                                      ;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=32                                                                             ;New Header Font Size
  RFontS=10                                                                             ;New Item Font Size
  Nolines =3                                                                            ;No. of lines per Row                                                                            
  Sortflag =1                                                                           ;Sorting Flag (1 = Sort , 0 = No Sort)   
  coln = 0
   
If OSVersion() < 60
    MessageRequester("Error","For XP and Newer Versions Only",#MB_ICONWARNING)
    End
EndIf
brush_1 = CreateSolidBrush_($E6FFFF)
brush_1_2 = CreateSolidBrush_($BAEEE8)
brush_4 = CreateSolidBrush_($E6FEE1)
brush_4_2 = CreateSolidBrush_($B9FCAB)
XP_BR_1 = brush_1
XP_BR_4 = brush_4
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",0)
SendMessage_(GadgetID(1),#LVM_SETEXTENDEDLISTVIEWSTYLE,#LVS_EX_GRIDLINES,#LVS_EX_GRIDLINES)
;Row Height for 3 Lines
row_h = 2* Nolines * RFontS
imageList = ImageList_Create_(1,row_h, #ILC_COLOR32, 0, 30)                           ; Row height
SendMessage_(GadgetID(1), #LVM_SETIMAGELIST, #LVSIL_SMALL, imageList)
SetWindowLongPtr_(GadgetID(1), #GWL_STYLE, GetWindowLongPtr_(GadgetID(1), #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(GadgetID(1), #HWND_BOTTOM, -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
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,"Rows 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)
;RAdd_0_Column(Column_0 Backcolor,Column_0 Frontcolor,Align.l,Editmask.l,Fixedmask.l)
;Align.l : 0 = Left aligned 1 = Center aligned 2 = Right aligned
;Editmask.l : 1 = noedit / 0 = editable
;Fixedmask.l : 1 = Fixed width / 0 = Resizeable
;********************************************
RAddColumn(1,"Column 1",Column_0_W-4,0,0,0)                       ;Note 1: The last 3 parameter must be the same as RAdd_0_Column
;********************************************
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,1,0)
RAddColumn(1,"Column 7",200,2,0,1)
;To edit Column 0 : 1- Make Editmask = 1 2- Unfreeze C0 3- Edit the subitems 4- Freeze it again
STCbcolor = $E6FEE1
STCfcolor = $000000
;*****************************************
RAdd_0_Column(STCbcolor,STCfcolor,0,0,0)                          ;Note 1:The last 3 parameter must be the same as RAddColumn 1
;*****************************************
;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,""+Chr(10)+ "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")
  ;Second
  AddGadgetItem(4, -1,""+Chr(10)+"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)
oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LIcallback())
SetWindowCallback(@WndProc())
ColColor = StdColor
ColColor_2 = $E6FEE1
HideWindow(2,1)
SetActiveGadget(1)
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)            
            Else            
            HideWindow(2,1)            
            EndIf
      
      Case 6
            Editflag = Editflag!1
            For i = 0 To LI_size
            SetGadgetItemText(4,i,GetGadgetItemText(1,i,0),0)
            Next
      
      
      Case 8
            HCFlag = HCFlag!1
            InvalidateRect_(WindowID(0),0,#True)
        
      Case 9
          If GetGadgetState(9) = 1
            ColColor = AltColor
            ColColor_2 = $B9FCAB
            XP_BR_1 = brush_1_2
            XP_BR_4 = brush_4_2 
          Else
            ColColor = StdColor
            ColColor_2 = $E6FEE1
            XP_BR_1 = brush_1
            XP_BR_4 = brush_4
          EndIf
            InvalidateRect_(GadgetID(1),0,1) 
            InvalidateRect_(GadgetID(4),0,1)
   EndSelect
   If Editflag = 0
      SetActiveGadget(1)
   EndIf
EndSelect 
Until event = #PB_Event_CloseWindow
Edit :Update
Update : 2 Improvement

 
  
 

