RE: Grid Control: trap event of checkbox change
- Posted by Phil Russell <pg_russell at lineone.net> Feb 13, 2003
- 476 views
Dan, You have to trap the EGW_CLICK message. I have amended the sample code to show this (it puts the clicked cell details in the window title). Regards, Phil Dan Moyer wrote: > Phil, > > If I have a column with checkboxes in it, how can I know that a user has > clicked on a checkbox, and which one? > > Dan Moyer > Code Follows: -- code generated by Win32Lib IDE v0.14.2 include Win32lib.ew without warning ---------------------------------------------------------------------------- ---- -- Window Window1 constant Window1 = createEx( Window, "Grid Control with CheckBoxes", 0, Default, Default, 600, 300, 0, 0 ) constant PushButton2 = createEx( PushButton, "Select File", Window1, 484, 20, 88, 28, 0, 0 ) constant PushButton3 = createEx( PushButton, "Process Data", Window1, 484, 72, 88, 28, 0, 0 ) --------------------------------------------------------- ---------------------------------------------------------------------------- ---- include eugrid.ew atom void integer aGrid, colFileName, colCB1, colCB2, colFileDir -- Create grid, create parms=(parent, x, y, width, height, show_window) aGrid = EGW_CreateGrid( Window1, 10, 15, 450, 200, True ) -- no row header void = EGW_SetGridProperty( aGrid, EGW_ROW_HEADER_WIDTH, 0) --***Phil: Make grid look a bit more like a list view void = EGW_SetGridProperty( aGrid, EGW_NULL_GRID_COLOR, BrightWhite) void = EGW_SetGridProperty( aGrid, EGW_LINE_COLOR, BrightWhite) void = EGW_SetGridProperty( aGrid, EGW_CELL_BORDER, False) -- Filename column -- ***Phil: Make this a protected edit field to get highlighting --colFileName = EGW_AddColumn( aGrid, "FileName", 200, EGW_LAST, EGW_STATIC, 1 ) colFileName = EGW_AddColumn( aGrid, "FileName", 100, EGW_LAST, EGW_EDIT, 1 ) --void = EGW_SetColumnProperty(aGrid, colFileName, EGW_COL_ALIGN, EGW_CENTER) void = EGW_SetColumnProperty(aGrid, colFileName, EGW_COL_EDITABLE, False) --void = EGW_SetColumnProperty( aGrid, colFileName, EGW_COL_WIDTH, 75 ) -- checkbox columns: colCB1 = EGW_AddColumn(aGrid, "Action1", 60, EGW_LAST, EGW_CHECKBOX, 2 ) void = EGW_SetColumnProperty(aGrid, colCB1, EGW_COL_ALIGN, EGW_CENTER) colCB2 = EGW_AddColumn(aGrid, "Action2", 60, EGW_LAST, EGW_CHECKBOX, 3 ) void = EGW_SetColumnProperty(aGrid, colCB2, EGW_COL_ALIGN, EGW_CENTER) -- file directory column: colFileDir = EGW_AddColumn( aGrid, "FileDirectory", 226, EGW_LAST, EGW_STATIC, 4 ) --void = EGW_SetColumnProperty(aGrid, colFileDir, EGW_COL_ALIGN, EGW_CENTER) ---------------------------------------------------------------------------- ---- procedure PushButton2_onClick (integer self, integer event, sequence params)--params is () seq fName, dirName, fullPathName, temp seq newRow int row, posBS -- posBS is position of back-slash in file name temp = {} -- get a file name fName = getOpenFileName( Window1, current_dir() & "\\", "" ) -- entered a file name? if length( fName ) = 0 then return end if -- separate filename from dirName: if find('\\',fName) then -- found back-slash -- work from end, remove chars after last back-slash: for n = length(fName) to 1 by -1do if not equal('\\',fName[n]) then temp = prepend(temp,fName[n]) else posBS = n exit end if end for fullPathName = fName dirName = fName[1..posBS -1] fName = temp else dirName = "" end if newRow = {fName,1,1,dirName } -- example relating to adding new row: --global constant EmptyGridRow = {"", 2, "", "", 0, True} -- Add new row to grid: row = EGW_AddDataRow(aGrid, newRow, EGW_LAST) --***Phil: Not necessary unless you are doing database manipulation *** --void = EGW_SetDataRowFlag(aGrid, row, EGW_ROW_NEW, True) -- Go to it? --***Phil: You can't use EGW_LAST here - use row number from EGW_AddDataRow instead -- void = EGW_ScrollToCell(aGrid, EGW_LAST, colFileName) --repaintWindow(Window1) --***Phil Start -- Repaint window to make sure new row is displayed repaintWindow(aGrid) -- Scroll to first column of new row void = EGW_ScrollToCell( aGrid, row, colFileName ) --***Phil End end procedure setHandler( PushButton2, w32HClick, routine_id("PushButton2_onClick")) ---------------------------------------------------------------------------- ---- procedure PushButton3_onClick (integer self, integer event, sequence params)--params is () object result atom numOfRows numOfRows = EGW_GetRowCount ( aGrid ) for n = 1 to numOfRows do result = EGW_GetDataCellValue ( aGrid, n, 2 ) puts(1, sprint(result)) result = EGW_GetDataCellValue ( aGrid, n, 3 ) puts(1, sprint(result)) puts(1, "\n") end for end procedure setHandler( PushButton3, w32HClick, routine_id("PushButton3_onClick")) --*------------------------------------------------------* -- onGridEvent: Process messages for grid control --*------------------------------------------------------* procedure onGridEvent (atom self, atom event, sequence parms) atom msg, wParam, lParam sequence cell msg = parms[1] wParam = parms[2] lParam = parms[3] -- User has clicked on a cell if msg = EGW_CLICK then cell = EGW_GetCurrentCell( aGrid ) setText( Window1, "Clicked on row number: " & sprint(cell[1]) & ", column id: " & sprint(cell[2]) ) end if end procedure setHandler( aGrid, w32HEvent, routine_id("onGridEvent")) WinMain( Window1,Normal )