PDA

Ver la Versión Completa : Agregar puntos suspensivos a cadena extensa


Caroso
14-09-2013, 04:24:00
hola muchachos aqui vengo con otra duda... si alguien conocía algún procedimiento para colocar puntos suspensivos al final de una cadena de texto extensa, es decir... tengo un LABEL de un tamaño definido y quiero que al intentar superar el largo total, en ves de ocultarse, se coloquen los puntos suspensivos...

un ejemplo aqui:
http://s2.subirimagenes.com/privadas/previo/thump_2120822captura.png (http://www.subirimagenes.com/privadas-captura-2120822.html)

en la imagen anterior el primer label muestra lo que quiero cambiar... y el segundo lo que en realidad quiero...
el label 2 se carga en tiempo de ejecución y cambia el texto indefinida cantidad de veces...

Desde ya muchísimas gracias a todos porque siempre me ayudaron.. Saludos :)

ecfisa
14-09-2013, 05:55:01
Hola Caroso.

Podes hacer:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TLabel = class(StdCtrls.TLabel)
protected
procedure Paint; override;
end;

TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
public
end;

var
Form1: TForm1;

implementation {$R *.dfm}

{ TLabel }
procedure TLabel.Paint;
var
R : TRect;
str: string;
begin
str := Caption;
R := ClientRect;
Canvas.Brush.Color := Color;
DrawText(Canvas.Handle, PChar(str), -1, R, DT_SINGLELINE + DT_END_ELLIPSIS);
end;

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
with Label1 do
begin
AutoSize := False;
Caption := 'En un lugar de la Mancha, de cuyo nombre no quiero acordarme,' +
' no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero,' +
' adarga antigua, rocín flaco y galgo corredor.';
end;
end;

end.


Saludos :)

Caroso
14-09-2013, 06:56:12
muchísimas gracias ecfisa... siempre tan solidario con la comunidad y conmigo...

Un Saludo y gracias :)

dec
14-09-2013, 10:27:11
Hola,

muchísimas gracias ecfisa... siempre tan solidario con la comunidad y conmigo...

Un Saludo y gracias :)

La solución ya dada es perfecta, no obstante, recordemos la propiedad "EllipsisPosition" de los componentes "TLabel", pues con esta (y quizá con "AutoSize" igual a "False") se logra el efecto que quieres y puedes además usar otros.

nlsgarcia
14-09-2013, 16:20:59
Caroso,


...recordemos la propiedad "EllipsisPosition" de los componentes "TLabel"...


Revisa este código:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

Label1.AutoSize := False;

Label1.EllipsisPosition := epEndEllipsis;

Label1.Caption := 'El valor aproximado de PI es : 3.141592653589793238462643383279502884197169' +
'399375105820974944592307816406286208998628034825342117067982148086513282306' +
'647093844609550582231725359408128481117450284102701938521105559644622948954' +
'930381964428810975665933446128475648233786783165271201909145648566923460348' +
'610454326648213393607260249141273724587006606315588174881520920962829254091' +
'715364367892590360011330530548820466521384146951941511609433057270365759591' +
'953092186117381932611793105118548074462379962749567351885752724891227938183' +
'011949129833673362440656643086021394946395224737190702179860943702770539217' +
'176293176752384674818467669405132000568127145263560827785771342757789609173' +
'637178721468440901224953430146549585371050792279689258923542019956112129021' +
'960864034418159813629774771309960518707211349999998372978049';

end;

end.


El código anterior es una variante en Delphi 2010, del código sugerido en el Msg #2.

Revisa estos links:

StdCtrls.TEllipsisPosition : http://docwiki.embarcadero.com/VCL/2010/en/StdCtrls.TEllipsisPosition

100,000 Digits of Pi : http://www.geom.uiuc.edu/~huberty/math5337/groupe/digits.html

Espero sea útil :)

Nelson.

ecfisa
14-09-2013, 17:30:19
Hola.

Recién me desayuno con EllipsisPosition... Sucede que en la versión de Delphi que poseo, el control TLabel no posee esa propiedad.:(

¿ A partir de que versión se implementó ?

Saludos :)

dec
14-09-2013, 18:14:19
Hola,

Hola.

Recién me desayuno con EllipsisPosition... Sucede que en la versión de Delphi que poseo, el control TLabel no posee esa propiedad.:(

¿ A partir de que versión se implementó ?

Saludos :)

Yo estuve a punto de no decirlo, precisamente, por eso: porque creía que estaba sólo a partir de XE2. Sin embargo, miré en Delphi 2007 y allí estaba también, así que me atreví a mencionar la propiedad. Y eso puedo decir, que, al menos a partir de Delphi 2007 existe dicha propiedad. :)

nlsgarcia
14-09-2013, 18:51:06
ecfisa,


...EllipsisPosition...¿ A partir de que versión se implementó ?...


A partir de Delphi 2005, revisa este link:

Changes to the Win32 VCL in Delphi 2005 (VCL Folder) : http://delphi.wikia.com/wiki/Changes_to_the_Win32_VCL_in_Delphi_2005_%28VCL_Folder%29
Nunca he utilizado Delphi 2005, pero en Delphi 2006 esta propiedad esta implementada en el componente TLabel, no obstante el código sugerido en el Msg #2 muestra la vigencia, potencia y flexibilidad de Delphi 7 para la resolución de problemas en la plataforma Win32.

Espero sea útil :)

Nelson.