Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemas con alineacion con sprintf (https://www.clubdelphi.com/foros/showthread.php?t=89048)

aguml 17-09-2015 12:59:24

Problemas con alineacion con sprintf
 
Buenas amigos, estoy intentando guardar en un archivo una serie de strings compuesta por dos cadenas y la quiero con un formato de dos columnas ambas alineadas a la izquierda. He probado esto:
Código PHP:

lista->Add(AnsiString().sprintf("%.20s%s"ListBoxPalabras->Items->operator [](x), MemoSopa->Lines->operator [](x))); 

Pero se me descuadra la segunda columna, osea, la primera cadena tiene como maximo 15 caracteres y tiene que ir alineada a la izquierda y la segunda cadena tiene que empezar en la posicion 21 independientemente del tamaño de la primera cadena. ¿que hago mal? ¿podeis ayudarme?
Se que con un bucle y añadiendo espacios hasta llegar a 20 se solucionaria pero quiero hacerlo bien y creo que es mas correcto usar sprintf.

ecfisa 17-09-2015 15:40:31

Hola aguml.
Cita:

Empezado por aguml (Mensaje 496846)
... osea, la primera cadena tiene como maximo 15 caracteres y tiene que ir alineada a la izquierda y la segunda cadena tiene que empezar en la posicion 21 independientemente del tamaño de la primera cadena.

Por si te sirve, te pongo un ejemplo (que no hace uso de sprintf) y que agrega todas las cadenas del ListBox y el Memo a otro ListBox, respetando que las segundas cadenas se encuentren en la posición 21:
Código PHP:

{
  
TListBoxlb static_cast<TListBox*>(ListBoxPalabras);
  
TMemome static_cast<TMemo*>(MemoSopa);

  if (
lb->Items->Count == || me->Lines->Count == 0) return;

  
AnsiString s1;
  
int i 0;
  for(
int i 0lb->Items->Count && me->Lines->Counti++) {
   
s1 lb->Items->Strings[i];
   
s1 += AnsiString().StringOfChar(' '20 s1.Length());
   
lista->Items->Add(s1me->Lines->Strings[i]);
  }


Si trabajas en interfaz gráfica tendrías que poner en el ListBox (receptor de las cadenas encolumnadas) una fuente no truetype por ejemplo "Currier".

Saludos :)

Toni 17-09-2015 19:55:44

Hola aguml,

Prueba de esta forma creo que es lo que buscas:

Código PHP:

lista->Add(AnsiString().sprintf("%-20s%s"ListBoxPalabras->Items->operator [](x), MemoSopa->Lines->operator [](x))); 


aguml 17-09-2015 21:31:30

Gracias por las respuestas. Toni esa era la forma jejeje.


La franja horaria es GMT +2. Ahora son las 11:17:08.

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