Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

perison

colocar dbcheck no dbgrid

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.