RE: Grid Control: how disable checkbox(s)?
Dan,
You can set an entire column of checkboxes to be disabled by setting the
column property of EGW_COL_EDITABLE to False. Disabling individual
cells is a bit harder as this property is not (yet!) supported for
individual cells - eventually I intend that you will be able to set most
column properties for an individual cell but I this is dependent on some
other changes first.
I have come up with a workaround which is a little clunky but seems to
work. See below...
Regards,
Phil
Dan Moyer wrote:
> Phil,
>
> How could I cause checkbox(s) in a grid to become disabled?
>
> 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
-- Save state of last checkbox clicked
object last_checkbox_state
-- 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 - row 1 disabled", 120, EGW_LAST,
EGW_CHECKBOX, 2 )
void = EGW_SetColumnProperty(aGrid, colCB1, EGW_COL_ALIGN, EGW_CENTER)
colCB2 = EGW_AddColumn(aGrid, "Action2 - all disabled", 120, EGW_LAST,
EGW_CHECKBOX, 3 )
void = EGW_SetColumnProperty(aGrid, colCB2, EGW_COL_ALIGN, EGW_CENTER)
void = EGW_SetColumnProperty(aGrid, colCB2, EGW_COL_EDITABLE, False)
-- 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_AddDataRowinstead
-- 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"))
procedure onGridEvent (atom self, atom event, sequence parms)
atom msg, wParam, lParam
sequence cell
object cbState
msg = parms[1]
wParam = parms[2]
lParam = parms[3]
cell = EGW_GetCurrentCell( aGrid )
-- If checkbox clicked then save state
if msg = EGW_LEFTBUTTONDOWN then
-- Save checkbox state on mouse down
if cell[1]>0 and (cell[2] = colCB1 or cell[2] = colCB2) then -- is a
checkbox column
last_checkbox_state = EGW_GetDataCellValue ( aGrid, cell[1], cell[2] )
end if
-- If checkbox armed by pressing space bar then save state
elsif msg = EGW_CELLEDIT then
-- Save checkbox state on spacebar down
if cell[1]>0 and (cell[2] = colCB1 or cell[2] = colCB2) -- is a
checkbox column
and wParam = VK_SPACE then
last_checkbox_state = EGW_GetDataCellValue ( aGrid, cell[1], cell[2] )
end if
-- User has clicked on a cell
elsif msg = EGW_LEFTBUTTONUP then
-- Process checkbox change of state
if cell[1]>0 and (cell[2] = colCB1 or cell[2] = colCB2) then -- is a
checkbox column
-- get state of clicked checkbox:
cbState = EGW_GetDataCellValue ( aGrid, cell[1], cell[2] )
-- Simulate protected checkbox for e.g. cb1 on first row only
if cell[1] = 1 and cell[2] = colCB1 then
void = EGW_SetDataCellValue( aGrid, cell[1], cell[2],
last_checkbox_state )
end if
-- Display checkbox state in window title
setText( Window1, "Clicked on row number: " & sprint(cell[1])
& ", column id: " & sprint(cell[2])
& " , state: " & sprint(cbState) )
end if
end if
end procedure
setHandler( aGrid, w32HEvent, routine_id("onGridEvent"))
WinMain( Window1,Normal )
|
Not Categorized, Please Help
|
|