Ver Mensaje Individual
  #4  
Antiguo 09-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La propiedad ListField, de tipo string, contiene el valor o valores de el/los campos que van a ser mostrados, quizá haya otro modo de hacerlo pero lo único que se me ocurre ahora, es recurrir a la propiedad DisplayWidth del TField relacionado.

Veo dos opciones, la primera ajustando arbitrariamente la longitud de los campos a mostrar, ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  DataSet.FieldByName('Campo1').DisplayWidth:= 15;
  DataSet.FieldByName('Campo2').DisplayWidth:= 10;
end;
Esto es simple y rápido pero truncará los valores si estos exceden el valor que se designo a la propiedad DisplayWidth.

La segunda es hacer un recorrido previo del TDataSet para calcular el valor máximo de cada campo a mostrar y luego ajustar la propiedad DisplayWidth a ese valor:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  Max, Len: TPoint;
begin
  with DataSet do
  begin
    ...
    Max.X:= 0;
    Max.Y:= 0;
    First;
    while not Eof do
    begin
      Len.X:= Length(FieldByName('Campo1').AsString);
      Len.Y:= Length(FieldByName('Campo2').AsString);
      if Len.X > Max.X then Max.X:= Len.X;
      if Len.Y > Max.Y then Max.Y:= Len.Y;
      Next;
    end;
    FieldByName('Campo1').DisplayWidth:= Max.X;
    FieldByName('Campo2').DisplayWidth:= Max.Y;
    First;
  end;
end;
A esta última forma le veo dos inconvenientes, el primero que si existe algún campo con un valor de longitud igual al declarado en el campo es inútil. El segundo es que es ineficiente ya que recorre todo el dataset para hallar los máximos.
También está la posibilidad de reducir el tamaño de la fuente pero, lógicamente tiene un límite y pienso que ya lo debes haber intentado...

Por otro lado tomá en cuenta, que esto esta pensado para tratar con TStringField y también salvar los valores originales de las propiedades DisplayWidth de los campos modificados para restaurarlos al salir.


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita