DBGrid+checkbox
hola,
a ver os cuento. Resulta que tengo implementado un DBgrid con un checkbox que funciona correctamente, el checkbox asociado a un campo logico. Va bien, es decir, cuando marca la 'celda' del checkbox me modifica en la tabla el estado logico del campo. Mi problema es que solo quiero que se modifique cuando pincho en el checkbox no en la celda completa. ¿Me explico? Muchisimas gracias. |
Saludos
Cita:
|
Dependerá de cómo lo hayas implementado.
Seguro que en algun sitio has programado el cambio del campo segun el checkbox, ¿Puedes poner ese código (como mínimo)? Si no comprenderás que es casi imposible responderte. |
Este es el metodo que lo dibuja el check
procedure TWVentana.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Check: Integer; R: TRect; XVentana:TRecVentana; begin if Column.FieldName = 'L_SEL_REM' then //indico la columna donde lo quiero poner begin DBGrid1.Canvas.FillRect(Rect);//Rellenas en el drid un rectangulo Check := 0; if FTBVentana.FindField('L_SEL_REM').AsBoolean = true then Check := DFCS_CHECKED; R:=Rect; // InflateRect(R,-2,-2); //Disminuye el tamaño del CheckBox DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check); end; end; y este es el metodo de cambio de estado del check procedure TWventana.DBGrid1CellClick(Column: TColumn); var Xventana:TRecventana; begin FTBVentana.DisableControls; try if Column.FieldName = 'L_SEL_REM' then begin FTBVentana.edit; try if FTBVentana.FieldByName('L_SEL_REM').AsBoolean = true then FTBVentana.FieldByName('L_SEL_REM').AsBoolean := false else FTBVentana.FieldByName('L_SEL_REM').AsBoolean := true finally FTBVentana.Commit; end; Dbgrid1.Refresh; // quizás más bien un Repaint.... pero en fin. end; finally FTBVentana.EnableControls; end; end; entonces si yo pincho con el raton en cualquier parte de la celda donde esta el checkbox me cambia el estado, y solo quiero que me cambie el estado cuando pincho justamente en el checkbox. Gracias |
Antes de nada te recomiendo que utilices TAG's en los mensajes. Puedes empezar por editar el de arriba y añadirlas.
En cuando al problema, está claro que para detectar si haces un click dentro del recuadro, debes tener las coordenadas X e Y; Para eso tal vez deberás utilizar algun otro evento combinado con el que ya utilizas. Prueba con el OnMouseDown; Y a ver si a a partir de ese eres capaz de obtener las coordenadas relativas a la celda. Revisa, haz alguna pruba y ya dirás... |
hola ya consegui hayar las coordenadas y todo va casi perfecto.
Resulta que cuando tengo la celda con el check marcado y ademas la celda seleccionada y quiero desmarcar ese check no me deja, se deja de visualizar el check y sale a la izquierda de la celda la palabra true o false segun este marcado o desmarcado. La unica manera de marcar o desmarcar es quitando la seleccion de la celda. No tengo ni idea porque me pasa esto. ¿Alguien sabe? Gracias |
La franja horaria es GMT +2. Ahora son las 15:08:17. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi