Re: Grid Control: trap event of checkbox change
- Posted by Dan Moyer <DANIELMOYER at prodigy.net> Feb 13, 2003
- 449 views
Phil, Great! I had a guess the EGW_CLICK message was involved, but I didn't know how to use it. Thanks! Dan ----- Original Message ----- From: "Phil Russell" <pg_russell at lineone.net> To: "EUforum" <EUforum at topica.com> Subject: RE: Grid Control: trap event of checkbox change > > 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 ) > > > > TOPICA - Start your own email discussion group. FREE! >