GARANTIR DESCONTO

Fórum Botão dentro do DBGrid #343864

01/08/2007

0

Pessoal, fiz um esquema para colocar botões dentro de uma coluna do dbgrid.

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

Adriano_servitec

Responder

Posts

01/08/2007

Adriano_servitec

Fica desta forma no dbgrid
http://adrianoservitec.fotos.uol.com.br/delphi/photo.html?currentPage=1


Responder

Gostei + 0

01/08/2007

Emerson Nascimento

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;



Responder

Gostei + 0

01/08/2007

Adriano_servitec

Mais uma vez vc me ajudou amigo.

Funcionou sim :D

Muito obrigado

Valeu.


Responder

Gostei + 0

01/08/2007

Rinez

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


Responder

Gostei + 0

01/08/2007

Adriano_servitec

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 :D

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.


Responder

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?


Responder

Gostei + 0

02/08/2007

Adriano_servitec

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
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;



Responder

Gostei + 0

03/08/2007

Adriano_servitec

Ja resolvi o problema


Obrigado


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar