quinta-feira, 28 de junho de 2018
quarta-feira, 25 de abril de 2018
Usando ParamStr no Delphi
Em que caso podemos usar a função ParamStr?
Inicialmente, é necessário entender o seguinte: quando é gerado o arquivo executável (.exe) da aplicação, automaticamente ele passa a ter um caminho (path). Desta maneira é possível acessá-lo neste endereço ou [que é mais comum] criar um atalho para esta aplicação na área de trabalho.
Quando se cria um atalho, percebemos que existe uma propriedade chamada "Destino". Neste campo, é apresentado [entre aspas duplas] o caminho do arquivo destino, exemplo:
De qualquer forma, entramos finalmente na utilidade da função ParamStr, que serve para retornar os dados usados na invocação do arquivo a qual instanciou a função em questão.
Para retornar o nome do arquivo invocado, usa-se:
caso este método seja invocado em algum momento da execução do programa (invocador), será retornada a seguinte string:
Caso tenha sido passado algum parâmetro além do nome do arquivo (invocado), situação comum em arquivos link (relatados no início deste post), então deverá ser utilizado o index correspondente, exemplo de um endereço destino no arquivo link:
Para retornar o primeiro parâmetro informado na invocação do arquivo, usa-se:
será retornado:
Espero que seja útil!
Até+
Inicialmente, é necessário entender o seguinte: quando é gerado o arquivo executável (.exe) da aplicação, automaticamente ele passa a ter um caminho (path). Desta maneira é possível acessá-lo neste endereço ou [que é mais comum] criar um atalho para esta aplicação na área de trabalho.
Quando se cria um atalho, percebemos que existe uma propriedade chamada "Destino". Neste campo, é apresentado [entre aspas duplas] o caminho do arquivo destino, exemplo:
"C:\Users\Fulano\AppTeste.exe"
De qualquer forma, entramos finalmente na utilidade da função ParamStr, que serve para retornar os dados usados na invocação do arquivo a qual instanciou a função em questão.
Para retornar o nome do arquivo invocado, usa-se:
ParamStr( 0 ) ;
caso este método seja invocado em algum momento da execução do programa (invocador), será retornada a seguinte string:
"C:\Users\Fulano\AppTeste.exe"
Caso tenha sido passado algum parâmetro além do nome do arquivo (invocado), situação comum em arquivos link (relatados no início deste post), então deverá ser utilizado o index correspondente, exemplo de um endereço destino no arquivo link:
"C:\Users\Fulano\AppTeste.exe" d
Para retornar o primeiro parâmetro informado na invocação do arquivo, usa-se:
ParamStr( 1 ) ;
será retornado:
dOBS: É necessário colocar espaços entre os parâmetros, não importa quantos sejam.
Espero que seja útil!
Até+
domingo, 1 de abril de 2018
Função de incrementação e decrementação no Delphi?
Em alguns casos durante a programação é comum surgir a necessidade de incrementar o valor de uma determinada variável.
Nestas situações é normal usarmos a seguinte técnica:
<variável> := <variável> + 1 ;
Porém, no Delphi existe uma função chamada inc que faz isso pra nós, ou seja, ela faz a incrementação do valor na variável.
Esta função possui os seguintes parâmetros:
inc( var X: Ordinal; [ N: integer ] )
como podemos perceber, a função aguarda um número à ser incrementado, e existe a possibilidade de informar o valor que será incrementado.
Exemplo:
var numero: integer ;
begin numero := 0 ;
showmessage( intToStr( numero ) ) ;
inc( numero ) ;
showmessage( intToStr( numero ) ) ;
end ;
No exemplo acima, é declarada uma variável chamada "numero" do tipo inteiro. Esta variável recebe o valor '0' (zero), e então é exibida uma mensagem ao usuário apresentado o valor da variável "numero":
Posteriormente usamos a função inc para incrementar o valor da variável "numero", na sequência é apresentado novamente o valor da variável "numero", desta vez o número '1' (um) visto que a função inc aumentou em '1' (um) o valor da variável:
Em relação ao processo de decrementação, o comum é fazermos isto:
<variáve> := <variável> - 1 ;
Porém, também existe a função dec, que tem funcionamento similar à inc, porém, esta função subtrai o valor da variável.
Exemplo:
var numero: integer ;
begin numero := 1 ;
showmessage( intToStr( numero ) ) ;
dec( numero ) ;
showmessage( intToStr( numero ) ) ;
end ;
No exemplo acima, é declarada uma variável chamada "numero" do tipo inteiro, na sequência, esta variável recebe o valor '1' (um) e então a variável "numero" é submetida à função dec, na sequência é exibida a mensagem ao usuário e então poderemos ver que o valor passou para '0' (zero), visto que a função dec retira '1' (um) da variável a cada iteração.
Espero que seja útil.
Até+
sábado, 31 de março de 2018
Como usar while no Delphi?
No inicio do estudo em qualquer linguagem de programação é normal buscarmos as funcionalidades básicas da linguagem, entre elas: tipos, sintaxes, IDE, e laços de repetição.
Neste post vou mostrar como usar a estrutura de repetição while.
Basicamente o while é um laço de repetição que executa o código em seu bloco até que uma determinada condição seja falsa, caso contrário continuará executando as instruções no bloco.
Veja o esboço abaixo:
Veja o exemplo abaixo:
var
numero: integer ;
begin
numero := 0 ;
while numero < 10 do
begin
numero := numero + 1 ;
end ;
end ;
no exemplo apresentado acima, foi declarada uma variável inteira cujo nome é "numero".
Antes do loop esta variável recebe o valor '0' (zero) e então o while começa.
É verificado se a variável "numero" é menor que '10' (dez), caso seja, então a variável "numero" recebe o valor dela mesma mais '1' (um).
Em um determinado momento o valor em 'numero' será igual ou superior à '10' (dez), neste momento o laço while não será mais executado.
Espero que seja útil!
Até+
Neste post vou mostrar como usar a estrutura de repetição while.
Basicamente o while é um laço de repetição que executa o código em seu bloco até que uma determinada condição seja falsa, caso contrário continuará executando as instruções no bloco.
Veja o esboço abaixo:
while (condição = verdadeira) do
begin < bloco de código>
end ;Vemos no esboço acima que a função while possui um cabeçalho onde é verificada uma determinada condição, e caso ela seja verdadeira, o bloco de código (entre begin e end;) será executado.
Veja o exemplo abaixo:
var
numero: integer ;
begin
numero := 0 ;
while numero < 10 do
begin
numero := numero + 1 ;
end ;
end ;
no exemplo apresentado acima, foi declarada uma variável inteira cujo nome é "numero".
Antes do loop esta variável recebe o valor '0' (zero) e então o while começa.
É verificado se a variável "numero" é menor que '10' (dez), caso seja, então a variável "numero" recebe o valor dela mesma mais '1' (um).
Em um determinado momento o valor em 'numero' será igual ou superior à '10' (dez), neste momento o laço while não será mais executado.
Espero que seja útil!
Até+
Como evitar que seja digitado letras em um edit no Delphi?
Em alguns casos é necessário impedir que o usuário digite letras e outros tipos de caracteres diferentes de números, e em casos mais específicos, é necessário isolar a digitação, focando em permitir apenas números e alguns tipos de teclas.
O Delphi disponibiliza uma propriedade booleana que monitora isto, porém vou mostrar uma forma via codificação que também atende esta necessidade.
1º Com o form aberto, arraste para ele um componente do tipo TEdit ;
2º Clique no componente "Edit" e em Object Inspector clique na aba Events e então clique duas vezes no evento "OnKeyPress" ;
3º Será criado um método (procedure). Após begin, digite o seguinte:
4º Pode salvar, compilar e executar o projeto. Tente digitar letras ou qualquer outro caractere diferente de números, você perceberá que a digitação está bloqueada.
Nesta configuração, são aceitos apenas: números e a digitação da tecla Backspace que corresponde à 8 na tabela ASCII.
Espero que seja útil.
Até+
O Delphi disponibiliza uma propriedade booleana que monitora isto, porém vou mostrar uma forma via codificação que também atende esta necessidade.
1º Com o form aberto, arraste para ele um componente do tipo TEdit ;
2º Clique no componente "Edit" e em Object Inspector clique na aba Events e então clique duas vezes no evento "OnKeyPress" ;
3º Será criado um método (procedure). Após begin, digite o seguinte:
if not ( Key in ['0'..'9', #8] ) then key := #0 ;
4º Pode salvar, compilar e executar o projeto. Tente digitar letras ou qualquer outro caractere diferente de números, você perceberá que a digitação está bloqueada.
Nesta configuração, são aceitos apenas: números e a digitação da tecla Backspace que corresponde à 8 na tabela ASCII.
Espero que seja útil.
Até+
Como criar um botão em runtime no Delphi?
É muito comum encontrar programadores de outras linguagens que acham que no Delphi para criar um objeto visual ou componente, é só clicar no ícone do componente, arrastá-lo para o form e então soltá-lo e tudo estará bem.
De fato existe esta facilidade, visto que o Delphi é uma ferramenta RAD, porém existe também a outra forma de se criar um componente, é através de codificação.
Para exemplificar, vou mostrar como criar um botão ou button em runtime.
1º Vou considerar que você já está com um projeto do Delphi aberto ;
2º Em "Object Inspector" clique na aba "events" e então clique duas vezes sobre "OnShow".
3º antes de begin, digite o seguinte
var loBTN : TButton ;
4º Após o begin, digite o seguinte:
loBTN := TButton.Create( self ) ;
loBTN.Parent := self ;
loBTN.Left := 40 ;
loBTN.Top := 50 ;
loBTN.Caption := 'BtnTeste' ;
5º agora é só compilar e executar. Quando o form for apresentado na tela, você verá que existe um botão do lado esquerdo:
É isso pessoal. Espero que seja útil.
Até+
terça-feira, 27 de março de 2018
Como formatar field do tipo Float em run time no Delphi?
Quando criamos uma consulta em SQL usando qualquer componente que suporte este tipo de operação, no modo Design Time, automaticamente quando "ativamos" o componente e na sequência fazemos o conhecido "Add all Fields", trazendo assim todos campos da consulta, caso exista um campo "float" que tenha um valor "quebrado", é muito fácil formatar o campo diretamente:
Clicar no field > Clicar na propriedade "DisplayFormat" > definir uma formatação, '###,##0.00' por exemplo.
Ok!
Mas, e quando os campos são gerados obtidos dinamicamente, ou seja, a consulta SQL é "construída" e obtida em runtime, como fazer para formatar os campos "float"?
...exatamente...temos que pensar um pouco!
Mas para isso venho através deste post tentar ajudá-lo. Abaixo, segue o processo necessário para tratar a situação apresentada acima:
1º Dentro do método em que ocorro o "<Query>.Open" declare uma variável do tipo integer, neste exemplo vou declarar "loCT":
var loCT: Integer
2º Depois da linha de código "<Query>.Open" insira as seguintes linhas de código:
for loCT := 0 to pred( <Query>.FieldCount ) do
if <Query>.Fields[loCT].DataType in [ ftFloat ] then TNumericField( <Query>.Fields[loCT] ).DisplayFormat := '###,##0.00' ;
Desta forma, todos os fields que forem do tipo ftFloat serão formatados dinamicamente e o melhor, em runtime.
Espero que seja útil!
Até+
sábado, 24 de março de 2018
Como usar arquivos '.gif' no Delphi
Para utilizar um arquivo do tipo '.gif' é necessário fazer o seguinte:
1º Inclua um componente da classe TImage no formulário ;
2º Faça o load do arquivo '.gif' na propriedade Picture do componente TImage ;
3º Defina em algum evento anterior a exibição do formulário a seguinte instrução:
obs: A linha de código acima somente será disponível caso esteja declarada a unit GIFImg no uses.
Pronto, seu "gif" já estará funcionando.
Até+
1º Inclua um componente da classe TImage no formulário ;
2º Faça o load do arquivo '.gif' na propriedade Picture do componente TImage ;
3º Defina em algum evento anterior a exibição do formulário a seguinte instrução:
TGIFImage( <TImage>.Picture.Graphic ).Animate := true ;
obs: A linha de código acima somente será disponível caso esteja declarada a unit GIFImg no uses.
Pronto, seu "gif" já estará funcionando.
Até+
domingo, 18 de março de 2018
Como usar o For..In
Qual a forma de usar a estrutura de repetição For..in?
Esta estrutura de repetição, opção ao "For..to..do", consiste em varrer uma coleção de dados, e então permite ao programador definir operações específicas com cada um dos dados obtidos.
Vamos aos exemplos de uso:
1º) Usando "String"
const Nome = 'Brasil'
var
_letra: char
for _letra in Nome do
showmessage( _letra ) ;
neste exemplo, defini uma constante de caracteres ("Brasil"). Na sequência defini uma variável do tipo 'char'.
O For..in internamente, identifica cada um dos dados na coleção referenciada após o in, e então a cada iteração é atribuída a variável antes do in, o dado em foco, algo assim:
na primeira iteração
[ B ] rasil
_letra := 'B'
na segunda iteração
B [ r ] asil
_letra := 'r'
na terceira iteração
Br [ a ] sil
_letra := 'a'
_letra := 'a'
na quarta iteração
Bra [ s ] il
_letra := 's'
_letra := 's'
na quinta iteração
Bras [ i ] l
_letra := 'i'
na sexta iteração
Brasi [ l ]
_letra := 'l'
ou seja, a variável que recebe o dado contido na coleção, deve corresponder à menor parcela desta coleção. Neste exemplo, a constante é uma cadeia de caracteres, ou seja, uma String, sendo necessário que a variável "_letra" seja do tipo char.
2º) Usando "Integer"
no caso do trato de "integer" é necessário passar um array visto que se passemos um número "direto", como:
e tentasse varrer via For..in o compilador iria entender que não existe coleção mas sim um número qualquer.
Desta forma torna-se necessário separar os números em memória e atribuí-los ao mesmo identificador, no caso, a constante "Numeros".
O funcionamento de varredura é exatamente o mesmo aplicado no primeiro exemplo.
Espero que este conteúdo seja útil!
Até +
_letra := 'i'
na sexta iteração
Brasi [ l ]
_letra := 'l'
ou seja, a variável que recebe o dado contido na coleção, deve corresponder à menor parcela desta coleção. Neste exemplo, a constante é uma cadeia de caracteres, ou seja, uma String, sendo necessário que a variável "_letra" seja do tipo char.
2º) Usando "Integer"
const Numeros: array [0..2] of integer = ( 1, 2, 3 ) ;
var
_numero: integer
for _numero in Numeros do showmessage( IntToStr( _numero ) ) ;
no caso do trato de "integer" é necessário passar um array visto que se passemos um número "direto", como:
Numeros = 123
e tentasse varrer via For..in o compilador iria entender que não existe coleção mas sim um número qualquer.
Desta forma torna-se necessário separar os números em memória e atribuí-los ao mesmo identificador, no caso, a constante "Numeros".
O funcionamento de varredura é exatamente o mesmo aplicado no primeiro exemplo.
Espero que este conteúdo seja útil!
Até +
terça-feira, 13 de março de 2018
Simular algum cenário em DEBUG
Como testar uma determinada situação sem ter que inserir valores através da interface gráfica? Vou mostrar um exemplo.
Como sempre, usarei um exemplo simples para demonstrar o uso de Diretivas de compilação na simplificação de testes, porém existem outras formas de se fazer testes. Vamos lá!
A título de teste, criei uma função chamada "IsNumber", que basicamente verifica se um determinado char recebido como parâmetro é um número, segue a declaração da função:
Após isto, no evento "OnClick" de um botão qualquer, faço um teste:
// falei sobre ifThen neste post...
Porém existem situações muito mais complexas, que existem muito mais que um input, neste caso, seria muito trabalhoso ficar preenchendo campos e etc...precisamos testar a função o mais rápido possível dependendo do projeto. Para isso, podemos automatizar o teste, condicionando esta operação ao modo como a aplicação está sendo compilada: DEBUG ou RELEASE.
Veja como é a implementação da função "IsNumber":
Agora, vou incluir o preenchimento do parâmetro "loChar" dentro da própria função, quando a forma de compilação estiver em DEBUG:
Espero que seja útil!
Até+
Como sempre, usarei um exemplo simples para demonstrar o uso de Diretivas de compilação na simplificação de testes, porém existem outras formas de se fazer testes. Vamos lá!
A título de teste, criei uma função chamada "IsNumber", que basicamente verifica se um determinado char recebido como parâmetro é um número, segue a declaração da função:
function IsNumber( loChar: char ): boolean ;
Após isto, no evento "OnClick" de um botão qualquer, faço um teste:
procedure TfrmMain.btnIsNumberClick(Sender: TObject);
begin
showmessage( ifThen( IsNumber( '1' ), 'É um número', 'Não é um número' ) );
end;
// falei sobre ifThen neste post...
Porém existem situações muito mais complexas, que existem muito mais que um input, neste caso, seria muito trabalhoso ficar preenchendo campos e etc...precisamos testar a função o mais rápido possível dependendo do projeto. Para isso, podemos automatizar o teste, condicionando esta operação ao modo como a aplicação está sendo compilada: DEBUG ou RELEASE.
Veja como é a implementação da função "IsNumber":
function TfrmMain.IsNumber(loChar: char): boolean;beginresult := loChar in ['0'..'9'] ;end;
Agora, vou incluir o preenchimento do parâmetro "loChar" dentro da própria função, quando a forma de compilação estiver em DEBUG:
function TfrmMain.IsNumber(loChar: char): boolean;
begin
{$IFDEF DEBUG}
loChar := 'a' ;
{$ENDIF}
result := loChar in ['0'..'9'] ;
{$IFDEF DEBUG}
showmessage( ifThen( result, 'É um número', 'Não é um número' ) );
{$ENDIF}
end;Veja que coloquei a verificação de "Debug" em dois momentos. Para resumir, quando o projeto estiver em modo "Debug", não será necessário passar nenhum valor como parâmetro para a função "IsNumber", visto que internamente já existe a alimentação deste parâmetro.
Espero que seja útil!
Até+
Como obter a classe ancestral?
Durante a execução de um projeto surgiu uma dúvida: "Como saber qual a classe exatamente ancestral a que eu criei?"
Acredito que esta situação seja comum para muitos programadores, que assim como eu, estão nesta jornada.
Para mostrar a solução, vou usar um exemplo:
* Crio uma classe chamada "TNomeStringField", ela deriva de "TStringField", segue a declaração:
* Declaro um "objeto" do tipo TNomeStringField :
* Instancio o objeto de fato:
* Para obter o nome da class do objeto TNome, faça o seguinte:
* Para obter o nome da class exatamente ancestral à que eu criei:
obs: Veja que antes de obter o valor de ClassParent, fiz a verificação se esta propriedade era diferente de nil.
É isso!
Até+
Acredito que esta situação seja comum para muitos programadores, que assim como eu, estão nesta jornada.
Para mostrar a solução, vou usar um exemplo:
* Crio uma classe chamada "TNomeStringField", ela deriva de "TStringField", segue a declaração:
TNomeStringField = class( TStringField )end ;
* Declaro um "objeto" do tipo TNomeStringField :
varTNome: TNomeStringField ;
* Instancio o objeto de fato:
TNome := TNomeStringField.Create( self ) ;
* Para obter o nome da class do objeto TNome, faça o seguinte:
showmessage( TClass( TNome.ClassType ).ClassName ) ;
* Para obter o nome da class exatamente ancestral à que eu criei:
if TNome.ClassParent <> nil then showmessage( TNome.ClassParent.ClassName ) ;
obs: Veja que antes de obter o valor de ClassParent, fiz a verificação se esta propriedade era diferente de nil.
É isso!
Até+
quinta-feira, 8 de fevereiro de 2018
Explanação sobre a função IfThen
A função IfThen é útil quando deve-se exibir uma mensagem de acordo com o cenário!
É muito comum nos deparamos com situações em que temos que exibir uma mensagem ao usuário, de acordo com alguma informação obtida após determinado processamento, a fim de deixar o usuário ciente de alguma situação, exemplo:
if loMedia >= 7 then
begin
showmessage( 'O aluno foi aprovado!' ) ;
end else
begin
showmessage( 'O aluno foi reprovado!' ) ;
end ;
esta é uma forma bem comum de apresentar uma mensagem de acordo com algum dado. Porém, existe uma forma mais simples de fazê-lo. É através da função IfThen. Usando o exemplo assim, porém através da função IFThen, ficaria assim:
primeiramente declare a biblioteca StrUtils, na seção Interface, após uses.
showmessage( ifThen( loMedia >= 7, 'O aluno está aprovado!', 'O aluno está reprovado!' ) ) ;
Explicações:
A função IfThen tem os seguintes parâmetros:
- AValue: Boolean // Condição
- const ATrue: string // Retorno da função caso a condição seja TRUE
- AFalse: string = '' // Retorno da função caso a condição seja FALSE (Default é "Vazio")
ficando assim:
IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ''): string;
Espero que seja útil.
Até +
Como criar um ClientDataSet em runtime
Para quem quiser saber como criar um ClientDataSet em runtime!
Existe um velho pré conceito de que programadores RAD não sabem criar componentes em runtime, ou seja, apenas arrastam o componente "dataset" e soltam no form. Pode até ser muito usado, mas saibam que é possível fazer isso também em runtime, e vou explicar agora.
Primeiramente:
Declare na seção interface, após o uses a unit DBClient ;
Após isto, declare uma propriedade chamada FCDSItensVenda do tipo TClientDataSet, por exemplo:
TfrmMain = class(Tfrm)
private
FCDSItensVenda: TClientDataSet ;
public
procedure afterConstruction ; override ;
end;
Na sequência, no método afterConstruction, seguindo o exemplo acima, inclua as seguintes linhas:
procedure TfrmMain.afterConstruction;
begin
inherited;
FCDSItensVendas := TClientDataSet.Create( application ) ;
with FCDSItensVendas.FieldDefs do
begin
add( 'NumItem', ftString, 3 ) ;
add( 'Codigo', ftString, 13 ) ;
add( 'Descricao', ftString, 60 ) ;
add( 'Qtd', ftFloat ) ;
add( 'Vl.Unit', ftCurrency ) ;
add( 'SubTotal', ftCurrency ) ;
end ;
FCDSItensVendas.CreateDataSet ;
end;
Explicações:
FCDSItensVendas := TClientDataSet.Create( application ) ; // Aqui eu crio o objeto FCDSItensVendas
with FCDSItensVendas.FieldDefs do // aqui eu pré fixo o ponteiro na "lista de campos" do objeto FCDSItensVendas
add( 'NumItem', ftString, 3 ) ; // aqui eu crio um campo chamado "NumItem" do tipo "String" cujo tamanho é '3' (três).
FCDSItensVendas.CreateDataSet ; // por fim, monto a estrutura "DataSet", ou seja, instancio uma tabela em memória.
Espero que seja útil!
Até
quarta-feira, 7 de fevereiro de 2018
A SEFAZ do Ceará disponibilizou um emissor gratuito de MF-e
A SEFAZ-CE disponibilizou uma AC gratuita para empresas de pequeno porte!
Segundo a SEFAZ do Ceará, este AC é voltado para empresário de pequeno porte, porém o processo de ativação é o mesmo que outras empresas seguem.
* Link para download do aplicativo gratuito:
www.sefaz.ce.gov.br/content/aplicacao/internet/download/projetomfe/InstaladorACSefaz_01.03.21_windows.zip
Fontes:
http://www.sefaz.ce.gov.br/content/aplicacao/internet/noticias/enviados/noticia_detalhes.asp?nCodigoNoticia=822
http://cfe.sefaz.ce.gov.br/mfe/informacoes/downloads#/
Até +
Segundo a SEFAZ do Ceará, este AC é voltado para empresário de pequeno porte, porém o processo de ativação é o mesmo que outras empresas seguem.
* Link para download do aplicativo gratuito:
www.sefaz.ce.gov.br/content/aplicacao/internet/download/projetomfe/InstaladorACSefaz_01.03.21_windows.zip
Fontes:
http://www.sefaz.ce.gov.br/content/aplicacao/internet/noticias/enviados/noticia_detalhes.asp?nCodigoNoticia=822
http://cfe.sefaz.ce.gov.br/mfe/informacoes/downloads#/
Até +
SEFAZ do Ceará disponibilizou as Web Services do ambiente de Produção para emissão de NF-e 4.00
A SEFAZ-CE disponibilizou as WS para o ambiente de Produção (tpAmb=1)!!!
Para quem precisa, seguem os endereços:
* Autorização:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?WSDL
* RetAutorização:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?WSDL
* Inutilização:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?WSDL
* Consulta protocolo:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?WSDL
* Status do Serviço:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?WSDL
* Consulta de cadastro:
https://nfe.sefaz.ce.gov.br/nfe4/services/CadConsultaCadastro4?WSDL
* Recepção de evento:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?WSDL
Fonte: http://nfe.sefaz.ce.gov.br/pages/informacoes/web_services.jsf
Até+
Para quem precisa, seguem os endereços:
* Autorização:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?WSDL
* RetAutorização:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?WSDL
* Inutilização:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?WSDL
* Consulta protocolo:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?WSDL
* Status do Serviço:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?WSDL
* Consulta de cadastro:
https://nfe.sefaz.ce.gov.br/nfe4/services/CadConsultaCadastro4?WSDL
* Recepção de evento:
https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?WSDL
Fonte: http://nfe.sefaz.ce.gov.br/pages/informacoes/web_services.jsf
Até
terça-feira, 6 de fevereiro de 2018
Como instalar o Fortes report?
Este framework de relatórios é muito bom, principalmente para quem usa ACBr.
Vou mostrar como instalar o framework "Fortes report".
/* Vou considerar que você já tem algum SVN Client instalado em seu computador (TortoiseSVN, por exemplo) */
1º Passo: Crie um diretório em local da sua preferência, porém o nome do diretório tem que remeter ao Fortes reporte, exemplo: "FORTES" ou "Fortes_report" e etc...
2º Passo: Clique com o botão direito do mouse sobre o diretório recém criado, e então será exibido um pop up, nele você deve clicar em "SVN checkout" (no caso do TortoiseSVN) ;
3º Passo: Na janela "Checkout" que foi exibida, clique no campo "URL of repository:" e insira o seguinte endereço:
https://github.com/fortesinformatica/fortesreport-ce.git
e então clique em "OK" ;
Automaticamente será inicializado o processo de download dos arquivos referentes ao projeto "Fortes". Ao fim, clique em "OK" ;
4º Passo: Acesse o seguinte diretório: <Diretório "Fortes"> \ trunk; Execute o seguinte programa "frceInstall.exe".
Será exibida a janela "Instalador FortesReport Community Edition"
Clique em "Próximo"
Confira se a versão do Delphi está correta, próximo, clique novamente em próximo, clique em "Próximo" e novamente em "Próximo" ;
Clique em "Instalar" ;
Após algum tempo, se tudo estiver correto será exibida a janela informando "Pacotes compilados e instalados com sucesso! Clique em "Próximo" para finalizar a instalação", clique em "OK"
Após clicar em "Próximo", clique em "Finalizar"
Pronto, o Fortes está instalado em seu computador!
Até+
Vou mostrar como instalar o framework "Fortes report".
/* Vou considerar que você já tem algum SVN Client instalado em seu computador (TortoiseSVN, por exemplo) */
1º Passo: Crie um diretório em local da sua preferência, porém o nome do diretório tem que remeter ao Fortes reporte, exemplo: "FORTES" ou "Fortes_report" e etc...
2º Passo: Clique com o botão direito do mouse sobre o diretório recém criado, e então será exibido um pop up, nele você deve clicar em "SVN checkout" (no caso do TortoiseSVN) ;
3º Passo: Na janela "Checkout" que foi exibida, clique no campo "URL of repository:" e insira o seguinte endereço:
https://github.com/fortesinformatica/fortesreport-ce.git
e então clique em "OK" ;
Automaticamente será inicializado o processo de download dos arquivos referentes ao projeto "Fortes". Ao fim, clique em "OK" ;
4º Passo: Acesse o seguinte diretório: <Diretório "Fortes"> \ trunk; Execute o seguinte programa "frceInstall.exe".
Será exibida a janela "Instalador FortesReport Community Edition"
Clique em "Próximo"
Confira se a versão do Delphi está correta, próximo, clique novamente em próximo, clique em "Próximo" e novamente em "Próximo" ;
Clique em "Instalar" ;
Após algum tempo, se tudo estiver correto será exibida a janela informando "Pacotes compilados e instalados com sucesso! Clique em "Próximo" para finalizar a instalação", clique em "OK"
Após clicar em "Próximo", clique em "Finalizar"
Pronto, o Fortes está instalado em seu computador!
Até+
Como evitar produtos de compilação com nomes redundantes
Um exemplo clássico!!!!
Você criar um projeto server COM+, e no final o arquivo gerado fica com o seguinte nome:
"empresa.nomeprojeto.dll.dll"
esquisito né! ".dll.dll"
Para resolver isto é necessário fazer o seguinte:
Com o Delphi aberto, e seu projeto ou grupo de projetos, aberto, clique sobre o ícone do projeto que ao ser compilado gerado a '.dll' ou '.exe' de nome redundante.
Pressione simultaneamente as teclas CTRL + V.
Será exibida a janela do projeto.
Após a diretiva "{$R *.RES}", digite o seguinte "{$E ''}" // são dois apóstrofos, sem espaço.
Compile o projeto, e ao abrir o diretório configurado para receber o produto de compilação, verá que um novo produto foi gerado, desta vez com o nome alterado para:
"empresa.nomeprojeto.dll"
Obs: A diretiva $E tem como finalidade alterar a extensão do produto gerado no processo de compilação.
Até+
Você criar um projeto server COM+, e no final o arquivo gerado fica com o seguinte nome:
"empresa.nomeprojeto.dll.dll"
esquisito né! ".dll.dll"
Para resolver isto é necessário fazer o seguinte:
Com o Delphi aberto, e seu projeto ou grupo de projetos, aberto, clique sobre o ícone do projeto que ao ser compilado gerado a '.dll' ou '.exe' de nome redundante.
Pressione simultaneamente as teclas CTRL + V.
Será exibida a janela do projeto.
Após a diretiva "{$R *.RES}", digite o seguinte "{$E ''}" // são dois apóstrofos, sem espaço.
Compile o projeto, e ao abrir o diretório configurado para receber o produto de compilação, verá que um novo produto foi gerado, desta vez com o nome alterado para:
"empresa.nomeprojeto.dll"
Obs: A diretiva $E tem como finalidade alterar a extensão do produto gerado no processo de compilação.
Até+
quinta-feira, 1 de fevereiro de 2018
Incompatibilidade do TWebBrownser
Seu componente TWebBrownser não está exibindo o reCaptcha do Google no site da SEFAZ?
Para resolver este problema é necessário seguir estes passos:
* abra o regedit do Windows ;
* Vá até o seguinte caminho:
* Crie um DWORD com o nome exato do seu projeto, exemplo: "meuprojeto.exe" e atribua o valor hexadecimal ou decimal igual à '0' (zero):
Espero que seja útil para muitas pessoas.
Fonte: https://pt.stackoverflow.com/questions/81186/como-fa%C3%A7o-para-instalar-o-pacote-chromium-em-delphi
Até a próxima!
Para resolver este problema é necessário seguir estes passos:
* abra o regedit do Windows ;
* Vá até o seguinte caminho:
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
* Crie um DWORD com o nome exato do seu projeto, exemplo: "meuprojeto.exe" e atribua o valor hexadecimal ou decimal igual à '0' (zero):
Espero que seja útil para muitas pessoas.
Fonte: https://pt.stackoverflow.com/questions/81186/como-fa%C3%A7o-para-instalar-o-pacote-chromium-em-delphi
Até a próxima!
terça-feira, 30 de janeiro de 2018
Uma breve explicação sobre a estrutura do arquivo "VCard"
O que é o "VCard" e como ele é constituído?
O "VCard" nada mais é do que uma das formas de se exportar os contatos que você tenha em suas agendas por ai: Gmail, Whatsapp, Outlock e etc.
* O arquivo tem a extensão ".vcf" (abreviação de 'Virtual Contact File') ;
* Nele existem vários registros de contatos ;
* Os contatos são separados pelo seguintes divisores:
"BEGIN:VCARD"
Indica o início do bloco ;
"END:VCARD"
Indica o fim do bloco ;
* Dentro dos blocos, referentes a cada contato, no arquivo "VCard", existem outros campos
que indicam as propriedades dos contatos, vou listar os que encontrei até agora:
"VERSION:"
Indica a versão do padrão "VCard" gerado. A 3.0 é a mais utilizada (segundo wikipedia, kkkkkk) ;
"FN:"
Indica o nome da pessoa ;
"EMAIL;TYPE=INTERNET:"
Indica o email do contato ;
"TEL;TYPE=CELL:"
Indica o número do celular ;
Por hoje é isso pessoal.
Até mais!
quinta-feira, 4 de janeiro de 2018
Onde encontrar o projeto "CodeGear Socket Server"
Olá,
nesta breve postagem, tentando ajudar os companheiros de programação, venho informar o local onde está armazenado o projeto "CodeGear Socket Server", utilizado quando se trabalha com o socket no Delphi.
O projeto está no seguinte diretório:
<DRIVE> \ program files \ embarcadero \ Rad Studio \ x.x \ source \ win32 \ db.
Espero que tenha sido útil.
T+
nesta breve postagem, tentando ajudar os companheiros de programação, venho informar o local onde está armazenado o projeto "CodeGear Socket Server", utilizado quando se trabalha com o socket no Delphi.
O projeto está no seguinte diretório:
<DRIVE> \ program files \ embarcadero \ Rad Studio \ x.x \ source \ win32 \ db.
Espero que tenha sido útil.
T+
Assinar:
Postagens (Atom)
-
Este framework de relatórios é muito bom, principalmente para quem usa ACBr. Vou mostrar como instalar o framework "Fortes report...
-
Em alguns casos durante a programação é comum surgir a necessidade de incrementar o valor de uma determinada variável. Nestas situações é...