Gilcimar 0 Denunciar post Postado Novembro 10, 2008 Olá Pessoal, Estou com um problemão por aqui, preciso fazer uma variavel do tipo ponteiro receber um valor de um ListBox (um por vez), mas estou com dificuldades para fazer isto. Será que alguém poderia me ajudar ? Estou passando o código abaixo e indicando onde estou com problema. for X := 1 to QNT do begin ListBox1.Items.Add(IntToStr(RandomRange(N, N2))); new(atual); atual^.numero := ListBox1.Items.IndexOf(ListBox1.Items[x]); // ONDE ESTOU COM PROBLEMA atual^.prox := nil; if pri = nil then begin pri := atual; ult :=atual; atual^.ant := nil end else begin ult^.prox := atual; atual^.ant := ult; ult := atual; end; end; Não sei se estou fazendo certo ali, mas o problema dá erro de "LIST INDEX OUT OF BOUNDS(1). Por favor, preciso de ajuda. Obrigado Gilcimar Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 10, 2008 Gilcimar, você debugou o código para ver se existe valor no listbox na posição que está tentando acessar no trecho onde ocorre o erro? Tente carregar seu listbox com os valores antes do for onde vai pegar os dados, algo tipo isto: procedure TForm1.Button1Click(Sender: TObject); var i, QNT : Integer; begin QNT := 10; Randomize; //Jogando valores randômicos entre 0 e 20 no listbox For i := 0 to QNT do ListBox1.Items.Add(IntToStr(Random(20))); //Mostrando os dados do listbox para teste For i := 0 to QNT do Showmessage(IntToStr(ListBox1.Items.IndexOf(ListBox1.Items[i]))); end; Compartilhar este post Link para o post Compartilhar em outros sites
Gilcimar 0 Denunciar post Postado Novembro 10, 2008 Gilcimar, você debugou o código para ver se existe valor no listbox na posição que está tentando acessar no trecho onde ocorre o erro? Tente carregar seu listbox com os valores antes do for onde vai pegar os dados, algo tipo isto: procedure TForm1.Button1Click(Sender: TObject); var i, QNT : Integer; begin QNT := 10; Randomize; //Jogando valores randômicos entre 0 e 20 no listbox For i := 0 to QNT do ListBox1.Items.Add(IntToStr(Random(20))); //Mostrando os dados do listbox para teste For i := 0 to QNT do Showmessage(IntToStr(ListBox1.Items.IndexOf(ListBox1.Items[i]))); end; Olá Chrnos, Debuguei o programa sim, até então eu havia feito o programa sem utilizar os ponteiros e estava funcionando sem problemas, ai adicionei a rotina utilizando eles. Eu tinha feito até aqui e estava ok: for X := 1 to QNT do begin ListBox1.Items.Add(IntToStr(RandomRange(N, N2))); end; Daqui pra baixo, quando criei a area de memória " new(atual) " e comecei a tentar jogar os valores para a variavel " atual^.numero " começou a dar pau, ele não tá conseguindo indexar os valores do ListBox. Alguma sugestão ? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 10, 2008 Mas você debugou a linha de erro pra ver o que trás antes de jogar no ponteiro? O valor do ponteiro é um int ou string? Talvez o problema seja porque você está adicionando o dado no listbox e já tentando associar tudo no mesmo for... talvez assim funcione: for X := 1 to QNT do ListBox1.Items.Add(IntToStr(RandomRange(N, N2))); for X := 1 to QNT do begin new(atual); atual^.numero := ListBox1.Items.IndexOf(ListBox1.Items[x-1]); // ONDE ESTOU COM PROBLEMA atual^.prox := nil; if pri = nil then begin pri := atual; ult :=atual; atual^.ant := nil end else begin ult^.prox := atual; atual^.ant := ult; ult := atual; end; end; Mas você de todo modo tem que debugar e ver o valor deste trecho ListBox1.Items.IndexOf(ListBox1.Items[x]) antes de jogar no ponteiro e ver se há algum dado na linha referenciada por X... geralmente o erro que ocorre pra você é porque está tentando acessar um dado que não existe. E outra coisa: a contagem de itens no listbox começa em 0, não em 1. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Gilcimar 0 Denunciar post Postado Novembro 10, 2008 Mas você debugou a linha de erro pra ver o que trás antes de jogar no ponteiro? O valor do ponteiro é um int ou string? Talvez o problema seja porque você está adicionando o dado no listbox e já tentando associar tudo no mesmo for... talvez assim funcione: for X := 1 to QNT do ListBox1.Items.Add(IntToStr(RandomRange(N, N2))); for X := 1 to QNT do begin new(atual); atual^.numero := ListBox1.Items.IndexOf(ListBox1.Items[x-1]); // ONDE ESTOU COM PROBLEMA atual^.prox := nil; if pri = nil then begin pri := atual; ult :=atual; atual^.ant := nil end else begin ult^.prox := atual; atual^.ant := ult; ult := atual; end; end; Mas você de todo modo tem que debugar e ver o valor deste trecho ListBox1.Items.IndexOf(ListBox1.Items[x]) antes de jogar no ponteiro e ver se há algum dado na linha referenciada por X... geralmente o erro que ocorre pra você é porque está tentando acessar um dado que não existe. E outra coisa: a contagem de itens no listbox começa em 0, não em 1. []'s Olá Chrnos, Realmente, um dos problemas deveria estar no for, tentando fazer tudo de uma vez, agora o problema se resume em buscar os dados do ListBox. Do jeito que está, não está trazendo nada...provavelmente minha sintaxe está errada. Uma pergunta, para mim usar o IndexOf()...eu não preciso de um array ? Acho que é por ali que estou errando. Alguma sugestão ? Por enquanto agradeço, Gilcimar Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 10, 2008 Ops... agora que reparei uma coisa aqui (sono atrasado é fogo hehehe)... o IndexOf não vai te retornar o dado do ListBox... pra acessar o valor basta você passar pra função este código na linha que dá o erro: atual^.numero := StrToInt(ListBox1.Items[x-1]); A função do IndexOf agora não lembro qual é seu uso... quando lembrar eu posto aqui. Compartilhar este post Link para o post Compartilhar em outros sites
Gilcimar 0 Denunciar post Postado Novembro 10, 2008 Ops... agora que reparei uma coisa aqui (sono atrasado é fogo hehehe)... o IndexOf não vai te retornar o dado do ListBox... pra acessar o valor basta você passar pra função este código na linha que dá o erro: atual^.numero := StrToInt(ListBox1.Items[x-1]); A função do IndexOf agora não lembro qual é seu uso... quando lembrar eu posto aqui. E ai Chrnos, É isto mesmo, agora a rotina funcionou. Obrigado mesmo, me quebrasse um baita galho !! Valeu !! Gilcimar Compartilhar este post Link para o post Compartilhar em outros sites