Email me

Listbox met kolommen

Resultaten van een reeks bestanden, een overzicht van eigenschappen en ga zo maar door is het netste in een format waarbij de gebruiker zelf de kolommen eventueel kan aanpassen. Zo'n dialoogscherm heet een Listview en Borje Hagsten heeft een programma aan het public domain geschonken, waarin dit gebruik wordt gedemonstreerd. Het programma zelf treft u aan bij voorbeelden.
Om de zaak eenvoudig te houden, heb ik de routine eruit gedestilleerd en treft u die hier aan. Het geheel is getest in PB/DLL 6.0

De routine als BAS bestand vindt u hier
De routine als EXE bestand vindt u hier
Beide (BAS en EXE) gecombineerd in 蜑n ZIP bestand (17 kB)
De routine in HTML (let op regel einde en zo):


' Listbox_kolom.bas
' Gebaseerd op een Public domain sample for PB/DLL 6.0 by Borje Hagsten, June 18, 2000
'
#COMPILE EXE
#INCLUDE "WIN32API.INC"
#INCLUDE "COMMCTRL.INC"

%ID_LISTVIEW = 20

GLOBAL hDlg AS LONG
GLOBAL hListView AS LONG
GLOBAL TheEnd AS LONG

TYPE BrowseInfo
    hWndOwner AS LONG
    pIDLRoot AS LONG
    pszDisplayName AS LONG
    lpszTitle AS LONG
    ulFlags AS LONG
    lpfnCallback AS LONG
    lParam AS LONG
    iImage AS LONG
END TYPE

SUB Wait(time AS LONG)
    LOCAL r AS LONG

    FOR r=1 TO time/25
        DIALOG DOEVENTS
        SLEEP(30)
        IF TheEnd<>0 THEN EXIT FOR
    NEXT r
END SUB

SUB EmptyListView
    CALL ListView_DeleteAllItems(hListView) 'Empty ListView
END SUB

SUB RenewListView
    lRes& = SendMessage(hListView, %WM_SETREDRAW, -1, 0) 'Redraw listview
    lRes& = InvalidateRect(hListView, BYVAL %NULL, 0)
    UpDateWindow hListView
END SUB

SUB AddItem(kolom1 AS STRING,kolom2 AS STRING,kolom3 AS STRING,kolom4 AS STRING,kolom5 AS STRING, kolom6 AS STRING)
    LOCAL lngItem AS LONG
    LOCAL lplvi AS LVITEM

    lngItem = ListView_InsertItem(hListView,lplvi )
    CALL ListView_SetItemText(hListView, lngItem, 0, BYVAL STRPTR(Kolom1))
    CALL ListView_SetItemText(hListView, lngItem, 1, BYVAL STRPTR(Kolom2))
    CALL ListView_SetItemText(hListView, lngItem, 2, BYVAL STRPTR(Kolom3))
    CALL ListView_SetItemText(hListView, lngItem, 3, BYVAL STRPTR(Kolom4))
    CALL ListView_SetItemText(hListView, lngItem, 4, BYVAL STRPTR(Kolom5))
    CALL ListView_SetItemText(hListView, lngItem, 5, BYVAL STRPTR(Kolom6))
END SUB


CALLBACK FUNCTION Cancel
    DIALOG END hDlg,0
    TheEnd=1
    FUNCTION=1
END FUNCTION

'いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい
' Startpunt - maak dialoog aan met de listbox
'いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい
FUNCTION PBMAIN () AS LONG
    LOCAL x AS LONG, y AS LONG, w AS LONG, xx AS LONG, yy AS LONG
    LOCAL Stijl AS LONG
    LOCAL r AS LONG

    'Create a new dialog template
    Stijl=%DS_MODALFRAME OR %WS_CAPTION OR %WS_SYSMENU OR %DS_CENTER
    DIALOG NEW hWndMain2&, "Demo listbox with Colomns",,, 398, 317, Stijl, 0 TO hDlg
        DIALOG GET SIZE hDlg TO x, y
        CONTROL ADD BUTTON, hDlg,%IDCancel,"Cancel",300,290,50,20 CALL Cancel


        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        'Initialize ListView control
        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LOCAL iccex AS INIT_COMMON_CONTROLSEX
        iccex.dwSize = SIZEOF(iccex)
        iccex.dwICC = %ICC_LISTVIEW_CLASSES
        CALL InitCommonControlsEx(iccex)

        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        'Build and setup ListView control
        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LOCAL Style AS LONG
        Style = %WS_CHILD OR %WS_VISIBLE OR %LVS_REPORT OR %LVS_SHAREIMAGELISTS OR _
            %LVS_SORTASCENDING OR %LVS_SHOWSELALWAYS

        CONTROL ADD "SysListView32", hDlg, %ID_LISTVIEW,"", 4, 12, x& - 12, 267, Style, _
            %WS_EX_CLIENTEDGE

        CONTROL HANDLE hDlg,%ID_LISTVIEW TO hListView

        Style = SendMessage (hListView,%LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
        Style = Style OR %LVS_EX_FULLROWSELECT OR %LVS_EX_INFOTIP
        SendMessage hListView, %LVM_SETEXTENDEDLISTVIEWSTYLE, 0, BYVAL Style

        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        'Setup ListView columns
        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LOCAL LVC AS LV_COLUMN
        LOCAL zText AS ASCIIZ * 256
        CONTROL GET SIZE hDlg, %ID_LISTVIEW TO x, y
        DIALOG UNITS hDlg, x, y TO PIXELS xx, yy
        'in XX en YY zitten nu de grootte van de dialoog in pixels

        LVC.mask = %LVCF_FMT OR %LVCF_TEXT OR %LVCF_WIDTH
        zText = "Item"
        LVC.pszText = VARPTR(zText)
        LVC.fmt = %LVCFMT_LEFT 'links uitlijnen deze kolom
        LVC.cx = xx * 0.25 'breedte maat voor deze kolom
        LVC.iOrder = 0
        CONTROL SEND hDlg,%ID_LISTVIEW, %LVM_INSERTCOLUMN, 0, VARPTR(LVC)

        zText = "Kolom 2"
        LVC.pszText = VARPTR(zText)
        LVC.fmt = %LVCFMT_LEFT 'links uitlijnen deze kolom
        LVC.cx = xx * 0.11 'breedte maat voor deze kolom
        LVC.iOrder = 1
        CONTROL SEND hDlg,%ID_LISTVIEW, %LVM_INSERTCOLUMN, 1, VARPTR(LVC)

        zText = "Kolom 3"
        LVC.pszText = VARPTR(zText)
        LVC.fmt = %LVCFMT_LEFT 'links uitlijnen
        LVC.cx = xx * 0.11 'breedte maat voor deze kolom
        LVC.iOrder = 2
        CONTROL SEND hDlg,%ID_LISTVIEW, %LVM_INSERTCOLUMN, 2, VARPTR(LVC)

        zText = "Centreer"
        LVC.pszText = VARPTR(zText)
        LVC.fmt = %LVCFMT_CENTER 'centreren deze kolom
        LVC.cx = xx * 0.17 'breedte maat voor deze kolom
        LVC.iOrder = 3
        CONTROL SEND hDlg,%ID_LISTVIEW, %LVM_INSERTCOLUMN, 3, VARPTR(LVC)

        zText = "Links"
        LVC.pszText = VARPTR(zText)
        LVC.fmt = %LVCFMT_LEFT 'links uitlijnen deze kolom
        LVC.cx = xx * 0.17 'breedte maat voor deze kolom
        LVC.iOrder = 4
        CONTROL SEND hDlg,%ID_LISTVIEW, %LVM_INSERTCOLUMN, 4, VARPTR(LVC)

        zText = "Rechts"
        LVC.pszText = VARPTR(zText)
        LVC.fmt = %LVCFMT_RIGHT 'rechts uitlijnen
        LVC.cx = xx * 0.17 'breedte maat voor deze kolom
        LVC.iOrder = 5
        CONTROL SEND hDlg,%ID_LISTVIEW, %LVM_INSERTCOLUMN, 5, VARPTR(LVC)

        'Display the dialog
        DIALOG SHOW MODELESS hDlg

        FOR r=1 TO 20
            AddItem "Item "+FORMAT$(r,"##")+" - Testtekst1", _
                     "Testtekst2","Testtekst3","Testtekst4","Testtekst5","TestTekst6"
            Wait(500) 'wait 500 ms per item, but DO dialog doevents in the waiting time every 30 ms
        NEXT r


        RenewListView 'redraw and so on

        MSGBOX("Number of elements in the listview: "+STR$(ListView_GetItemCount(hListView)))

END FUNCTION

 

Bezoek het PB forum in het Nederlands en/of teken mijn gastenboek.

Datum laatste aanpassing:
29 december 2003 03:42:26

Email mij voor reacties,
aanvullingen en correcties