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;
Procedure TForm1.TratarCadena1;
Var
St: TStringList;
begin
St := DelimitarString('Uno;Dos;Tres', ';');
try
Showmessage(St[0] + #13 + St[1] + #13 + St[2]);
finally
St.Free;
end;
end;
Procedure TForm1.TratarCadena2;
Var
St: TStringList;
begin
St := TStringList.Create;
Try
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));
...
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;
try
DelimitarString(St, 'Uno;Dos;Tres', ';');
Showmessage(St[0] + #13 + St[1] + #13 + St[2]);
finally
St.Free;
end;
end;