Header file for Listview: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 87: Line 87:
     ${NSD_LV_InsertItem} $1 2 'Item 2'
     ${NSD_LV_InsertItem} $1 2 'Item 2'
     ; Retrieve the recommended width and height of an icon.
     ; Retrieve the recommended width and height of an icon.
     System::Call 'user32::GetSystemMetrics(i ${SM_CXICON})i.r7'
     System::Call 'user32::GetSystemMetrics(i${SM_CXICON})i.r7'
     System::Call 'user32::GetSystemMetrics(i ${SM_CYICON})i.r8'
     System::Call 'user32::GetSystemMetrics(i${SM_CYICON})i.r8'
     ; Retrieve the handle of shell32.dll.
     ; Retrieve the handle of shell32.dll.
     System::Call 'kernel32::GetModuleHandle(i)i(t"shell32.dll")i.r0'
     System::Call 'kernel32::GetModuleHandle(i)i(t"shell32.dll")i.r0'

Revision as of 06:40, 2 July 2010

Header file for creating Listview control

In an NSIS forum "dreams8.com", a member named "gfm688" writes a header file to create and handle a listview control with the report view. This header file is modified by me, I add some new macro commands.

See the attachment for details, 8 examples included.

ListView.zip (328 KB)

Example 1

/* Listview styles are defined in header file */
!include "MUI2.nsh"
!include "ListView.nsh"
 
Name "List View Example"
OutFile ListView.exe
 
Page custom CreatePage
!insertmacro MUI_LANGUAGE "English"
 
Function CreatePage
 
    !insertmacro MUI_HEADER_TEXT "List view" "A listview control created by nsDialogs"
 
    nsDialogs::Create 1018
    Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
 
    ${NSD_CreateListView} 0u 0u 300u 140u "Listview"
    Pop $1
    ; ${NSD_LV_InsertColumn} hwnd col_idx_0_based col_width col_text
    ${NSD_LV_InsertColumn} $1 0 200 "column 0"
    ${NSD_LV_InsertColumn} $1 1 100 "column 1"
    ${NSD_LV_InsertColumn} $1 2 100 "column 2"
    ; ${NSD_LV_InsertItem} hwnd item_idx_0_based item_text
    ${NSD_LV_InsertItem} $1 0 'Item 0'
    ; ${NSD_LV_SetSubItem} hwnd item_idx_0_based subitem_idx_1_based subitem_text
    ${NSD_LV_SetSubItem} $1 0 1 'Subitem 0_1'
    ${NSD_LV_SetSubItem} $1 0 2 'Subitem 0_2'
    ${NSD_LV_InsertItem} $1 1 'Item 1'
    ${NSD_LV_SetSubItem} $1 1 2 'Subitem 1_2'
    ${NSD_LV_InsertItem} $1 2 'Item 2'
    ${NSD_LV_SetSubItem} $1 2 1 'Subitem 2_1'
 
    nsDialogs::Show

FunctionEnd
 
Section -Main
 
SectionEnd

Compile the script and run, you will see a page like this: Listview1.png

Example 2

/* Listview styles are defined in header file */
!include "MUI2.nsh"
!include "ListView.nsh"
 
Name "List View Example"
OutFile ListView.exe
 
Page custom CreatePage
!insertmacro MUI_LANGUAGE "English"
 
Function CreatePage
 
    !insertmacro MUI_HEADER_TEXT "List view" "Using icon resource from system dll as image list"
 
    nsDialogs::Create 1018
    Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
 
    ${NSD_CreateListView} 0u 0u 300u 140u "Listview"
    Pop $1
    ${NSD_LV_InsertColumn} $1 0 200 "column 0"
    ${NSD_LV_InsertColumn} $1 1 200 "column 1"
    ${NSD_LV_InsertItem} $1 0 'Item 0'
    ${NSD_LV_InsertItem} $1 1 'Item 1'
    ${NSD_LV_InsertItem} $1 2 'Item 2'
    ; Retrieve the recommended width and height of an icon.
    System::Call 'user32::GetSystemMetrics(i${SM_CXICON})i.r7'
    System::Call 'user32::GetSystemMetrics(i${SM_CYICON})i.r8'
    ; Retrieve the handle of shell32.dll.
    System::Call 'kernel32::GetModuleHandle(i)i(t"shell32.dll")i.r0'
    ; Load the 9th icon of recommended size in shell32.dll.
    System::Call 'user32::LoadImage(i,t,i,i,i,i)i(r0,i9,${IMAGE_ICON},r7,r8,${LR_SHARED})i.R1'
    ; Free the handle of shell32.dll.
    System::Call 'user32::FreeLibrary(ir0)'
    ; Create an imagelist, width of each image is $7 and height is $8.
    System::Call 'comctl32::ImageList_Create(ir7,ir8,i${ILC_MASK}|${ILC_COLOR32},i0,i0)i.R0'
    ; Add icon to the imagelist by handle.
    System::Call 'comctl32::ImageList_AddIcon(iR0,iR1)'
 
    SendMessage $1 ${LVM_SETIMAGELIST} ${LVSIL_SMALL} $R0
    SendMessage $1 ${LVM_SETEXTENDEDLISTVIEWSTYLE} 0 ${LVS_EX_FULLROWSELECT}
 
    nsDialogs::Show

    ; Destroy the image list
    System::Call 'comctl32::ImageList_Destroy(iR0)'
 
FunctionEnd
 
Section -Main
 
SectionEnd

Compile the script and run, you will see a page like this: Listview2.png