PDA

Ver la Versión Completa : Cómo agregar números encolumnados


CarlosAlberto
18-10-2011, 17:57:38
Estimados miembros del club: ¿cómo hago para que al agregar números en un listbox queden alineadas las unidades correspondientes?( décimos con décimos, unidades con unidades, decenas con decenas, etc).
Muchas gracias por la ayuda que me han brindado en las preguntas anteriores.
Saludos
Carlos Alberto

oscarac
18-10-2011, 18:05:03
pues no entendi...
podrias colocar un ejemplo de lo que necesitas?
o sera algo asi



unidades Decenas centenas
....1...........2...........1
....0...........1...........0
....0...........2...........1
....3...........3...........0

newtron
18-10-2011, 18:20:51
Hola.

No lo he probado pero si usas una fuente que no sea truetype y le rellenas con los espacios que se necesiten a la izquierda imagino que te dará el resultado que buscas.

Saludos

ecfisa
18-10-2011, 19:30:34
Hola.

Lo más importante para que se pueda alinear es, como bién dice newtron, el tipo de fuente utilizado.
Una forma alternativa al llenado de espacios a la izquierda es usando la función Format.

Por ejemplo:

with ListBox1 do
begin
Font.Name:= 'Courrier';
Clear;
Items.Add(Format('%4d',[1]));
Items.Add(Format('%4d',[10]));
Items.Add(Format('%4d',[10]));
Items.Add(Format('%4d',[100]));
end;

Un ejemplo para el caso de que fueran valores punto flotante :

Format('%4.2f',[3.14]);

Mas datos en la ayuda de Delphi (Format Strings).

Saludos.

duilioisola
18-10-2011, 19:41:42
Lo que tienes que lograr es que todos los números tengan la misma cantidad de decimales y luego utilizar este truco (http://delphi.about.com/od/adptips2004/a/bltip0604_2.htm).

// Extraido de http://delphi.about.com

procedure TForm1.FormCreate(Sender: TObject) ;
begin
ComboBox1.Style := csOwnerDrawFixed;
//for a ListBox use "lbOwnerDrawFixed"
end;

//The OnDrawItem event handler
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState) ;
var
x: Integer;
txt: String;
begin
with ComboBox1 do
begin
Canvas.FillRect(Rect) ;
txt := Items[Index];
x := Rect.Right - Canvas.TextWidth(txt) - 4;
Canvas.TextOut(x, Rect.Top, txt) ;
end;
end;


Para lo de los decimales mira la función Format().
Ejemplo de Delhi 6:

Format('%8.2f', [123.456]).
// Esto da formato al número en el array con 8 dígitos y 2 decimales..

También se pueden agregar más elementos...

Format('Cantidad %d * € %8.2f = %8.2f', [12, 123.456, (12 * 123.456)])
// Esto devuelve 'Cantidad 12 * 12.45 = 1481.47'

CarlosAlberto
20-10-2011, 02:43:22
Estimado amigo del club: lo que quiero es que el punto decimal de los distintos números que introduzca quede siempre en la misma posición dentro del listbox1
Ejemplo:
12.345
-3.120
0.237

CarlosAlberto
20-10-2011, 02:45:47
Estimado amigo del club: probé y no me quedaron los puntos decimales encolumnados. Habrá otra forma de lograrlo?
Gracias.
Carlos Alberto

ecfisa
20-10-2011, 03:31:50
Hola Carlos.

De este modo a mi me los encolumna correctamente de acuerdo al separador decimal:

with ListBox1 do
begin
Font.Name:= 'fixedsys';
Items.Add(Format('%12.3f',[3.120]));
Items.Add(Format('%12.3f',[-3.120]));
Items.Add(Format('%12.3f',[12.345]));
Items.Add(Format('%12.3f',[-12.345]));
Items.Add(Format('%12.3f',[123.214]));
Items.Add(Format('%12.3f',[-123.214]));
end;


Un saludo.