Passando objetos num loop com: TStringlist >AddObject(Value, MinhaClasse )

Delphi

08/10/2017

Olá caros amigos, estou com um método que não estou conseguindo resolver


Estou num loop executando o preenchimento de minha classe até aí tudo normal, e estou colocando ela no final do looping em uma lista:

TStringlist >AddObject(Value, MinhaClasse ) ;

var wObjetoXML : TLm_bkpdfe;
..//..
if wListaXMLs.IndexOf(wObjetoXML.Chave) <0 then
wListaXMLs.AddObject(wObjetoXML.Chave, wObjetoXML);

O problema ocorre quando vou ler essa lista e todos os objetos adcionados estão com o mesmo valor da ultima vez que foi dado um ADD na lista

Vi no Wacth que o ponteiro esta com mesmo valor de referencia para tods os objetos asdicionados, como faço para dar um ADDOBJECT com a classe e obter os valores nelas passados para cada volta do looping?

Espero ter me expressado adequadamente

  
function fXMLEnvio: boolean; //Aqui a classe é atribuida os valores: wObjetoXML : TLm_bkpdfe;
  var wChaveAux: string;
  begin
    Result := False;
    with wObjetoXML do
    begin

      wErro := FindFirst(wPathFile+'\\'+ Env_, faAnyFile, wFRec);
      wOK := wErro = 0;
      while wOK do
      begin
        strAUX := '';

        pIniciaCampos;

        wXmlName := wFRec.Name;
        Chave := fGetChaveFilename(wXmlName);
        if Pos('Env_',wXmlName) > 0 then
        begin
          wZipName := wPathFile+'\\'+ChangeFileExt(wXmlName,'.zip');
          fZipFile(wZipName, wPathFile+'\\'+wXmlName);

          XMLArq.LoadFromFile(wPathFile+'\\'+wXmlName);
          wNodeXML := XMLArq.documentElement;
          wNodeXML.ChildNodes.Count;

           wNodeXML := wNodeXML.ChildNodes.First;
          if Assigned(wNodeXML) then
          begin
             if Assigned(wNodeXML) and (wNodeXML.NodeName = 'NFe') then
             begin
               wNodeXML := wNodeXML.ChildNodes.First;
               if Assigned(wNodeXML) and (wNodeXML.NodeName = 'infNFe') then
               begin
                 wChaveAux := wNodeXML.AttributeNodes.FindNode('Id').text;
                 wChaveAux := Copy(wChaveAux,4,44);

                 wNodeXML := wNodeXML.ChildNodes.First;
                 if Assigned(wNodeXML) and (wNodeXML.NodeName = 'ide') then
                 begin

                   Idf_documento := StrToInt64Def(funcvarXML(wNodeXML.ChildNodes['nNF']),0);

                   Dataemissao := DateXMLToDate(funcvarXML(wNodeXML.ChildNodes['dhEmi']));
                   Tipoambiente :=  funcvarXML(wNodeXML.ChildNodes['tpAmb']); // Tipo de Ambiente da Nota Fiscal(Produção/Homologação)
                   if Tipoambiente = '1' then
                   Tipoambiente := 'Produção'
                   else
                   Tipoambiente := 'Homologação';

                   Xmlenvio := TFileStream.Create(wZipName, fmOpenRead);
                   if Chave <> wChaveAux then
                     ShowMessage('Chaves do arquivo XML diferem');

                 end;
               end;
             end
             else
             begin
               if Assigned(wNodeXML) and (wNodeXML.NodeName = 'infNFe') then
               begin
                 //                      ShowMessage('Nota de envio ');
                 wChaveAux := wNodeXML.AttributeNodes.FindNode('Id').text;
                 wChaveAux := Copy(wChaveAux,4,44);

                 wNodeXML := wNodeXML.ChildNodes.First;
                 if Assigned(wNodeXML) and (wNodeXML.NodeName = 'ide') then
                 begin
                   Idf_documento := StrToInt64Def(funcvarXML(wNodeXML.ChildNodes['nNF']),0); // Código sequencial NFe
                   Dataemissao := DateXMLToDate(funcvarXML(wNodeXML.ChildNodes['dhEmi']));
                   Tipoambiente :=  funcvarXML(wNodeXML.ChildNodes['tpAmb']); // Tipo de Ambiente da Nota Fiscal(Produção/Homologação)
                   if Tipoambiente = '1' then
                   Tipoambiente := 'Produção'
                   else
                   Tipoambiente := 'Homologação';

                   Xmlenvio := TFileStream.Create(wZipName, fmOpenRead);
                   if Chave <> wChaveAux then
                     ShowMessage('Chaves do arquivo XML diferem');
                 end;
               end;
             end;

             if wListaXMLs.IndexOf(wObjetoXML.Chave) <0 then
                wListaXMLs.AddObject(wObjetoXML.Chave, wObjetoXML); //Depois de ter atribuidos os valores, dou addObjetc na lista com :wObjetoXML
          end;
        end;

        wErro := FindNext(wFRec);
        strAUX := FileSearch(wZipName, wPathFile);

        wOK := (wErro = 0) ;
        Xmlenvio.Free;

        if FileExists(strAUX) then
          if DeleteFile(strAUX)then
            AddLog('LogDelete',ExtractFileDir(strAUX),'DeleteFile: '+strAUX );
      end;
      Result := True;
    end;
  end;


(*Depois faço a lietura da lista *)
 //O método ainda não retorna nada pq não está pronto...

 function pGravaXML: boolean;  //Aqui gravo os dados da lista, porém todos os objetos tem os valoreas do ultimo objeto adcionado 
 var i: Integer;
 begin
   if not Assigned(wListaXMLs) then
     Exit;

   for I := 0 to wListaXMLs.Count-1 do
   begin
     wDaoXML.fCarregaXMLEnvio(wListaXMLs.Objects[i] as TLm_bkpdfe);
   end;
 end;



Saudações.
Anderson Gaitolini

Anderson Gaitolini

Curtidas 0
POSTAR