Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.744
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
El método 2 no libera al primer St Creado.
Al método 1 le agregué el TRY..FINALLY por si falla algo entre que se crea y se libera.
Código Delphi [-]
Function TForm1.DelimitarString(Cadena: String; Delimitador: Char): TStringList;
begin
  Result := TStringList.Create;
  Result.Delimiter := Delimitador;
  Result.StrictDelimiter := True;
  Result.DelimitedText := Cadena;
end;

// Método 1
Procedure TForm1.TratarCadena1;
Var
  St: TStringList;
begin
  St := DelimitarString('Uno;Dos;Tres', ';');
  // Si llega aquí, St se ha creado correctamente. 
  // Agrego Try..Finally para asegurarme de que se libere, pase lo que pase.
  try
     Showmessage(St[0] + #13 + St[1] + #13 + St[2]);
  finally
     St.Free;
  end;
end;

// Método 2
Procedure TForm1.TratarCadena2;
Var
  St: TStringList;
begin
  St := TStringList.Create;
  Try
    // Esto machaca el St creado con otro que creará dentro de la función DelimitarString 
    St := DelimitarString('Uno;Dos;Tres', ';');
    Showmessage(St[0] + #13 + St[1] + #13 + St[2]);
  Finally
    St.Free;
  end;
end;

De todos modos, a mi me gusta mas crear los objetos y pasárselo a los procedimientos para que los rellenen.
Por ejemplo le puedes pasar la lista de items de un componente TCombo... para que te lo rellene.
Código Delphi [-]
procedure RellenaAlmacenes(Lista: TStrings);
var
  Idalmacen : integer;
begin
  Lista.Clear;
  Lista.AddObject(_('Todos los Almacenes'), Pointer(0));

  // Abro y fitro tabla de almacenes activos
  ...
  while not TablaAlmacenes.EOF do
  begin
     Idalmacen := FieldByName('ID').AsInteger;
     Almacen := FieldByName('ALMACEN').AsString + ' ' + FieldByName('DESCRIPCION').AsString;
     Lista.AddObject(Almacen, Pointer(IdAlmacen));
     Next;
  end;
end;

begin
  ...
  RellenaAlmacenes(CBAlmacen.Items);
  CBAlmacen.ItemIndex := 0;
  ...
end;

Según tu ejemplo sería algo asi:
Código Delphi [-]
procedure TForm1.DelimitarString(St: TStringList; Cadena: String; Delimitador: Char);
begin
  St.Delimiter := Delimitador;
  St.StrictDelimiter := True;
  St.DelimitedText := Cadena;
end;

Procedure TForm1.TratarCadena1;
Var
  St: TStringList;
begin
  St := TStringList.Create;
  // Si llega aquí, St se ha creado correctamente. 
  // Agrego Try..Finally para asegurarme de que se libere, pase lo que pase.
  try
     DelimitarString(St, 'Uno;Dos;Tres', ';');
     Showmessage(St[0] + #13 + St[1] + #13 + St[2]);
  finally
     St.Free;
  end;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Liberación de versiones de Delphi Neftali [Germán.Estévez] La Taberna 1 06-10-2016 10:35:13
Liberación de memoria de Tbitmap Marck Silencer Gráficos 11 27-01-2011 08:29:06
Liberación de un Form No Modal vejerf OOP 1 06-09-2010 19:41:20
Día mundial por la liberación de la cannabis. poliburro La Taberna 54 10-05-2008 04:55:56
Liberación de memoria Jome OOP 5 22-02-2007 14:44:56


La franja horaria es GMT +2. Ahora son las 08:43:14.


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
Copyright 1996-2007 Club Delphi