Fórum Função que retorne um TStringList #332928
09/11/2006
0
Estou precisando desenvolver uma função e seu retorno tem que ser to tipo TStringList ... mais ou menos assim:
function RetornaNomes : TStringList;
begin
Result := TStringList.Create;
try
Result.Add( ´Marcelo´ );
Result.Add( ´Maria´ );
finally
FreeAndNil( Result ); // Não posso fazer isso vai dar pauu
end;
end;
Depois para usar esta função queria algo assim:
Memo1.lines.add( RetornaNomes.Strings[0] );
Memo1.lines.add( RetornaNomes.Strings[1] );
Bom isso que eu fiz ai sei que esta totalmente errado ... nao vai funcionar mas acho que da para ter uma ideia do que eu estou querendo.
Se alguem puder dar um help ai ... valewwww
Mmoreira
Curtir tópico
+ 0Posts
09/11/2006
Tnaires
A função deve retornar o StringList sem destruí-la. É responsabilidade do método que chamou a função destruir o objeto passado como resultado.
with RetornaNomes do try // Faça algo finally Free; end;
Abraços
Gostei + 0
09/11/2006
Tnaires
function RetornaNomes: TStringList; begin Result := TStringList.Create; Result.Add( ´Marcelo´ ); Result.Add( ´Maria´ ); end;
with RetornaNomes do try Memo1.Lines.Add( Strings[0] ); Memo1.Lines.Add( Strings[1] ); finally Free; end;
Abraços
Gostei + 0
10/11/2006
Martins
Não sei exatamente o q vc pretende mas, estarei on-line amanhã lá pelas 9:30 no MSN.
Boa sorte
Gostei + 0
10/11/2006
Mmoreira
Vou receber nesta funcão uma string mais ou menos assim:
String := ´marcelo/joao/maria´
O que minha função vai ter que fazer?
Ela vai quer que quebrar a string na barra e me retornar os nomes .... a quantidade de nomes por string nao tem como prever, será aleatório por isso pensei em jogar nome por nome na stringlist.
Não tenho certeza se esta seria a melhor opção para resolver esta questão ... aproveito para pedir a opinião do tnaires e Martins ... o que vc acham ??? é o melhor caminho ???
Brigado pela atenção de todos.
Abraços!!!
Gostei + 0
10/11/2006
Adriano Santos
Só pra constar, caso não saiba, o Finally é executado mesmo não havendo erros, ou seja, o código no try é executado e logo em seguida é executado o fnally, por isso o Access Violation.
Gostei + 0
10/11/2006
Mmoreira
Só para deixar registrado sua dica funcionou perfeitamente, fiz o teste aqui e obtive o resultado esperado. Meu erro era mesmo estar destruindo o objeto no momento erra.
Brigadão pela ajuda.
Gostei + 0
10/11/2006
Martins
Só pra constar, caso não saiba, o Finally é executado mesmo não havendo erros, ou seja, o código no try é executado e logo em seguida é executado o fnally, por isso o Access Violation.[/quote:bf7e44ee73]
é verdade [b:bf7e44ee73]Adriano[/b:bf7e44ee73] como não tem nada no bloco entre o try e finnaly q receba os valores da stringlist, quando chegar no finally ela será liberada e o retorno da função não vai ser o esperado mas sim um erro por requisitar algo q não existe mais.
Gostei + 0
10/11/2006
Martins
A dica do [b:0bc7b0802c]tnaires[/b:0bc7b0802c] funciona sim. agora diga-nos uma coisa de onde vc vai pegar essas informações q alimentarão essa stringlist?
vc terá q quebrar a string e remover a barra, posso tentar algo, só não estou com o Delphi aqui agora, mas aguardo seu retorno.
boa sorte!
Gostei + 0
10/11/2006
Mmoreira
Eu vou pegar estas informações de uma base de dados em ACCESS ... os caras tem um cadastro la e foram colocando exatamente assim: ´marcelo/maria/joao´
Gostei + 0
10/11/2006
Martins
Certo Marcelo, vou fazer uns testes aqui.
t+
Gostei + 0
10/11/2006
Marcelo Saviski
procedure ObterNomes(ListaDeNomes: TStrings); begin with ListaDeNomes do begin Add(´Marcelo´); Add(´Maria´); end; end;
ai existem duas maneiras de usá-la
var ListaDeNomes: TStrings; begin (...) try ListaDeNomes := TStringList.Create; ObterNomes(ListaDeNomes); with ListaDeNomes do begin Memo1.Lines.Add( Strings[0] ); Memo1.Lines.Add( Strings[1] ); end; finally ListaDeNomes.Free; end; (...) end;
ou
ObterNomes(Memo1.Lines);
Gostei + 0
10/11/2006
Martins
T+
Gostei + 0
11/11/2006
Martins
PS: Desculpem demais usuários, mas tão logo seja confirmada pelo colega, posto a função aqui para todos verem e analisarem inserindo comentários e fazendo melhorias.
t+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)