Função que retorne um TStringList
Salve pessoal,
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
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
Curtidas 0
Respostas
Tnaires
09/11/2006
Olá
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.
Abraços
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
Tnaires
09/11/2006
Detalhando mais o exemplo:
Abraços
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
Martins
09/11/2006
Marcelo, vc pode usar a dica do colea tnaires, assim vc acaba com o ´Access violation´, pq o free q vc está utilizando dentro de sua função depois do Finally está provocando isso.
Não sei exatamente o q vc pretende mas, estarei on-line amanhã lá pelas 9:30 no MSN.
Boa sorte
Não sei exatamente o q vc pretende mas, estarei on-line amanhã lá pelas 9:30 no MSN.
Boa sorte
GOSTEI 0
Mmoreira
09/11/2006
Vou tentar explicar o que eu preciso fazer:
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!!!
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
Adriano Santos
09/11/2006
Marcelo, vc pode usar a dica do colea tnaires, assim vc acaba com o ´Access violation´, pq o free q vc está utilizando dentro de sua função depois do Finally está provocando isso.
Não sei exatamente o q vc pretende mas, estarei on-line amanhã lá pelas 9:30 no MSN.
Boa sorte
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
Mmoreira
09/11/2006
tnaires,
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.
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
Martins
09/11/2006
[quote:bf7e44ee73=´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.[/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.
Marcelo, vc pode usar a dica do colea tnaires, assim vc acaba com o ´Access violation´, pq o free q vc está utilizando dentro de sua função depois do Finally está provocando isso.
Não sei exatamente o q vc pretende mas, estarei on-line amanhã lá pelas 9:30 no MSN.
Boa sorte
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
Martins
09/11/2006
tnaires,
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.
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
Mmoreira
09/11/2006
Martins,
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´
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
Martins
09/11/2006
Martins,
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´
Certo Marcelo, vou fazer uns testes aqui.
t+
GOSTEI 0
Marcelo Saviski
09/11/2006
uma outra alternativa seria você passar a lista de strings como parametro, por exemplo:
ai existem duas maneiras de usá-la
ou
:)
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
Martins
09/11/2006
Marcelo, estou apenas concluindo um relatório e irei testar seu código fazendo nele as alterações necessárias para que ele funcione como desejado.
T+
T+
GOSTEI 0
Martins
09/11/2006
Olá Marcelo (mMOREIRA), veja se o DEMO q te mandei por e-mail te serve.
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+
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