In learning how to work with the Listview control, it is useful to write an event logger for the control to see how notification events are generated and in what order and by what actions.
Here is a Listview Event Logger for use with PB 9.0:
A zip file is attached with both the compiled program and the source code.
Here is a Listview Event Logger for use with PB 9.0:
Code:
' *************************************************************** ' This code can be used Royalty Free and Freely Distributed ! ' *************************************************************** #COMPILE EXE #REGISTER NONE #DIM ALL ' This is helpful to prevent errors in coding #INCLUDE "win32api.inc" ' Must come first before other include files ! #INCLUDE "commctrl.inc" ' ************************************************************* ' Constants and Declares (#1) ' ************************************************************* %FORM1_LV1 = 90 %FORM1_TEXT1 = 100 ' -------------------------------------------------- DECLARE SUB ShowDialog_Form1(BYVAL hParent&) DECLARE CALLBACK FUNCTION Form1_DLGPROC ' -------------------------------------------------- DECLARE CALLBACK FUNCTION CBF_FORM1_TEXT1() ' GLOBAL hForm1& ' Dialog handle ' ' ************************************************************* ' Application Entrance ' ************************************************************* FUNCTION PBMAIN LOCAL Count& ShowDialog_Form1 0 DO DIALOG DOEVENTS TO Count& LOOP UNTIL Count&=0 END FUNCTION ' SUB ShowDialog_Form1(BYVAL hParent&) LOCAL Style&, ExStyle&, LVExStyle& LOCAL N&, CT& ' Variables used for Reading Data in Arrays for Listbox and Combobox ' hParent& = 0 if no parent Dialog Style& = %WS_POPUP OR %DS_MODALFRAME OR %WS_CAPTION OR %WS_MINIMIZEBOX OR %WS_SYSMENU OR %DS_CENTER ExStyle& = 0 DIALOG NEW hParent&, "Listview Control Event Logger", 0, 0, 500, 350, Style&, ExStyle& TO hForm1& ' ' --------------------------------------------------------------------------------------- ' Experiment with the different Listview styles to see effects on notification events ' --------------------------------------------------------------------------------------- Style& = %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %LVS_REPORT OR %LVS_SHOWSELALWAYS ExStyle& = %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_RIGHTSCROLLBAR LVExStyle& = %LVS_EX_FULLROWSELECT OR %LVS_EX_ONECLICKACTIVATE OR %LVS_EX_GRIDLINES ' --------------------------------------------------------------------------------------- ' CONTROL ADD LISTVIEW, hForm1&, %FORM1_LV1, "FoxList", 15, 15, 240, 320, Style&, ExStyle& CALL CBF_FORM1_LV1 LISTVIEW SET STYLE hForm1&, %FORM1_LV1, LVExStyle& LISTVIEW INSERT COLUMN hForm1&, %FORM1_LV1, 1, "Column 1", 80,0 LISTVIEW INSERT COLUMN hForm1&, %FORM1_LV1, 2, "Column 2", 80,0 LISTVIEW INSERT COLUMN hForm1&, %FORM1_LV1, 3, "Column 3", 80,0 FOR N&=1 TO 50 LISTVIEW INSERT ITEM hForm1&, %FORM1_LV1, N&, 0, "Item"+STR$(N&)+"-A" LISTVIEW SET TEXT hForm1&, %FORM1_LV1, N&, 2, "Item"+STR$(N&)+"-B" LISTVIEW SET TEXT hForm1&, %FORM1_LV1, N&, 3, "Item"+STR$(N&)+"-C" NEXT N& CONTROL ADD TEXTBOX, hForm1&, %FORM1_TEXT1, "", 270, 15, 225, 320, _ %WS_CHILD OR %WS_VISIBLE OR %ES_AUTOHSCROLL OR %WS_TABSTOP OR %ES_MULTILINE OR %WS_VSCROLL OR %ES_AUTOVSCROLL OR %ES_WANTRETURN, _ %WS_EX_CLIENTEDGE CALL CBF_FORM1_TEXT1 LOCAL hFont& FONT NEW "System", 9, 0, 1, 1, 0 TO hFont& CONTROL SET FONT hForm1&, %FORM1_TEXT1, hFont& DIALOG SHOW MODELESS hForm1& , CALL Form1_DLGPROC END SUB ' ' ************************************************************* ' Dialog Callback Procedure ' for Form Form1 ' uses Global Handle - hForm1& ' ************************************************************* ' CALLBACK FUNCTION Form1_DLGPROC SELECT CASE CBMSG CASE ELSE END SELECT END FUNCTION ' ' ************************************************************* ' Application Callback Functions (or Subs) for Controls (#4) ' ************************************************************* CALLBACK FUNCTION CBF_FORM1_TEXT1 SELECT CASE CB.CTLMSG CASE %EN_CHANGE END SELECT END FUNCTION CALLBACK FUNCTION CBF_FORM1_LV1 IF CB.MSG=%WM_NOTIFY THEN SELECT CASE CB.NMCODE CASE -12,-150, -121 ' %NM_CUSTOMDRAW, %LVN_GETDISPINFO, %LVN_HOTTRACK CASE ELSE LOCAL T$, E$, D$ SELECT CASE CB.NMCODE CASE %LVN_ITEMCHANGING D$="%LVN_ITEMCHANGING" CASE %LVN_ITEMCHANGED D$="%LVN_ITEMCHANGED" CASE %LVN_INSERTITEM D$="%LVN_INSERTITEM" CASE %LVN_DELETEITEM D$="%LVN_DELETEITEM" CASE %LVN_DELETEALLITEMS D$="%LVN_DELETEALLITEMS" CASE %LVN_BEGINLABELEDIT D$="%LVN_BEGINLABELEDIT" CASE %LVN_ENDLABELEDIT D$="%LVN_ENDLABELEDIT" CASE %LVN_COLUMNCLICK D$="%LVN_COLUMNCLICK" CASE %LVN_BEGINDRAG D$="%LVN_BEGINDRAG" CASE %LVN_BEGINRDRAG D$="%LVN_BEGINRDRAG" CASE %LVN_ODCACHEHINT D$="%LVN_ODCACHEHINT" CASE %LVN_ODFINDITEM D$="%LVN_ODFINDITEM" CASE %LVN_ITEMACTIVATE D$="%LVN_ITEMACTIVATE" CASE %LVN_ODSTATECHANGED D$="%LVN_ODSTATECHANGED" CASE %LVN_HOTTRACK D$="%LVN_HOTTRACK" CASE %LVN_GETDISPINFO D$="%LVN_GETDISPINFO" CASE %LVN_SETDISPINFO D$="%LVN_SETDISPINFO" CASE %LVN_KEYDOWN D$="%LVN_KEYDOWN" CASE %LVN_MARQUEEBEGIN D$="%LVN_MARQUEEBEGIN" CASE %LVN_GETINFOTIP D$="%LVN_GETINFOTIP" CASE %LVN_BEGINSCROLL D$="%LVN_BEGINSCROLL" CASE %LVN_ENDSCROLL D$="%LVN_ENDSCROLL" CASE %NM_OUTOFMEMORY D$="%NM_OUTOFMEMORY" CASE %NM_CLICK D$="%NM_CLICK" CASE %NM_DBLCLK D$="%NM_DBLCLK" CASE %NM_RETURN D$="%NM_RETURN" CASE %NM_RCLICK D$="%NM_RCLICK" CASE %NM_RDBLCLK D$="%NM_RDBLCLK" CASE %NM_SETFOCUS D$="%NM_SETFOCUS" CASE %NM_KILLFOCUS D$="%NM_KILLFOCUS" CASE %NM_CUSTOMDRAW D$="%NM_CUSTOMDRAW" CASE %NM_HOVER D$="%NM_HOVER" CASE %NM_NCHITTEST D$="%NM_NCHITTEST" CASE %NM_KEYDOWN D$="%NM_KEYDOWN" CASE %NM_RELEASEDCAPTURE D$="%NM_RELEASEDCAPTURE" CASE %NM_SETCURSOR D$="%NM_SETCURSOR" CASE %NM_CHAR D$="%NM_CHAR" CASE %NM_TOOLTIPSCREATED D$="%NM_TOOLTIPSCREATED" CASE %NM_LDOWN D$="%NM_LDOWN" CASE %NM_RDOWN D$="%NM_RDOWN" CASE %NM_THEMECHANGED D$="%NM_THEMECHANGED" CASE ELSE D$="UnKnown" END SELECT T$=" "+LEFT$(D$+STRING$(20," "),20)+" "+RIGHT$(" "+TRIM$(STR$(CB.NMCODE)),5)+$CRLF CONTROL GET TEXT hForm1&, %FORM1_TEXT1 TO E$ IF LEN(E$)>32000 THEN E$="" E$=E$+T$ CONTROL SET TEXT hForm1&, %FORM1_TEXT1, E$ LOCAL LN& CONTROL SEND hForm1&, %FORM1_TEXT1, %EM_GETLINECOUNT,0,0 TO LN& CONTROL SEND hForm1&, %FORM1_TEXT1, %EM_LINESCROLL, 0, LN& END SELECT END IF END FUNCTION
Comment