RE: Grid Control: trap event of checkbox change

new topic     » topic index » view thread      » older message » newer message

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 )

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu