Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGrid con Button (https://www.clubdelphi.com/foros/showthread.php?t=74688)

gsilvei 04-07-2011 22:22:52

DBGrid con Button
 
Hola a todos,
tengo un pequeño problema,
tengo un DBGrid y en una de las columnas tengo un Button
el problemas es que si coloco la propiedad dgRowSelect := True,
el button no funciona y como False si funciona.
Gracias

Chris 04-07-2011 22:42:39

Si tienes el botón configurado como un tipo de "InplaceEdit", ten en cuenta que cuando activas la opción dgRowSelect el TDBGrid ignora las opciones de InplaceEdit. Es algo normal según tengo entendido.

Lamentablemente, tendrás que buscar otro método para colocar el botón. Talvez te sirva pintar uno virtual en el evento OnDrawColumnCell.

Saludos,
Chris

gsilvei 04-07-2011 22:47:16

Hola,
tengo el botón criado en el evento OnDrawColumnCell:

Código Delphi [-]
  
procedure TFormPrincipal.Grid_propostaDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var 
  BUTTON: Integer; 
  R: TRect; 
  SCapt : string;

begin
if Column.FieldName = 'P_OBS_INATIVO' then
  begin 
    Grid_proposta.Canvas.FillRect(Rect);
    BUTTON := 0; 
    R:=Rect; 
    SCapt := 'Ren.';
    InflateRect(R,-2,0); 
    DrawFrameControl(Grid_proposta.Canvas.Handle,R,BUTTON, BUTTON or BUTTON); 
    with Grid_proposta.Canvas do
    begin 
      Brush.Style := bsClear; 
      Font.Color := clBtnText; 
      TextRect(Rect, (Rect.Left + Rect.Right - TextWidth(SCapt)) div 2, (Rect.Top + Rect.Bottom - TextHeight(SCapt)) div 2, SCapt); 
    end; 
  end;
end;
Saludos

gsilvei 06-07-2011 18:25:21

DBGrid con botón
 
Hola a todos,
tengo un pequeño problema,
tengo un DBGrid y en una de las columnas tengo un botón
el problemas es que si coloco la propiedad dgRowSelect := True,
el botón no funciona y como False si funciona.
Estoy criando el botón con el siguiente código en el evento OnDrawColumnCell del DBGrid:

Código Delphi [-]
procedure TFormPrincipal.Grid_propostaDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var 
  BUTTON: Integer; 
  R: TRect; 
  SCapt : string;

begin
if Column.FieldName = 'P_OBS_INATIVO' then
  begin 
    Grid_proposta.Canvas.FillRect(Rect);
    BUTTON := 0; 
    R:=Rect; 
    SCapt := 'Ren.';
    InflateRect(R,-2,0); 
    DrawFrameControl(Grid_proposta.Canvas.Handle,R,BUTTON, BUTTON or BUTTON); 
    with Grid_proposta.Canvas do
    begin 
      Brush.Style := bsClear; 
      Font.Color := clBtnText; 
      TextRect(Rect, (Rect.Left + Rect.Right - TextWidth(SCapt)) div 2, (Rect.Top + Rect.Bottom - TextHeight(SCapt)) div 2, SCapt); 
    end; 
  end;
end;

sera que hay alguna otra opción para cuando seleccionar un registro pinte toda la linea.
Gracias

Chris 06-07-2011 18:31:14

La imagen del botón que dibujas con la función DrawFrameControl aparece aún cuando activas la propiedad dgRowSelect? Cuál es en específico el problema que tienes?

Chris 06-07-2011 18:37:03

Hola silvie! No deberías repetir hilos. Mejor es que sigas el hilo que habías creado ya una vez. Sin saber que habías vuelto hacer la pregunta, yo ya te he contestado en el otro.

Saludos,
Chris

ecfisa 06-07-2011 18:44:19

Hola gsilvei.

Por favor no dupliques los temas, lee la guía de estilo , en especial el punto 6 .

Combiné ambos mensajes (el del foro Varios y el de BBDD) en el foro Varios.

Saludos y gracias por tu colaboración.

Edito: Veo que Chris ya había advertido la situación al estar redactando este mensaje. :)

gsilvei 06-07-2011 18:44:23

hola Chris y ecfisa,
disculpas por repetir el hilo,
y si mi boton aparece, solo que no da para clicar en el.
Saludos

ecfisa 06-07-2011 19:23:12

Hola gsilvei.

Lo que sucede es que estas dibujando un frame, pero es sólo eso: Un dibujo, no un TButton.

Creo que una de las soluciones es poner un TButton en el form, asignar su propiedad Visible a False, algún código en el evento OnClick y
luego hacer algo así:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
 DrawRect: TRect;
begin
  if Column.Field.FieldName = 'Nombre_de_tu_campo' then
  begin
    if (gdFocused in State) then
    begin
     Button1.Left:= Rect.Left + DBGrid1.Left+2;
     Button1.Top:= Rect.Top + DBGrid1.Top+2;
     Button1.Width:= Rect.Right-Rect.Left;
     Button1.Height:= Rect.Bottom - Rect.Top;
     Button1.Visible:= True;
    end
    else
    begin
     DrawRect:= Rect;
     InflateRect(DrawRect,-1,-1);
     DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect, 0, 1);
    end;
  end;
end;
Podés jugar con los valores y el código dependiendo si queres que siempre se muestre el botón u ocultándolo en evento OnColExit del TDBgrid, etc, etc, dependiendo esto del comportamiento que desees tenga el botón.
El código es como para acercarte alguna idea.


Saludos.


La franja horaria es GMT +2. Ahora son las 12:32:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi