Botão dentro do DBGrid
Pessoal, fiz um esquema para colocar botões dentro de uma coluna do dbgrid.
Ateh aqui blz, mostra Botões dentro da dbGrid, na coluna que eu quero (no caso CITY).
Depois fiz com que chame outro form ao clicar no button do dbgrid
Tambem esta certo chama o segundo form (Tem que ser neste evento, pois nao eh o CPS_Ellipsis do dbgrid)
Bom o problema eh saber se tem como colocar o nome no caption do button que fica dentro do dbgrid.
Se tiver como gostaria de colocar somente o nome [b:76360426f7]Alterar[/b:76360426f7] em todos os botoes.
Obs: Pode ser de outra forma tambem, mais gostaria que o resultado seja botoes dentro do dbgrid.
No aguardo
Grato a ajuda de todos
Adriano
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var BUTTON: Integer; R: TRect; begin if Column.FieldName = ´CITY´ then begin DBGrid1.Canvas.FillRect(Rect); BUTTON := 0; R:=Rect; InflateRect(R,-2,-2); //Diminue o tamanho do Botão DrawFrameControl(DBGrid1.Canvas.Handle,R,BUTTON, BUTTON or BUTTON); end; end;
Ateh aqui blz, mostra Botões dentro da dbGrid, na coluna que eu quero (no caso CITY).
Depois fiz com que chame outro form ao clicar no button do dbgrid
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if DBGrid1.SelectedField.FieldName = ´CITY´ then begin form2.show; form2.Edit1.text:=vdadosdbgrid;//Variavel global mandando os dados para o form2 end; end;
Tambem esta certo chama o segundo form (Tem que ser neste evento, pois nao eh o CPS_Ellipsis do dbgrid)
Bom o problema eh saber se tem como colocar o nome no caption do button que fica dentro do dbgrid.
Se tiver como gostaria de colocar somente o nome [b:76360426f7]Alterar[/b:76360426f7] em todos os botoes.
Obs: Pode ser de outra forma tambem, mais gostaria que o resultado seja botoes dentro do dbgrid.
No aguardo
Grato a ajuda de todos
Adriano
Adriano_servitec
Curtidas 0
Respostas
Adriano_servitec
01/08/2007
Fica desta forma no dbgrid
http://adrianoservitec.fotos.uol.com.br/delphi/photo.html?currentPage=1
http://adrianoservitec.fotos.uol.com.br/delphi/photo.html?currentPage=1
GOSTEI 0
Emerson Nascimento
01/08/2007
tente assim:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var BUTTON: Integer; R: TRect; bcolor: TColor; begin if Column.FieldName = ´CITY´ then begin DBGrid1.Canvas.FillRect(Rect); BUTTON := 0; R:=Rect; InflateRect(R,-1,-1); //Diminue o tamanho do Botão DrawFrameControl(DBGrid1.Canvas.Handle,R,BUTTON, BUTTON or BUTTON); bcolor := DBGrid1.Canvas.Brush.Color; // guarda a cor de fundo original DBGrid1.Canvas.Brush.Color := clBtnFace; // muda a cor de fundo DrawText(DBGrid1.Canvas.Handle,´Alterar´,7,R,DT_VCENTER or DT_CENTER); DBGrid1.Canvas.Brush.Color := bcolor; // devolve a cor original end; end;
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if DBGrid1.SelectedField.FieldName = ´CITY´ then begin form2.Edit1.text:=vdadosdbgrid;//Variavel global mandando os dados para o form2 form2.show; DBGrid1.SelectedIndex := DBGrid1.SelectedIndex - 1; end; end;
GOSTEI 0
Adriano_servitec
01/08/2007
Mais uma vez vc me ajudou amigo.
Funcionou sim :D
Muito obrigado
Valeu.
Funcionou sim :D
Muito obrigado
Valeu.
GOSTEI 0
Rinez
01/08/2007
Caro Adriano:
Testei a dica do Emerson e notei que quanto o DBGRID esta focado na primeira ou ultima celula ao clicar, o botão desaparece aparecendo o conteudo do campo.
Tem como arrumar isso?
Mas, mesmo assim é show de bola. Parabens.
Abraços
Testei a dica do Emerson e notei que quanto o DBGRID esta focado na primeira ou ultima celula ao clicar, o botão desaparece aparecendo o conteudo do campo.
Tem como arrumar isso?
Mas, mesmo assim é show de bola. Parabens.
Abraços
GOSTEI 0
Adriano_servitec
01/08/2007
Caro Adriano:
Testei a dica do Emerson e notei que quanto o DBGRID esta focado na primeira ou ultima celula ao clicar, o botão desaparece aparecendo o conteudo do campo.
Tem como arrumar isso?
Mas, mesmo assim é show de bola. Parabens.
Abraços
Bom Rinez, aqui eu tive a ideia de fazer este button por motivos de que minha grid eh apenas para mostrar o resultado, e caso eu tenha que alterar algo, clico no button para abiri outro form, portanto nao preciso editar nada nesta grid, alem do que o select que envolve ela nao aceita um updeta assim tao facil :DPor isso para que nao apareça no dbgrid em forma de texto, eu fui na propriedade Options --dsEditing = False, assim evita de editar no campo.
GOSTEI 0
Adriano_servitec
01/08/2007
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if DBGrid1.SelectedField.FieldName = ´CITY´ then begin form2.Edit1.text:=vdadosdbgrid;//Variavel global mandando os dados para o form2 form2.show; DBGrid1.SelectedIndex := DBGrid1.SelectedIndex - 1; end; end;
Emerson, estou com problemas no foco do dbgrid.
[b:a05356061d]DBGrid1.SelectedIndex := DBGrid1.SelectedIndex - 1;
[/b:a05356061d]
Se eu passar para as linhas de baixo funciona certo, mais se eu retornar para cima preciso dar dois cliques no button que foi criar dentro do dbgrid para poder mostrar os dados no form2.
Sabe o pq disso?
GOSTEI 0
Adriano_servitec
01/08/2007
Vou deixar postado aqui, como chamo o outro form, pode ser que fique mais facil do pessoal entender
Todos sao chamados atravez de variavies globais
Todos sao chamados atravez de variavies globais
begin if DBGradeFunc.SelectedField.FieldName = ´MARCAR´ then begin fAlteraFolha.Label2.Caption:=vLabel2;//Variavel global mandando os dados para o form fAlteraFolha.L1.Caption:=vL1;//Variavel global mandando os dados para o form fAlteraFolha.L3.Caption:=vL3;//Variavel global mandando os dados para o form //--formata a variavel com ponto e virgula if vl5 <> ´´ then begin vl5:=FormatFloat(´#,0.00´,(dm.zspSomaFunc.FieldbyName(´valor_inss´).value)); fAlteraFolha.L5.Caption:=vL5;//Variavel global mandando os dados para o form end else begin fAlteraFolha.L5.Caption:=´´;//Nao passa nada se a variavel estiver vazia end; //--formata a variavel com ponto e virgula if vl2 <> ´´ then begin vl2:=FormatFloat(´#,0.00´,(dm.zspSomaFunc.FieldbyName(´salario´).value)); fAlteraFolha.L2.Caption:=vL2;//Variavel global mandando os dados para o form end else begin fAlteraFolha.L2.Caption:=´´;//Nao passa nada se a variavel estiver vazia end; //--formata a variavel com ponto e virgula if vl4 <> ´´ then begin vl4:=FormatFloat(´,0.00´,(dm.zspSomaFunc.FieldbyName(´aliquota_inss´).value)); fAlteraFolha.L4.Caption:=vL4;//Variavel global mandando os dados para o form end else begin fAlteraFolha.L4.Caption:=´´;//Nao passa nada se a variavel estiver vazia end; fAlteraFolha.ShowModal; //dbGradeFunc.SetFocus; //DBGradeFunc.SelectedIndex := 0; DBGradeFunc.SelectedIndex:= -1; //dm.zspSomaFunc.GotoBookmark(Pointer(dbGradeFunc.SelectedRows.Items[i - 1])); end; end;
GOSTEI 0
Adriano_servitec
01/08/2007
Ja resolvi o problema
Obrigado
Obrigado
GOSTEI 0