1º) Ao carregar o Form:
LOAD WINDOW Form_1
ON KEY ESCAPE OF Form_1 ACTION Form_1.Release // Esta linha é para funcionar a tecla ESC para sair do Form
_HMG_SYSDATA[ 40 ][ GetControlIndex( "Grid_1", "Form_1" ) ][ 46 ] := {|| minhaProcedure1_OnCheckBoxClicked() } // Define o CodeBlock, "procedure" que será invocada ao clicar ou desclicar o CheckBox da grade (antes da primeira coluna da grid)
_HMG_SYSDATA[ 40 ][ GetControlIndex( "Grid_2", "Form_1" ) ][ 46 ] := {|| minhaProcedure2_OnCheckBoxClicked() } // Voce pode ter outra Grid com CheckBoxEnabled, define a procedure para a grid2
Form_1.CENTER
Form_1.ACTIVATE
2º) Ao iniciar o Form (evento onInit do form):
Form_1.Grid_1.CheckBoxEnabled := .T. // Seta para usar o CheckBox na Grid
Form_1.Grid_2.CheckBoxEnabled := .T. // Idem
3º) Crie as Procedures do evento OnCheckBox para cada Grid
Procedure minhaProcedure1_OnCheckBoxClicked()
Local var....
Form_1.Grid_1.Value := This.CellRowClicked // Seta/Seleciona a linha da grade clicada
// Form_1.Grid_1.Value := { This.CellRowClicked, 3} // Seta a linha e a coluna desejada na grade da linha clicada caso CELLNAVIGATION for .T.
/* Verifica se o usuário clicou ou desclicou o CheckBox da linha na grade */
if Form_1.Grid_1.CheckBoxItem(This.CellRowClicked)
...codigo
else
...codigo
endif
Return
4º) Ao carregar os registros na Grid vc poderá setar ou não o CheckBox para cada linha:
Procedure form_1_CarregaGrid_1()
Local i, ....
....codigo para carregar registros de uma query ou outro data base
....
Form_1.Grid_1.DeleteAllItems()
for i:=1 to query:LastRec()
Form_1.Grid_1.AddItem( {....registro n da query:FieldGet('coluna_1'), query:FieldGet('coluna_n') } )
Form_1.Grid_1.CheckBoxItem(i) := ( query:FieldGet('coluna_x') == <condição> )
query:Skip()
next i
Form_1.Grid_1.Refresh
...
Return