bnobre
Membro Pro Verificado-
Total de ítens
1.795 -
Registro em
-
Última visita
-
Days Won
4
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que bnobre postou
-
Olá a todos, Estou reparando que no Delphi 11 ocorre o retorno implícito do objeto representado por Self na criação do mesmo. Os dois exemplos abaixo funcionam para utilizar o método Add: TStringList(TStringList.Create).Add TStringList.Create.Add Porque isso ocorre já que não existe o "Result := Self" no Create do TObject??? Desde já agradeço a atenção de todos
-
Limitar lista de valores inteiros
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi meu amigo... Também pensei nisso... Na verdade essa seria a solução ideal, porém tem um PEQUENO grande detalhe... Existem dois ranges: 501..509 e 511..513 Não consegui escrever com 2 ranges. O compilador não aceita. -
Limitar lista de valores inteiros
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi meu amigo... Tudo bom? Eu tinha pensado nisso, mas na verdade queria saber se tinha algo mais direto... Como na criação do Enum informamos valores textuais que representam números, temos que converter os mesmos para String, como eu tinha mostrado nos exemplos do ACBr. function CSTIBSCBSToStr(const t: TCSTIBSCBS): string; Mas como nesse caso que eu citei os valores já são inteiros fixos, queria saber se tinha alguma técnica mais reduzida, onde eu não precisasse criar um Enum e depois um Array representando esse Enum, como no teu exemplo. -
Olá a todos, Com o uso de Enums nós conseguimos um melhor controle do valores que podem ser usados em propriedades, por exemplo na unit ACBrDFe.Conversao: type TCSTIBSCBS = (cstNenhum, cst000, cst010, cst011, cst200, cst210, cst220, cst221, cst222, cst400, cst410, cst510, cst550, cst620, cst800, cst810, cst820, cst830); Na propriedade IBSCBS só vou poder usar esses valores, que serão convertidos para String pela função abaixo: function CSTIBSCBSToStr(const t: TCSTIBSCBS): string; Quero usar a mesma lógica, mas com valores inteiros. Por exemplo, tenho a propriedade "CancelCodeId" do tipo inteiro que só pode receber os valores inteiros [501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513]. Quero criar um tipo TCancelCodeId que só conheça esses valores, consequentemente a propriedade que for desse tipo só aceitará esses valores, exatamente como é feito com a técnica do Enum citada acima. Como vocês fariam nesse caso? Deu uma pesquisada aqui nos códigos do ACBr, mas não a princípio não achei nada.
-
Uso de Interface nos componentes do ACBr
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Pra ser sincero eu não entendi bem essa frase ainda: Você não quis dizer "não usaria interface"???????? Porém a primeira parte entendi... Usar a "tipagem para interface" seria fazer o cast para acessar a propriedade... Putz, que volta isso!!! Aí seria melhor usar o Fluent Interface sugerido pelo @Daniel Simoes. Acho que seria essa forma de programar presente no vídeo abaixo, onde o autor nomeia como Programação Funcional, estou correto? -
Uso de Interface nos componentes do ACBr
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Se entendi bem o que você sugeriu é usar a interface só para declarar os métodos, dos quais deverão ser implementados nas classes derivadas... E as propriedades declaro apenas nas classes derivadas... Seria isso? Não entendi o final quando disse "usar a tipagem para interface". O que quis dizer? -
Uso de Interface nos componentes do ACBr
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi... Legal O que eu não gosto nos interfaces é a necessidade de criar métodos Get e Set para as propriedades. Com o uso de classes tradicional dá pra fazer isso de forma mais pratica acessando direto os campos, por exemplo: property GroupId: String read FGroupId write FGroupId; Quando se tem muitas propriedades isso é muito prático; -
Uso de Interface nos componentes do ACBr
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi @Daniel Simoes, Vou ver sim, mas a grande maioria pelo que reparei não usa. Legal essa sua técnica de receber eles como parâmetros. -
Uso de Interface nos componentes do ACBr
um tópico no fórum postou bnobre Object Pascal - Delphi & Lazarus
Olá a todos, Aqui nos meus estudos sobre POO reparei que nos componentes do ACBr não se faz o uso das Interfaces do Delphi e muitos programadores sugerem que é mais interessante programar orientado a interfaces do que a objetos. Tem algum motivo em especial para não se fazer o uso de Interfaces nos componentes? Desde já agradeço a atenção -
Olá a todos, Na codificação das units do ACBr, muitas vezes é usado a letra A no início do nome dos parâmetros, como por exemplo na unit ACBrJSON (AValue): function AddElement(const AValue: string): TACBrJSONArray; overload; function AddElement(const AValue: Integer): TACBrJSONArray; overload; function AddElementJSON(AValue: TACBrJSONObject): TACBrJSONArray; overload; function AddElementJSONString(const AValue: string): TACBrJSONArray; overload; O que significa e porque usam esse padrão? Desde já agradeço a atenção
-
Dúvida sobre destruição da Classe
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Finalmente descobri o significado da linha abaixo: TJsonObject(FValue.O) Está aplicando um Typecast, dizendo que FValue.O trata-se de um TJsonObject. Fonte: https://docwiki.embarcadero.com/RADStudio/Athens/en/Expressions_(Delphi)#Typecasts Já FValue é um um Record onde o field O recebe valores do tipo ponteiros. Portanto FValue.O possui o endereço de memória onde estão gravados objetos json, daí o TypeCast para trata-los como tal. Só ainda não consegui descobrir em qual linha o FValue.O recebe esses endereços. -
Dúvida sobre destruição da Classe
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Exato... Por isso que estou tentando entender O PORQUE Estou no caminho certo em meu entendimento? -
Dúvida sobre destruição da Classe
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi pessoal... Acho que a "mágica" está aqui: (Linha 2301 da unit JsonDataObjects_ACBr) function TJsonDataValue.GetObjectValue: TJsonObject; begin if FTyp = jdtObject then Result := TJsonObject(FValue.O) //******************* Aqui else if FTyp = jdtNone then Result := nil else begin TypeCastError(jdtObject); Result := nil; end; end; Quando o tipo armazenado é um objeto(jdtObject) ele retorna o TJsonObject(FValue.O). O FValue.O é um ponteiro, apontando para o local onde está o objeto da lista de arrays em questão. O detalhe é que eu não entendi esse código TJsonObject(FValue.O). Basicamente ele usa o nome da classe como se fosse uma função e o parâmetro é o ponteiro. Isso executa alguma propriedade ou função dentro da classe TJsonObject? Se sim qual? -
Dúvida sobre destruição da Classe
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Sim... Na verdade parece que a "mágica" acontece com o uso de ponteiros na classe TJsonDataValue da unit JsonDataObjects_ACBr. Muito interessante -
Dúvida sobre destruição da Classe
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi @Daniel Simoes, tudo bom? Não, na verdade se tento destruir o objeto gera o erro "invalid pointer value", pois conforme o @valterpatrick explicou, o objeto (LJsonObject) está apontando para dentro de outro objeto (LJSon) que já foi destruído, portanto esse endereço de memória não existe mais. Estou apenas estudando o código e melhorando meus conhecimentos na IDE. -
Dúvida sobre destruição da Classe
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Oi meu amigo... Tudo bom? Obrigado pela explicação, faz sentido. Só não consegui achar no código onde exatamente isso acontece. Na linha 81 da unit ACBrConsultaCNPJ.WS.BrasilAPI acontece a criação do objeto: LJsonObject := LJSon.ItemAsJSONObject[I]; Como você disse, está dentro do LJSon, pois inclusive usa uma propriedade desse objeto, a ItemAsJSONObject. Tal propriedade usa a função GetItemAsJSONObject (linha 886 da unit ACBrJSON) para leitura. É aqui que estou me perdendo nesse conceito de "dentro do objeto"... Dentro dessa função temos a seguinte estrutura (removi as diretivas de compilação, exemplo está somente para Windows): function TACBrJSONArray.GetItemAsJSONObject(const AIndex: Integer): TACBrJSONObject; var LJSON: TJsonObject; begin LJSON := FJSON.Items[AIndex].ObjectValue.Clone; try Result := TACBrJSONObject.Create(LJSON); Result.OwnerJSON := True; FContexts.Add(Result); except LJSON.Free; raise; end; end; Suponho que a linha que faz criar o objeto "dentro" do LJson do exemplo é a linha: LJSON := FJSON.Items[AIndex].ObjectValue.Clone; Mas ao tentar estudar esse ObjectValue e esse Clone estou me perdendo. Vou tentar estudar esse código para ver se compreendo melhor. Desde já agradeço a ajuda -
Olá a todos, Estou dando uma estudada nos componentes do ACBr e me deparei com uma dúvida na classe TACBrConsultaCNPJWSBrasilAPI presente na unit ACBrConsultaCNPJ.WS.BrasilAPI. A mesma possui uma procedure Executar onde é implementado um código que varre um array de objetos Json e preenche a resposta. São declarados dois objetos para tal LJSon que representa o array e o LJsonObject que representa cada objeto dentro do array. Porém ao final o LJsonObject não precisa ser destruído... Na verdade reproduzi o código e se tentar destruir dá erro. Fui indo cada vez mais fundo nas classes usadas (units ACBrJSON e JsonDataObjects_ACBr), porém não consegui entender o motivo de não precisar destruir o objeto. Alguém poderia me explicar? Desde já agradeço a atenção
-
Hub de Integração com Marketplaces
bnobre replied to bnobre 's tópico in Dúvidas não relacionadas ao ACBr
Bom dia @Juliomar Marchetti... Respondendo!!! -
OAuth2 com Url de Redirect Pública
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Cara... Verdade!!! Você usa ou conhece alguém que usa a Integração com o Mercado Livre + Delphi e aplicou essa técnica nessa etapa em que fiquei empacado??? -
OAuth2 com Url de Redirect Pública
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Olá @Daniel Simoes... Tudo bom??? Agora você falou grego pra mim O que seria essa API Web? Poderia me dar um exemplo? Desde já agradeço a atenção -
OAuth2 com Url de Redirect Pública
um tópico no fórum postou bnobre Object Pascal - Delphi & Lazarus
Olá a todos, Estou tentando fazer o processo de autenticação no Mercado Livre usando o Delphi + Httpsend (Synapse) e o mesmo usa o protocolo de autorização OAuth2. O processo na verdade é simples, basta acessar o respectivo link com o os parâmetros responsetype = code, client_id e redirect_uri e será retornado o Código de Autorização após o devido login, aonde o mesmo será usado para a geração dos Tokens. O problema é capturar esse Código de Autorização automaticamente, para não ter que ficar digitando esse link manualmente e nem copiar esse código manualmente. Pelo que pesquisei, normalmente em aplicações desktop quando esse procedimento de autorização OAuth2 é concluído logo em seguida o link de redirect manda o navegador para um endereço local (http://localhost:1500 por exemplo) onde a aplicação está escutando e assim captura o Código de Autorização na URL, exemplo: https://github.com/rvk01/google-oauth2/blob/master/google_oauth2.pas A questão é que o Mercado Livre não deixa especificar endereços locais no redirect_uri das aplicações que serão usadas na integração. Na verdade pelo que li deixava no passado, porém agora não. Portanto se ele não redireciona para um endereço local, minha aplicação não consegue ficar escutando e consequentemente não consigo capturar o parâmetro onde está o Código de Autorização retornado após o login na plataforma. Como vocês fazem nesse caso em particular para a captura automática desse Código de Autorização? Desde já agradeço a atenção -
Hub de Integração com Marketplaces
bnobre replied to bnobre 's tópico in Dúvidas não relacionadas ao ACBr
Olá... Tudo bem? Você comentou "a gente". Você fornece esse serviço? Se sim poderia detalhar mais? Desde já agradeço a atenção -
Hub de Integração com Marketplaces
um tópico no fórum postou bnobre Dúvidas não relacionadas ao ACBr
Olá a todos, Estamos querendo integrar nosso sistema PDV com soluções de marketplace do mercado, como Shoppe, MercadoLivre, dentre outros. Como todo dia novos marketplaces surgem no mercado, assim como questões técnicas mudam a todo momento nos atuais, os hubs de integração parecem a escolha mais assertiva. Alguém que utilize recomenda algum? Desde já agradeço a atenção -
Executável compilado - Código Exposto
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Sim sim... O foco realmente é dificultar para a visualização no Bloco de Notas, com ferramentas profissionais e escaneamento da memória não tem jeito, vai passar. Mas com o foco no Bloco de Notas, creio que o caminho é uma criptografia para embaralhar a string e dificultar o acesso a chave da criptografia, com as técnicas citadas pelo @Daniel Simoes (tabela ASCII com símbolos). Acho que é isso!!! -
Executável compilado - Código Exposto
bnobre replied to bnobre 's tópico in Object Pascal - Delphi & Lazarus
Olá meu amigo, tudo bom? Eu só não entendi o momento da aplicação desse teu exemplo. Como a String com conteúdo sensível fica exposta o objetivo é ocultá-la, daí a necessidade de criptografá-la, pois o conteúdo exposto ficará ilegível. Porém toda a criptografia precisa de uma chave e ela também ficaria exposta pelo fato de ser String, daí a dica interessante do @Daniel Simoes de usar símbolos fora do alfabeto com o padrão ASCII para a chave e quebrar a mesma em várias partes, pois mesmo ela ficando exposta se misturaria com o resto do código dificultando os hackers básicos... Em que momento você aplica essa técnica que você mencionou acima???
