Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ajustar texto en campo TDBGridEh (https://www.clubdelphi.com/foros/showthread.php?t=88574)

wilcg 25-06-2015 22:36:25

Ajustar texto en campo TDBGridEh
 
Un saludo amigos del foro, lo que quiero es ajustar un texto largo en un campo DBGrid visualmente bonito.

suponemos que el texto se ve asi en el DBGrid

pero si el tamaño del campo es menor que el texto, quiero que muestre parte del texto seguido de 3 puntitos, tal como se.

como puedo lograr esto?.

Caminante 25-06-2015 23:18:18

Hola

Prueba asi:

Código Delphi [-]
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
  R:TRect;
begin
  r:=rect;
  DBGrid1.Canvas.FillRect(r);
  drawtext(dbgrid1.Canvas.Handle,pchar(field.asstring),-1,r,dt_singleline or DT_WORD_ELLIPSIS)
end;

Saludos

ralf8727 26-06-2015 04:46:56

o asi

Código Delphi [-]
procedure TCONSULTACLIENTE.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

  begin
  if length(Column.Field.AsString) > Column.Field.Tag then
begin
Column.Field.Tag:= length(Column.Field.AsString);
Column.Field.DisplayWidth:=Column.Field.Tag+2;
end;

wilcg 26-06-2015 21:36:49

Gracias por aportar, en realidad estoy usando el componente TDBGridEh de EhLib y en este el codigo propocionado no esta resultando no hace nada. alguna sugerencia o aporte mas .

ecfisa 26-06-2015 22:08:06

Hola wilcg.
Cita:

Empezado por wilcg (Mensaje 493749)
Gracias por aportar, en realidad estoy usando el componente TDBGridEh de EhLib...

Ese no es un detalle menor...

Por estas situaciones es que insistimos en que sean mas explícitos en las consultas: Por un lado obtendrás respuestas adecuadas a tu necesidad y por el otro tus compañeros no trabajarán de gusto...

Saludos y gracias por tu colaboración. :)

Nota: Cambié el nombre del componente en el título del hilo

wilcg 26-06-2015 22:45:49

Tienes toda la razón ecfisa, es por eso que muchas veces no se obtiene la ayuda correcta mil disculpas a mis amigos ralf8727 y caminante por permitirse ayudar. y hay que decir que auque no sea un experto entre el DBGrid y DBGridEh son componentes muy parecidos hasta cierto punto y muchos codigos de un dbgrid funcionan perfectamente, quizas me deje llevar por la popularidad del DBGrid. ^\||/

ecfisa 26-06-2015 23:02:45

Hola wilcg.

La respuesta de Caminante es la misma que te hubiera dado para un TDBGrid y en teoría tendría que funcionar. Tal vez el evento OnDrawDataCell no sea el adecuado para ese componente, podrías probar en evento OnDrawColumnCell(si lo tiene) con mínimos cambios:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  R: TRect;
begin
  with TDBGridEh(Sender) do
  begin
    R := Rect;
    Canvas.FillRect(R);
    DrawText(Canvas.Handle, @Column.Field.AsString[1], -1, R, DT_SINGLELINE + DT_END_ELLIPSIS);
  end;
end;
Sucede que no conozco el componente ni sus eventos habría que probar...

Saludos :)

wilcg 27-06-2015 04:40:19

Bueno agradecer por sus aportes el código va quedando así:

Código Delphi [-]
procedure TFrCarpClientes.GridClientesDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
var
  R: TRect;
begin
  with TDBGridEh(Sender) do
  begin
    R := Rect;
    Canvas.FillRect(R);
    DrawText(Canvas.Handle, @Column.Field.AsString[1], -1, R, DT_SINGLELINE + DT_VCENTER + DT_END_ELLIPSIS);
  end;
end;
Y está funcionando bien, en principio el texto verticalmente quedaba aliniado en la parte superior del campo. he agregado DT_VCENTER y el texto ya está queda centrado. Ahora un detalle más ahora todos los campos Horizontalmente están aliniados a la izquierda del campo. como hago para dejarlo por defecto como estaba?.

ecfisa 27-06-2015 18:15:08

Hola wilcg.

En el evento OnDrawColumnCell estas tomando el control de la salida del texto y por ese motivo ya no dispones de las alineaciones por defecto de las columnas.

Pero podes evaluar la alineación de la columna y actuar en consecuencia vg.:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  R      : TRect;
  uFormat: LongWord;
begin
  uFormat := DT_SINGLELINE or DT_VCENTER or DT_END_ELLIPSIS;

  case Column.Alignment of
    taLeftJustify : uFormat := uFormat or DT_LEFT;
    taRightJustify: uFormat := uFormat or DT_RIGHT;
    taCenter      : uFormat := uFormat or DT_CENTER;
  end;

  with TDBGridEh(Sender) do
  begin
    R := Rect;
    Canvas.FillRect(R);
    DrawText(Canvas.Handle, @Column.Field.AsString[1], -1, R, uFormat);
  end;
end;

Saludos :)

wilcg 27-06-2015 19:31:37

ecfisa este código quedo justo y completo como quería, creo yo que tienes una bola de cristal que te da todas las repuestas jeje... Gracias Maestro.^\||/


La franja horaria es GMT +2. Ahora son las 23:17:51.

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