Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Completar Cadenas a un largo Fijo (https://www.clubdelphi.com/foros/showthread.php?t=54313)

Neeruu 14-03-2008 01:49:13

Completar Cadenas a un largo Fijo
 
Hola como estan?
Tengo algo que no me sale

Capas sea algo simple pero me esta sacando canas

Cargo en un Memo los nombres y apellido desde un DataSet

por ejemplo Asi

Código Delphi [-]
DataSet.First;
While not DataSet.Eof do
    begin
        Memo.Lines.Add(DataSet.FieldByName('Campo1').AsString + ' - ' +         DataSet.FieldByName('Campo1').AsString);
        DataSet.Next;
    end;

pero lo que me queda en el memo es algo asi

PEPE ' - ' LUI
MANUEL ' - ' FERNANDEZ
ETC

lo que quise hacer es asignarle una cantidad de espacios detras del primer nombre dependiendo del length de la Campo1

Ejemplo

Código Delphi [-]
 
Function CompletaEspacio(MyCadena:String; iCant:Integer):String;
var i:Integer;
begin
  Result := MyCadena;
    for i := (iCant - Length(MyCadena)) to iCant do
        Result := Result + ' ';

end;

Donde iCant es una cantidad fija que mandaba como parametro como limite de largo del Campo1

pero lo que obtengo en el memo es algo asi
Código Delphi [-]
 
PEPE         ' - ' LUI
MANUEL ' - ' FERNANDEZ
y lo que necesito es que me quede asi
Código Delphi [-]
  
PEPE     ' - ' LUI
MANUEL ' - ' FERNANDEZ
Saluda Atte Neeruu :)

AzidRain 14-03-2008 02:01:14

Puedes usar Format:
Código Delphi [-]
Function CompletaEspacio(MyCadena:String; iCant:Integer):String;
var s:String;
   
begin
  Str(iCant,s);
  Result := Format('%s'+s,[MyCadena]);
  // %s acepta un parametro numerico que indica el ancho del campo 
end;

Neeruu 14-03-2008 02:21:47

Completar cadenas a un largo fijo
 
Hola gracias por tu respuesta pero no me anda, mira como queda:

00001530 -- SALVA JUAN RAMON15 -- $ 8.00 -- $ 4.00 -- $ 4.00
00001581 -- AGUILAR ISABEL15 -- $ 79.92 -- $ 14.00 -- $ 65.92
00001582 -- AGUILAR ISABEL15 -- $ 79.92 -- $ 14.00 -- $ 65.92

ahi donde esta el '15' es donde deberia completar para que quede asi

Código Delphi [-]
00001530 -- SALVA JUAN RAMON -- $ 8.00 -- $ 4.00 -- $ 4.00
00001581 -- AGUILAR ISABEL      -- $ 79.92 -- $ 14.00 -- $ 65.92
00001582 -- AGUILAR ISABEL      -- $ 79.92 -- $ 14.00 -- $ 65.92



haber si me puedes ayudar

Saluda Atte Neeruu :)

Neeruu 14-03-2008 02:29:40

Completar Cadenas a un largo Fijo
 
Fijate en el mensaje anterior cuando lo estaba escribiendo puso todo alineado y cuando postee quedo las dos lineas de abajo mas a la derecha


porqueeeeeee pasa eso!!!??? GRRRR!!!!!:)

AzidRain 14-03-2008 03:17:30

porque el código normalmente utiliza fuentes "no proporcionales" y las fuentas del sitio web del club usa fuentes proporcionales. Una fuente proporcional es aquella en la que cada caracter ocupa un especio proporcional a su anchura, por el contrario una fuente "monoespaciada" ocupa la misma anchura para cualquier caracter. De manera que por ejemplo una "M" ocupa el mismo espacio que una "I" en una fuenta de estas últimas pero no en una fuente proporcional.

Por cierto que en diseño web la medida "em" se refiere al ancho de una letra "M" en la fuente que se esté utilizando.

Neeruu 14-03-2008 03:22:21

Completar Cadenas a un largo fijo
 
Gracias pero ahora como hago para poder alinar los textos!!!

tendria que saber el la diferencia de ancho entre las cadenas para poder aplicar esa diferencia y alinear....?????como se el ancho de letra???


Saluda Atte Neeruu :)

keyboy 14-03-2008 03:34:06

En un memo, con fuente proporcional, no lo vas a poder hacer (o sí, pero reinventando la rueda), en todo caso, quizá un RichEdit aunque tampoco estaría seguro.

Si quieres presentar información en columnas ¿por qué no usas otro tipo de controles? Un DBGrid, un StringGrid, un ListView, un ValueListEditor, etc.

Bye

AzidRain 14-03-2008 16:19:47

Usa el memo con fuente Courier, que es monoespaciada.

Neeruu 15-03-2008 16:12:42

Completar Cadenas a un largo Fijo
 
Gracias y mil gracias AzidRain!!!!


Te agaradesco el dato!!!! ahora queda como queria!!!!

Y una consulta mas!!
Cuales, aparte de la que mensionas, son las letras monoespaciada??



Saluda Atte Neeruu :):D

Lepe 15-03-2008 18:10:56

Con fuentes proporcionales, puedes averigual el ancho así

Saludos

Neeruu 15-03-2008 21:13:46

Completar Cadenas a un largo fijo
 
Gracias Lepe muy utileas las funciones que posteaste pero que unidad agrego para esta funcion

'GetDeviceContext'


Saluda Atte Neeruu :)

Lepe 15-03-2008 23:03:53

tengo otras funciones en ese archivo, y los uses que tengo son estos:
Código Delphi [-]
uses Graphics,sysutils, types, windows, ShellApi;

Yo diría que es uno de los dos últimos, pero sin delphi a mano no me aseguro.

Saludos


La franja horaria es GMT +2. Ahora son las 18:33:08.

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