perison 0 Denunciar post Postado Setembro 25, 2009 Ola Boa Tarde! Estou com problemas para colocar um dbcheck no dbgrid estou usando o firebird, o dbcheckbox não esta ficando checado. coloquei o seguinte codigo no evento colexit do dbgrid: procedure Tfrmsimularcorte.DBGrid1ColExit(Sender: TObject); begin if dbgrid1.SelectedField.FieldName=dbcheckbox1.DataField then dbcheckbox1.Visible:=false; end; no evento DrawColumnCell do dbgrid: procedure Tfrmsimularcorte.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); Var drawstate:integer; drawrect:TRect; begin if (gdFocused in State) then begin if (column.Field.FieldName=dbcheckbox1.DataField)then begin dbcheckbox1.Left:=Rect.Left + dbgrid1.Left+ 2; dbcheckbox1.Top:=Rect.Top + dbgrid1.Top + 2; dbcheckbox1.Width:= Rect.Right - Rect.Left; dbcheckbox1.Height:=Rect.Bottom - rect.Top; dbcheckbox1.Visible:=true; end; end else begin if (column.Field.FieldName = dbcheckbox1.DataField)then begin drawrect:=Rect; InflateRect(drawrect,-1,-1); drawstate:=ISChecked[column.Field.AsBoolean]; // talvez dbgrid1.Canvas.FillRect(rect); drawframecontrol(dbgrid1.Canvas.Handle, drawrect, DFC_BUTTON, drawstate); end; end; end; no evento KeyPress do dbgrid: procedure Tfrmsimularcorte.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if (Key = chr(9))then exit; if (dbgrid1.SelectedField.FieldName=dbcheckbox1.DataField) then begin dbcheckbox1.SetFocus; sendmessage(dbcheckbox1.Handle,WM_Char,word(Key),0); end; end; e no evento click do DBCHECKBOX: procedure Tfrmsimularcorte.DBCheckBox1Click(Sender: TObject); begin if dbcheckbox1.Checked then dbcheckbox1.Caption:=dbcheckbox1.ValueChecked else dbcheckbox1.Caption:=dbcheckbox1.ValueUnchecked; end; Desde ja Agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Nunes 0 Denunciar post Postado Setembro 26, 2009 Ola Boa Tarde! Estou com problemas para colocar um dbcheck no dbgrid estou usando o firebird, o dbcheckbox não esta ficando checado. coloquei o seguinte codigo no evento colexit do dbgrid: procedure Tfrmsimularcorte.DBGrid1ColExit(Sender: TObject); begin if dbgrid1.SelectedField.FieldName=dbcheckbox1.DataField then dbcheckbox1.Visible:=false; end; no evento DrawColumnCell do dbgrid: procedure Tfrmsimularcorte.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); Var drawstate:integer; drawrect:TRect; begin if (gdFocused in State) then begin if (column.Field.FieldName=dbcheckbox1.DataField)then begin dbcheckbox1.Left:=Rect.Left + dbgrid1.Left+ 2; dbcheckbox1.Top:=Rect.Top + dbgrid1.Top + 2; dbcheckbox1.Width:= Rect.Right - Rect.Left; dbcheckbox1.Height:=Rect.Bottom - rect.Top; dbcheckbox1.Visible:=true; end; end else begin if (column.Field.FieldName = dbcheckbox1.DataField)then begin drawrect:=Rect; InflateRect(drawrect,-1,-1); drawstate:=ISChecked[column.Field.AsBoolean]; // talvez dbgrid1.Canvas.FillRect(rect); drawframecontrol(dbgrid1.Canvas.Handle, drawrect, DFC_BUTTON, drawstate); end; end; end; no evento KeyPress do dbgrid: procedure Tfrmsimularcorte.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if (Key = chr(9))then exit; if (dbgrid1.SelectedField.FieldName=dbcheckbox1.DataField) then begin dbcheckbox1.SetFocus; sendmessage(dbcheckbox1.Handle,WM_Char,word(Key),0); end; end; e no evento click do DBCHECKBOX: procedure Tfrmsimularcorte.DBCheckBox1Click(Sender: TObject); begin if dbcheckbox1.Checked then dbcheckbox1.Caption:=dbcheckbox1.ValueChecked else dbcheckbox1.Caption:=dbcheckbox1.ValueUnchecked; end; Desde ja Agradeço. Veja, existe sim a possibilidade de colocar um checkbox no grid, porém, fica muito, mais muito ruim mesmo. Eu so resolvi o problema quando utilizei o compontente DBGrid do pacote de componentes TMS Grid Pack da TMS Software. Baixe um demo e instale. É infinitamente melhor q o dbgrid nativo do delphi alem de ser muito mais bonito. http://www.tmssoftware.com/site/gridpack.asp Compartilhar este post Link para o post Compartilhar em outros sites
perison 0 Denunciar post Postado Outubro 2, 2009 Ola muito obrigado por ter me respondido. baixei e gostei muito do componente, porem nao consegui comprar o componente no site citado. Tem algum outro site em que eu possa comprar esse componente? Compartilhar este post Link para o post Compartilhar em outros sites