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.