April 24, 2024, 03:54:57 AM

News:

Own IWBasic 2.x ? -----> Get your free upgrade to 3.x now.........


Problem with Listview

Started by billhsln, February 09, 2014, 04:07:23 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

billhsln

It seems that my program will load the first field, but the rest no longer show up.  The changes I made, should not have effected what is shown.  Even when I force "VALUE" to be written to the 6th column, nothing shows in that column.  Not sure what I did to screw this up, but I did it.

Note: This is a work in progress, it should pull up your "My Documents" directory and show files in that directory.  None of the other logic is put in.  Just click on EXIT to exit.

/*
Search Files by Date.iwb

    Written by Bill K. Haesslein
Started on 2014-02-06
Completed on 2014-02-??

Compile as a WINDOWS target
*/
$MAIN

AUTODEFINE "off"

DECLARE IMPORT,SHGetSpecialFolderPathA(int hwndOwner,string lpszPath,int nFolder,int fCreate)

DECLARE IMPORT,SHGetPathFromIDList(param1:UINT,param2:UINT),INT
DECLARE IMPORT,SHBrowseForFolder(param1:UINT),INT
DECLARE IMPORT,CoTaskMemFree(param1:INT),INT
DECLARE IMPORT,RtlZeroMemory(dat:UINT,length:INT)
DECLARE IMPORT,SendMessageA(hWnd:UINT, message:UINT, wParam:INT, lparam:UINT),UINT
'optional
DECLARE IMPORT,SetWindowTextA(hwnd:UINT,txt:POINTER),INT
DECLARE IMPORT,SetWindowLongA(hWnd:UINT,nIndex:INT,dwNewLong:UINT),UINT
DECLARE IMPORT,GetWindowLongA(hwnd:UINT,nIndex:INT),UINT
DECLARE IMPORT,GetFileTime(handle:INT,creation:filetime,access:filetime,writet:filetime), INT
DECLARE IMPORT,GetFileSize(hfile:UINT,lpfilesizehigh:UINT BYREF), UINT
DECLARE IMPORT,FileTimeToSystemTime(timef:filetime,times:systemtime), INT
DECLARE IMPORT,FileTimeToLocalFileTime(timef:filetime, timel:filetime)

CONST Max_Path = 260
CONST LVM_FIRST = 0x1000
CONST LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54)
CONST LVS_EX_ONECLICKACTIVATE = 0x40
CONST LVS_EX_FULLROWSELECT = 0x020
CONST LVS_EX_CHECKBOXES = 0x4
CONST LVS_EX_GRIDLINES = 0x1
CONST LVS_EX_HEADERDRAGDROP = 0x10
CONST LVM_GETITEMSTATE = (LVM_FIRST + 44)
CONST LVM_SETBKIMAGE = (LVM_FIRST + 68)
CONST LVIS_STATEIMAGEMASK = 0xF000
CONST LVM_SETBKCOLOR = (LVM_FIRST + 1)
CONST LVIF_STATE = 0x8
CONST LVM_SETITEMSTATE = (LVM_FIRST+43)
CONST LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38)
CONST LVBKIF_SOURCE_URL = 0x2
CONST LVBKIF_STYLE_NORMAL = 0x0
CONST LVBKIF_STYLE_TILE = 0x10

CONST CSIDL_MYDOCUMENTS = 0x05 :' logical "My Documents" desktop icon

SETID "FILE_ATTRIBUTE_ARCHIVEFL",0x20
SETID "FILE_ATTRIBUTE_COMPRESSEDFL",0x800
SETID "FILE_ATTRIBUTE_DIRECTORYFL",0x10
SETID "FILE_ATTRIBUTE_HIDDENFL",0x2
SETID "FILE_ATTRIBUTE_NORMALFL",0x80
SETID "FILE_ATTRIBUTE_READONLYFL",0x1
SETID "FILE_ATTRIBUTE_SYSTEMFL",0x4
SETID "FILE_ATTRIBUTE_TEMPORARYFL",0x100

TYPE FILETIME
DEF dwLowDateTime:INT
DEF dwHighDateTime:INT
ENDTYPE

TYPE SYSTEMTIME,2
DEF wMillisecondsec,wSecond,wMinute,wHour,wDay,wDayofWeek,wMonth,wYear:WORD
ENDTYPE

TYPE WIN32_FIND_DATA,4
DEF dwFileAttributes:INT
DEF ftCreationTime:FILETIME
DEF ftLastAccessTime:FILETIME
DEF ftLastWriteTime:FILETIME
DEF nFileSizeHigh:UINT
DEF nFileSizeLow:UINT
DEF dwReserved0:INT
DEF dwReserved1:INT
DEF cFileName[Max_Path]:ISTRING
DEF cAlternate[14]:ISTRING
ENDTYPE

DEF hdir[Max_Path], tdir[Max_Path]:ISTRING
DEF Version$ = "1.0":STRING
DEF BS = "\\":STRING
DEF Start, edate2, edate3, created, accessed, written, g1rx, g2rx:STRING
DEF i, lvi:INT

DEF temptime:FILETIME
DEF times:SYSTEMTIME

$INCLUDE "..\\Colors.iwb"

SETID "LVM_DeleteItem",4104
SETID "LVM_DeleteAllItems",4105

ENUM ControlIDs
D1_B1 = 201
D1_B2
D1_B3
D1_B4
D1_B5
D1_B6
D1_E1
D1_E2
D1_E3
D1_L1
D1_G1
D1_R1
D1_R2
D1_R3
D1_R4
D1_G2
D1_R5
D1_R6
D1_R7
ENDENUM

TYPE LVITEM
DEF mask:UINT
DEF iItem:INT
DEF iSubItem:INT
DEF state:UINT
DEF stateMask:UINT
DEF pszText:STRING
DEF cchTextMax:INT
DEF iImage:INT
DEF lParam:INT
DEF iIndent:INT
DEF iGroupId:INT
DEF cColumns:UINT
DEF puColumns:UINT
ENDTYPE

TYPE NMLISTVIEW
DEF hwndFrom:UINT
DEF idFrom:INT
DEF code:INT
DEF iItem:INT
DEF iSubItem:INT
DEF uNewState:UINT
DEF uOldState:UINT
DEF uChanged:UINT
DEF ptActionx:INT
DEF ptActiony:INT
DEF lParam:INT
ENDTYPE

'DEF lv:NMLISTVIEW

CONST WM_USER = 0x400
CONST BFFM_SETSELECTION = WM_USER + 102
CONST BFFM_INITIALIZED = 1
CONST BFFM_VALIDATEFAILED = 3
CONST BIF_RETURNFSANCESTORS = 8
CONST BIF_RETURNONLYFSDIRS = 1
CONST BIF_NEWDIALOGSTYLE = 0x40
CONST BIF_DONTGOBELOWDOMAIN = 2
'optional
CONST BFFM_SELCHANGED = 2
CONST GWL_EXSTYLE = -20
CONST WS_EX_CONTEXTHELP = 0x400

'declare types and functions for Browse Folder
TYPE BROWSEINFO
DEF hOwner:UINT
DEF pidlRoot:UINT
DEF pszDisplayName:POINTER
DEF lpszTitle:POINTER
DEF ulFlags:UINT
DEF lpfn:UINT
DEF lParam:UINT
DEF iImage:UINT
ENDTYPE

SHGetSpecialFolderPathA(0,hdir,CSIDL_MYDOCUMENTS,FALSE)
hdir = hdir + BS

edate2 = DATE$("yyyy-MM-dd")
edate3 = DATE$("yyyy-MM-dd")

DEF d1:DIALOG
CREATEDIALOG d1,0,0,1200,640,0x80C80080,0,"Search Files by Date v" + Version$,&d1_handler
CONTROL d1,@BUTTON,"Browse",10,5,85,20,0x50000000,D1_B1
CONTROL d1,@EDIT,hdir,100,5,520,25,0x50800800,D1_E1
CONTROL d1,@BUTTON,"Exit",1105,6,80,25,0x50000000,D1_B2

CONTROL d1,@GROUPBOX,"",630,0,185,33,0x50000007,D1_G1
CONTROL d1,@RADIOBUTTON,">",635,11,30,16,@TABSTOP|@GROUP,D1_R1
CONTROL d1,@RADIOBUTTON,"<",670,11,30,16,@TABSTOP,D1_R2
CONTROL d1,@RADIOBUTTON,"Between",705,11,65,16,@TABSTOP,D1_R3
CONTROL d1,@RADIOBUTTON,"All",775,11,35,16,@TABSTOP,D1_R4

CONTROL d1,@EDIT,edate2,825,10,120,20,0x50800000,D1_E2
CONTROL d1,@EDIT,edate3,960,10,120,20,0x50800000,D1_E3

CONTROL d1,@BUTTON,"Process",10,30,85,20,0x50000000,D1_B3

CONTROL d1,@GROUPBOX,"",400,25,205,30,0x50000007,D1_G2
CONTROL d1,@RADIOBUTTON,"Created",405,32,60,16,@TABSTOP|@GROUP,D1_R5
CONTROL d1,@RADIOBUTTON,"Accessed",470,32,70,16,@TABSTOP,D1_R6
CONTROL d1,@RADIOBUTTON,"Written",545,32,55,16,@TABSTOP,D1_R7

CONTROL d1,@LISTVIEW,"",10,55,1180,575,@VSCROLL|0x50000001|@BORDER,D1_L1

DOMODAL d1
END

SUB d1_handler(),INT
SELECT @MESSAGE
CASE @IDINITDIALOG
CENTERWINDOW d1
' Set button 1 color
SETCONTROLCOLOR d1,D1_B1,BLACK,LBLUE
SETCONTROLCOLOR d1,D1_B2,BLACK,RED
SETCONTROLCOLOR d1,D1_B3,BLACK,GREEN

SETFONT d1,"Courier New",10,400,0,D1_L1
SETFONT d1,"Arial",14,800,0,D1_B2
FOR i = D1_B1 TO D1_L1
SETFONT d1,"Courier New",12,700,0,i
NEXT i
' Define ListView
SENDMESSAGE(GETCONTROLHANDLE(d1,D1_L1), LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES)
    SENDMESSAGE(d1,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_CHECKBOXES|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT,D1_L1)
' Load Headers
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,0,"File Name"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,1,"    Created"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,2,"    Accessed"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,3,"    Written"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,4,"           Size"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,5,"Attr"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,6,"SubDir"
CONTROLCMD d1,D1_L1,@LVINSERTCOLUMN,7," "
/* Set text colour */
SENDMESSAGE d1.hWnd,0x1024,0,0x000000,D1_L1
/* Set text background colour */
SENDMESSAGE d1.hWnd,0x1026,0,0xFFDF00,D1_L1
/* Set background colour */
SENDMESSAGE d1.hWnd,0x1001,0,0xF78000,D1_L1
/* Set colors of Radio Buttons */
SETCONTROLCOLOR d1,D1_R1,BLACK,GREEN
SETCONTROLCOLOR d1,D1_R2,BLACK,CYAN
SETCONTROLCOLOR d1,D1_R3,BLACK,PINK
SETCONTROLCOLOR d1,D1_R4,BLACK,LBLUE
SETCONTROLCOLOR d1,D1_R5,BLACK,GREEN
SETCONTROLCOLOR d1,D1_R6,BLACK,CYAN
SETCONTROLCOLOR d1,D1_R7,BLACK,PINK
/* Set ALL Radio Button ON */
SETSTATE d1,D1_R4,1
SETSTATE d1,D1_R7,1
/* Load initial Listview */
GetFiles(hdir, D1_L1)
CASE @IDCLOSEWINDOW
CASE& @IDDESTROY
CLOSEDIALOG d1,@IDOK
CASE @IDCONTROL
SELECT @CONTROLID
CASE D1_B1
Start = hdir
IF (FolderRequest(0,"Select directory...",tdir,Start,0x441))
hdir = tdir
SETCONTROLTEXT(d1,D1_E1,hdir)
ClearLV(D1_L1)
GetFiles(hdir,D1_L1)
ENDIF
CASE D1_B2
CLOSEDIALOG d1,@IDOK
CASE D1_B3
ClearLV(D1_L1)
GetFiles(hdir,D1_L1)
ENDSELECT
ENDSELECT
RETURN 0
ENDSUB

SUB FolderRequest(hWnd:UINT,title:POINTER,dir:POINTER,initial:POINTER,flags:UINT),INT
DEF r:INT
r = FALSE
DEF buffer[Max_Path]:ISTRING
DEF item_list:UINT
BROWSEINFO bi
RtlZeroMemory(&bi, LEN(bi))
bi.hOwner = hWnd
bi.lpszTitle = title
IF flags = 0
flags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_DONTGOBELOWDOMAIN
ENDIF
bi.ulFlags = flags
bi.lpfn = &BrowseFolderCallback
bi.lParam = initial
' Display the browser.
item_list = SHBrowseForFolder(&bi)
IF item_list
IF SHGetPathFromIDList(item_list, &buffer)
#<STRING>dir = buffer + BS
r = TRUE
ENDIF
CoTaskMemFree(item_list)
ENDIF
RETURN r
ENDSUB

SUB BrowseFolderCallback(hWnd:UINT, uMsg:UINT, lParam:UINT, lpData:UINT),INT
DEF dwStyle:UINT
DEF szText[Max_Path]:ISTRING
SELECT uMsg
CASE BFFM_INITIALIZED
' Set start directory
SendMessageA( hWnd, BFFM_SETSELECTION, TRUE, lpData )
' Remove the ? from the caption - optional
dwStyle = GetWindowLongA(hWnd, GWL_EXSTYLE)
IF (dwStyle & WS_EX_CONTEXTHELP)
SetWindowLongA(hWnd, GWL_EXSTYLE, dwStyle || WS_EX_CONTEXTHELP)
ENDIF
CASE BFFM_SELCHANGED :' optional
' Set the window text to the path
szText= "\x0"
SHGetPathFromIDList(lParam, &szText)
SetWindowTextA(hWnd, szText)
CASE BFFM_VALIDATEFAILED
RETURN 1
ENDSELECT
RETURN 0
ENDSUB

SUB GetFiles(ipath:STRING, lv:INT)
DEF dir:INT
DEF size:UINT64
DEF filename, FileSize$, r, temp:STRING

g1rx = "?"
SELECT 1
' >
CASE GETSTATE(d1,D1_R1)
g1rx = ">"
' <
CASE GETSTATE(d1,D1_R2)
g1rx = "<"
' Between
CASE GETSTATE(d1,D1_R3)
g1rx = "B"
' All
CASE GETSTATE(d1,D1_R4)
g1rx = "A"
ENDSELECT

g2rx = "?"
SELECT 1
' Created
CASE GETSTATE(d1,D1_R5)
g2rx = "C"
' Accessed
CASE GETSTATE(d1,D1_R6)
g2rx = "A"
' Written
CASE GETSTATE(d1,D1_R7)
g2rx = "W"
ENDSELECT

dir = FINDOPEN(ipath + "*.*")
IF (dir)
WHILE (dir)
temp = *<WIN32_FIND_DATA>dir.cFileName
IF (*<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_DIRECTORY)
IF temp <> "." AND temp <> ".." AND g1rx <> "A"
GetFiles(ipath + temp + BS,D1_L1)
ENDIF
ELSE
'size = *<WIN32_FIND_DATA>dir.nFileSizeLow | (*<WIN32_FIND_DATA>dir.nFileSizeHigh << 32)
size = *<WIN32_FIND_DATA>dir.nFileSizeLow + (4294967296q * *<WIN32_FIND_DATA>dir.nFileSizeHigh)
FileTimeToLocalFileTime(*<WIN32_FIND_DATA>dir.ftCreationTime,temptime)
created = FixDate()
FileTimeToLocalFileTime(*<WIN32_FIND_DATA>dir.ftLastAccessTime,temptime)
accessed = FixDate()
FileTimeToLocalFileTime(*<WIN32_FIND_DATA>dir.ftLastWriteTime,temptime)
written = FixDate()
FileSize$ = USING("%q###,###,###,###",size)
IF LEN(FileSize$) < 15 THEN FileSize$ = SPACE$(15 - LEN(FileSize$)) + FileSize$
r = ""
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_ARCHIVEFL    THEN r = "A"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_COMPRESSEDFL THEN r = r + "C"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_DIRECTORYFL  THEN r = r + "D"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_HIDDENFL     THEN r = r + "H"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_NORMALFL     THEN r = r + "N"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_READONLYFL   THEN r = r + "R"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_SYSTEMFL     THEN r = r + "S"
IF *<WIN32_FIND_DATA>dir.dwFileAttributes & @FILE_ATTRIBUTE_TEMPORARYFL  THEN r = r + "T"
IF LEN(r) < 4 THEN r = r + SPACE$(4 - LEN(r))
IF CheckIt() = "T"
lvi++
' Load Fields with data
CONTROLCMD d1,lv,@LVINSERTITEM,lvi,*<WIN32_FIND_DATA>dir.cFileName
CONTROLCMD d1,lv,@LVSETTEXT,lvi,1,created
CONTROLCMD d1,lv,@LVSETTEXT,lvi,2,accessed
CONTROLCMD d1,lv,@LVSETTEXT,lvi,3,written
CONTROLCMD d1,lv,@LVSETTEXT,lvi,4,FileSize$
CONTROLCMD d1,lv,@LVSETTEXT,lvi,5,r
CONTROLCMD d1,lv,@LVSETTEXT,lvi,6,ipath
' Set Flag off
SetCheckState(d1,lv,lvi,0)
ENDIF
ENDIF
filename = FINDNEXT(dir)
IF (!*<WIN32_FIND_DATA>dir.cFileName[0])
FINDCLOSE(dir)
dir = 0
ENDIF
ENDWHILE
ENDIF
' set column width to Automatic
CONTROLCMD d1,lv,@LVSETCOLWIDTH,0,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,1,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,2,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,3,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,4,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,5,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,6,-1
CONTROLCMD d1,lv,@LVSETCOLWIDTH,7,-2
' Set field alignment
CONTROLCMD d1,lv,@LVSALIGNLEFT,lvi,4
RETURN
ENDSUB

SUB SetCheckState(win:DIALOG,cid:INT,index:INT,ticked:INT)
DEF litem:LVITEM
litem.mask=LVIF_STATE
IF ticked THEN ticked = 0x2000 ELSE ticked = 0x1000
litem.state=ticked
litem.stateMask=LVIS_STATEIMAGEMASK
SENDMESSAGE(win,LVM_SETITEMSTATE,index,litem,cid)
RETURN
ENDSUB

SUB CheckIt(), STRING
IF g1rx = "A" THEN RETURN "T"
RETURN "F"
ENDSUB

SUB FixDate(), STRING
DEF fdate, ftime, temp:STRING
DEF hrs:INT

filetimetosystemtime(temptime,times)
fDate = LTRIM$(STR$(times.wYear)) + "-"
temp = LTRIM$(STR$(times.wMonth))
IF (LEN(temp) < 2) THEN temp = "0" + temp
fDate += temp + "-"
temp = LTRIM$(STR$(times.wDay))
IF (LEN(temp) < 2) THEN temp = "0" + temp
fDate += temp
hrs = times.wHour
temp = LTRIM$(STR$(hrs))
IF (LEN(temp) < 2) THEN temp = "0" + temp
fTime = temp + ":"
temp = LTRIM$(STR$(times.wMinute))
IF (LEN(temp) < 2) THEN temp = "0" + temp
fTime += temp
RETURN fDate + " " + fTime
ENDSUB

SUB ClearLV(lv:INT)
' clear listview
SENDMESSAGE d1,@LVM_DeleteAllItems,0,0,lv
lvi = -1
ENDSUB


I am just not sure what I screwed up to make it not show the dates, size and subdir.

Any help will be appreciated,
Thanks,
Bill
When all else fails, get a bigger hammer.

LarryMc

Change this line
DEF i, lvi:INT
to
DEF i, lvi=-1:INT

or
change this
/* Load initial Listview */
GetFiles(hdir, D1_L1)

to
/* Load initial Listview */
ClearLV(D1_L1)
GetFiles(hdir, D1_L1)


BUT DON"T DO BOTH
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

billhsln

Thank you, Larry.  That fixed it.  I spent over 1 hour trying things and trying to figure out what I screwed up.  It is always the little things that drive you crazy.

Thanks again,
Bill
When all else fails, get a bigger hammer.