Preencher array of array of String

05/07/2018

32

Boa tarde , estou com um problema e já tentei achar uma solução melhor porém não consegui, eu tenho uma lista de objeto da classe pergunta , eu preencho toda lista com os dados dessa classe, porém eu preciso criar uma matriz de panel e imagem para colocar os dados na tela, esta assim o codigo.
pergunta := TPergunta.Create;
        pergunta.Codigo   := queryAcesso.FieldByName('COD_PERGUNTA').AsInteger;
        pergunta.Pergunta := queryAcesso.FieldByName('PERGUNTA').AsString;
        pergunta.RspColuna:= queryAcesso.FieldByName('IMGCOLUNA').AsString;
        pergunta.Rsp1     := queryAcesso.FieldByName('IMG1').AsString;
        pergunta.Rsp2     := queryAcesso.FieldByName('IMG2').AsString;
        pergunta.Rsp3     := queryAcesso.FieldByName('IMG3').AsString;
        pergunta.Rsp4     := queryAcesso.FieldByName('IMG4').AsString;
        pergunta.Rsp5     := queryAcesso.FieldByName('IMG5').AsString;
        pergunta.RspCerta := queryAcesso.FieldByName('PALAVRA').AsString;

        ListaPerguntas.Add(pergunta);


estou adicionando os dados na ListaPerguntas.

vet[i,0] := TPergunta(listaPerguntas[contador]).RspColuna;
vet[i,1] := TPergunta(listaPerguntas[contador]).Rsp1;
vet[i,2] := TPergunta(listaPerguntas[contador]).Rsp2;
vet[i,3] := TPergunta(listaPerguntas[contador]).Rsp3;
vet[i,4] := TPergunta(listaPerguntas[contador]).Rsp4;
vet[i,5] := TPergunta(listaPerguntas[contador]).Rsp5;
contador := contador + 1;

estou colocando os dados dentro de vet do tipo array of array of String , alguém sabe uma forma melhor de pegar os dados da lista e guardar na vet vet do tipo array of array of String ???
Responder

Post mais votado

06/07/2018

É redundante você ter uma array com os objetos das perguntas e outro com os conteúdos desses objetos.
Talvez seja mais fácil guardar somente o índice da pergunta e apresentar os dados, obtidos diretamente da lista de objetos.
Algo assim:
// vet passa a ser um array de inteiros
vet[0] := 5; // aqui você diz que o elemento 0 será a pergunta 5 do conjunto de perguntas.
vet[1] := 3; // aqui você diz que o elemento 1 será a pergunta 3 do conjunto de perguntas.
vet[2] := 8; // aqui você diz que o elemento 2 será a pergunta 8 do conjunto de perguntas.

//então você acessa a pergunta à partir do conteúdo do elemento apontado em "vet". Para ilustrar:
for n := low( vet ) to high( vet )
begin
  msg := 'imgcoluna:' + TPergunta(listaPerguntas[vet[n]]).RspColuna + ' | ' +
         'img1:' + TPergunta(listaPerguntas[vet[n]]).Rsp1 + ' | ' +
         'img2:' + TPergunta(listaPerguntas[vet[n]]).Rsp2 + ' | ' +
         'img3:' + TPergunta(listaPerguntas[vet[n]]).Rsp3 + ' | ' +
         'img4:' + TPergunta(listaPerguntas[vet[n]]).Rsp4 + ' | ' +
         'img5:' + TPergunta(listaPerguntas[vet[n]]).Rsp5;

  Application.MessageBox( msg, 'Teste', MB_OK);
end;

Pode ser que eu não tenha entendido sua necessidade....
Responder

Mais Posts

Eu entendi o que quis dizer, só há um problema no form uma label recebi a pergunta , e eu crio uns TImages runtime recebendo a resposta, por isso tenho que salvar em matriz , onde a linha 1 , col 1 recebe rsp1 , linha1 , col2 recebe rsp2 ... até acabar as perguntas e respostas.
Responder
Mas não acaba funcionando da mesma forma? A diferença é que da forma que eu fiz não precisa preencher o array vet com o conteúdo da pergunta, somente com o "indice" da pergunta, e a montagem é feita obtendo o valor diretamente da lista de objetos listaPerguntas
Responder
Eu acredito que não da certo, porque como vou fazer gerar o TImages em tempo de execução ? se for um array ele vai repetir indice porque quando gero as imagens do tipo TImage , faço um loop como se fosse uma matriz e não um array.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar