Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo agregar números encolumnados (https://www.clubdelphi.com/foros/showthread.php?t=76240)

CarlosAlberto 18-10-2011 16:57:38

Cómo agregar números encolumnados
 
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 17:05:03

pues no entendi...
podrias colocar un ejemplo de lo que necesitas?
o sera algo asi


Cita:

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

newtron 18-10-2011 17: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 18: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:
Código Delphi [-]
  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 :
Código Delphi [-]
  Format('%4.2f',[3.14]);
Mas datos en la ayuda de Delphi (Format Strings).

Saludos.

duilioisola 18-10-2011 18:41:42

Lo que tienes que lograr es que todos los números tengan la misma cantidad de decimales y luego utilizar este truco.
Código Delphi [-]
// 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:
Código Delphi [-]
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...
Código Delphi [-]
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 01: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 01: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 02:31:50

Hola Carlos.

De este modo a mi me los encolumna correctamente de acuerdo al separador decimal:
Código Delphi [-]
  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.


La franja horaria es GMT +2. Ahora son las 01:18:23.

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