Fórum Botão dentro do DBGrid #343864
01/08/2007
0
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
Curtir tópico
+ 0Posts
01/08/2007
Adriano_servitec
http://adrianoservitec.fotos.uol.com.br/delphi/photo.html?currentPage=1
Gostei + 0
01/08/2007
Emerson Nascimento
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
01/08/2007
Adriano_servitec
Funcionou sim :D
Muito obrigado
Valeu.
Gostei + 0
01/08/2007
Rinez
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
01/08/2007
Adriano_servitec
Por 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
01/08/2007
Adriano_servitec
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
02/08/2007
Adriano_servitec
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
03/08/2007
Adriano_servitec
Obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)