Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   stringlist quitar salto de linea de items (https://www.clubdelphi.com/foros/showthread.php?t=84303)

jonydread 03-10-2013 03:37:40

stringlist quitar salto de linea de items
 
Estimados, necesito si pueden ayudar con una lista he revisado en el foro pero la verdad no he logrado solucionarlo problema es el sgte.

los items de una lista se muestra asi
Código:

item 1
item 2
item 3

y deseo que se vea de esta forma
Código:

item 1 - item 2 - item 3
muchas gracias.

Saludos!!!!

ecfisa 03-10-2013 03:48:42

Hola jonydread.

Código Delphi [-]
function TStringsToString(TS: TStrings): string;
const
   DELIM = ' - ';
var
  i: Integer;
begin
  for i:= 0 to TS.Count - 1 do
    Result := Result + TS[i] + DELIM;
  SetLength(Result, Length(Result)-Length(DELIM));
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TStrings;
  i : Integer;
begin
  TS := TStringList.Create;
  try
    for i := 1 to 10 do TS.Add('Item ' + IntToStr(i)); // cargar unos datos...
    ShowMessage(TStringsToString(TS));  // mostrar
  finally
    TS.Free;
 end;

 // otro ej. de uso
 ShowMessage(TStringsToString(ComboBox1.Items));
end;

Saludos :)

nlsgarcia 03-10-2013 17:20:58

jonydread,

Cita:

Empezado por jonydread
...stringlist quitar salto de linea de items...

Revisa este código basado en la solución propuesta en el Msg #2:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function DeleteLineBreaks(const S: String): String;
var
   Source, SourceEnd : PChar;

begin

   Source := Pointer(S);
   SourceEnd := Source + Length(S);

   while Source < SourceEnd do
   begin

      case Source^ of
         #10 : Source^ := #32;
         #13 : Source^ := #32;
      end;

      Inc(Source);

   end;

   Result := S;

end;

procedure TForm1.Button1Click(Sender: TObject);
const
   DELIM = ' - ';
   CRLF = #13 + #10; // Retorno de Carro y Salto de Línea

var
   AuxText : String;
   StrList : TStringList;
   i : Integer;

begin

   // Instancia un StringList
   StrList := TStringList.Create;

   // Carga una muestra de 10 valores de ejemplo con Retorno de Carro y Salto de Línea cada uno.
   for i := 0 to 9 do
      StrList.Add('Item ' + IntToStr(i) + CRLF);

   // Carga cada valor individual del StringList en un String
   for i := 0 to 9 do
      AuxText :=  AuxText + StrList.Strings[i];

   // Muestra los items (Uno en cada línea por el CRLF)
   ShowMessage(AuxText);

   // Elimina el CRLF y adiciona un delimitador
   AuxText := EmptyStr;
   for i := 0 to 9 do
      AuxText :=  AuxText + Trim(DeleteLineBreaks(StrList.Strings[i])) + DELIM;

   // Elimina el delimitador sobrante del último item
   SetLength(AuxText, Length(AuxText) - Length(DELIM));

   // Muestra los items uno al lado del otro separados por el delimitador
   ShowMessage(AuxText);

   // Elimina de Memoria el StringList
   StrList.Free;

end;

end.
El código anterior muestra la forma de generar valores en un TStringList con un Retorno de Carro y Salto de Línea y luego eliminar el mismo adicionando un separador entre los elementos a visualizar.

Nota: Se asume que el problema planteado en el Msg #1 se debe a un CRLF que forma parte de cada elemento del TStringList.

Espero sea útil :)

Nelson.

jonydread 04-10-2013 04:48:52

Muchas gracias funciona tal como quiero

Saludos


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

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