VCL Style e Build Configurations no Delphi

Através deste artigo quero apresentar um novo recurso presente a partir da versão XE2 do Delphi, o VCL Style e sobre o recurso Build Configurations existente a partir da versão 2009 do Delphi.

Estrutura de organização dos diretórios no Linux

O Linux é projetado para rodar tanto em máquinas com bastante poder de processamento como em máquinas com configurações mínimas e baixo poder de processamento.

Como fazer um Extract MetaData com o IbExpert?

Vamos aprender a usar um recurso muito interessante da ferramenta IBExpert, o: extract metadata. Qual a utilidade dessa ferramenta?

Como desativar mensagem de expiração do Winrar

Se você usa o Winrar, um dos softwares mais utilizado para compactação de arquivos, então você já se deparou com aquela mensagem "chatíssima" de expiração.

Removendo senha de usuário no Windows

Acredito que alguém já deve ter passado pela desagradável situação de esquecer a senha do seu usuário do Windows, e pesou "Agora ferrou!". Pois é, aconteceu isso com um de nossos clientes, como resolver?


ClipaTec Informática

Receba novidades por e-mail. Digite seu e-mail abaixo e clique no botão "Cadastrar"

Delivered by FeedBurner

22 de agosto de 2018

Loop "Para ate Faca": Exercício Tabuada

loop laço para ate faca tabuada

Olá minha gente. Agora que já conhecemos as estruturas de repetição vamos praticar neste artigo, a estrutura de repetição "para ate faca", que é um laço iterativo. O exercício que vamos praticar, é bem simples e muito utilizado dentro dos ambientes acadêmicos, no qual, vamos desenvolver um algoritmo que entre com um determinado número que será informado pelo usuário, e em seguida, imprimimos na tela a tabuada do número digitado.

Utilizaremos o laço "para ate faca" para montar esta tabuada. A lógica é bem simples. O algoritmo será escrito em pseudocódigo (portugol) e a ferramenta didática utilizada para execução do mesmo será o visualg. O link para download se encontra no final do artigo.
Antes de iniciarmos o algoritmo, é importante ressaltar que, o laço para ate faca é um laço iterativo, que sabe o momento de parar por já ter definido a quantidade de vezes que um determinado trecho de código será repetido. Mas como ele vai controlar a quantidade de repetições que já foram realizadas? Por meio da variável de controle. Normalmente, chamamos esta variável de "I, J, K, Cont, Contador ou Controle", mas isso pouco importa, você pode dar o nome que você preferir, o que importa, é que esta variável seja do tipo inteiro, pois ela, será responsável por contar, controlar, a quantidade de repetições do laço. Deve ser inteiro porque não existe "meia repetição", então, jamais esta variável de controle pode ser do tipo real por exemplo. A cada repetição, esta variável de controle recebe um incremento de 1 (um) por padrão, ou seja, a variável de controle vai somando 1 (um) a cada iteração, até chegar no valor limite definido. Ao chegar no valor limite, o laço encerra a repetição, e o algoritmo segue executando as próximas linhas, caso haja.
O incremento pode ser definido no laço, caso não seja definido, por padrão é um, mas você pode dizer que o incremento seja de dois, três, etc. Agora vamos praticar. Analisando a proposta do exercício, o algoritmo precisa saber de qual número ele exibirá a tabuada, esta entrada de dados, será definida pelo usuário, então, o algoritmo deve solicitar ao usuário qual é este número. Neste exemplo, vamos trabalhar com tabuadas de números inteiro apenas.
Após o usuário informar o número que ele deseja imprimir a tabuada, o algoritmo deve guardar este número dentro de uma variável para ser utilizado posteriormente, então, vamos criar uma variável chamada "Numero" do tipo inteiro que armazenará o número digitado pelo usuário.
Como utilizaremos o laço para ate faca, então precisamos criar uma variável de controle, vamos chamá-la de "I", do tipo inteiro.
Agora pare, e pense, precisamos multiplicar o número digitado por zero, depois por um, dois até dez e mostrar o resultado de cada multiplicação.
Com base nisso, precisamos criar uma variável que irá calcular estas multiplicações, então, criaremos mais uma variável do tipo inteiro com o nome "Mult". Lembrando que o nome pode ser qualquer um de sua preferência, a minha dica é, sempre procure usar nomes bem claros e objetivos, para que, quando você olhar o algoritmo, você já consiga lembrar pra que server cada uma delas.

Agora vem a mágica do laço para ate faca, como precisamos multiplicar o número pela sequência de zero até dez, então já podemos notar que o laço para ate faca será propício, ele iniciará com zero e vai se repetir até dez, incrementando um a cada repetição, e dentro de cada repetição já calculamos a multiplicação e exibimos para o usuário. Fácil né? Segue o algoritmo:

Algoritmo "Tabuada"
// declaracao de variaveis
Var
   Numero, Mult, I: inteiro
Inicio
// ler numero digitado pelo usuario
   escreval("Informe a tabuada a ser exibida:")
   leia(Numero)
// multiplicar numero pela sequencia de zero ate dez
   para I de 0 ate 10 faca
      Mult <- -="" font="" i="" numero="">
      escreval(Numero, " X ", I, " = ", Mult)
   fimpara
Fimalgoritmo

Muito bem, como podemos observar, a cada repetição, a variável "Mult" lê o número digitado pelo usuário e multiplica por "I", sendo que, na primeira repetição o valor de "I" é zero, na próxima é um e assim sucessivamente até dez, em seguida, já imprimimos o resultado para o usuário. No final da execução, teremos a tabuada montada.
Qualquer dúvida, deixe seu comentário. Até o próximo.

Download

- Interpretado e editor de algoritmos VISUALG;

(Por Welinton Dias)

20 de agosto de 2018

Delphi: Função ParamStr

delphi paramstr parametros

Olá clipatequeiros. Neste artigo vamos entender a função "ParamStr" do Delphi.
Embora não muito utilizado, a passagem de parâmetros é muito útil quando precisamos chamar um programa passando algumas diretrizes ou informações relevantes para a execução do mesmo.
Isso acontece bastante quando se tem um aplicativo que chama outro por exemplo. Vamos imaginar a seguinte situação, onde temos um aplicativo desenvolvido em Java para enviar e-mail, e sua aplicação em Delphi, quando precisar enviar algum e-mail, chama este aplicativo em Java. Legal né, então, no momento em que o aplicativo Java for chamada, é necessário passar o e-mail do destinatário, o assunto e a mensagem propriamente dita, é aí que entra os parâmetros. Estas informações são repassadas ao aplicativo Java no momento da chamada, em linha de comando, o exemplo é bem didático, porém, perfeito para entender este recurso.
Este exemplo é interessante, porque, no momento em que o aplicativo Java for chamado, ele já tem os parâmetros necessários para poder enviar o e-mail, então, ele mostrará apenas uma barra de progresso "enviando e-mail..." automaticamente, dispensando a ação do usuário para clicar em um botão pra enviar por exemplo, isto, considerando que as informações do remetente já estejam configuradas no aplicativo Java.
Isso é muito interessante, porque podemos desenvolver pequenos aplicativos de apoio em outras linguagens e usar por meio de uma aplicação Delphi, apenas fazendo o uso de passagem de parâmetros.

Como funciona o ParamStr?

Parafraseando, no help e documentação do Delphi a respeito da função ParamStr, diz que ela retorna um parâmetro especificado da linha de comando CmdLine (nota 3) usada para chamar o programa atual por meio do seu índice ParamIndex (nota 1). Caso o índice seja inválido, como por exemplo, se o índice especificado for maior que o ParamCount (nota 2), isto é, um índice inexistente, ela retorna uma string vazia. Desta forma temos que, o índice 2 retorna o segundo parâmetro da linha de comando, o índice 3 retorna o terceiro parâmetro e assim sucessivamente, se passar um índice que não existe, é retornado uma string (texto) vazio. Acredito que com esta explicação até repetitiva, já deu pra entender esta primeira parte.
Por padrão, o ParamIndex 0 (zero), é reservado para o caminho do programa, ele representa o programa (executável) em si, portanto, não conseguimos atribuir valor a este índice, quando atribuímos algum parâmetro, ele sempre iniciará no índice 1.
Os parâmetros, são separados com um espaço em branco. Aí vem uma pergunta, e se precisar passar um valor que contenha espaço(s) em branco, como por exemplo, nomes de arquivos longos contendo espaço? Legal, no problem, basta passar o valor entre aspas duplas, com isso, ocorre um agrupamento de palavras e será interpretado como sendo o valor de um determinado parâmetro.

Notas

1 - ParamIndex

Refere-se ao índice especificado da linha de comando.

2 - ParamCount

Contabiliza e mostra a quantidade de parâmetros passados na linha de comando para o programa atual.

3 - CmdLine

Aponta para os argumentos da linha de comandos especificados ao chamar o programa, esta variável contém todo o texto da linha de comandos. Para acessar parâmetros individualmente, deve-se usar a função ParamStr.

(Por Welinton Dias)

8 de agosto de 2018

Algoritmo e lógica de programação - Estruturas de repetição (loop)

estrutura de repeticao loop

Olá clipatequeiros. Este artigo é voltado para os iniciantes em programação, que estão dando seus primeiros passos. Geralmente postamos coisas de nível médio e avançado, mas nosso objetivo é ajudar a todos, inclusive quem está começando agora, quanto mais programador melhor.
Vou abordar neste artigo a respeito das estruturas de decisão, também conhecidas por "loop" ou simplesmente laço de repetição. No desenvolvimento de software, estas estruturas são muito utilizadas. Em determinados momentos, precisamos repetir um determinado trecho de código (implementação) "n" vezes, é neste caso que entram as estruturas de repetição. Elas são muito úteis, até mesmo para reduzir códigos.
Podemos dividir as estruturas de decisão em dois grupos: iterativa e interativa. Uma letrinha a mais no nome, mas na prática, uma diferença considerável. Vamos ver um pouco sobre estes dois grupos de maneira bem resumida e direta (odeio enrolação, não leva a lugar nenhum e fica cansativo rsrsrs).
Praticamente, todas as linguagens de programação, disponibiliza três estruturas de repetição, são elas:

  • para ate faca
  • enquanto faca
  • repita ate


Digo "praticamente todas", porque desconheço alguma linguagem que não dê suporte a estas três estruturas, mas, vai que exista alguma por ai não é mesmo?

Estrutura de repetição iterativa (loop iterativo)

Dentro deste grupo, temos a estrutura de repetição, ou laço de repetição para ate faca.
Esta estrutura é utilizada quando já se tem o número de vezes definido que um determinado trecho de código será repetido. É dito iterativo porque dispensa a ação, interferência, interação do usuário para que o mesmo pare de se repetir, ou seja, ele vai se repetir até que o número de vezes definido seja satisfeito, dispensando a ação do usuário para pará-lo.
Vou apresentar uma situação simples, porém, vai te ajudar entender melhor. Imagine que um algoritmo precisa mostrar os números pares dentro de um intervalo de 1 até 10. Certo?
Note que já temos definido a quantidade de vezes em que este laço vai se repetir, isto é, dez vezes. Então este laço só vai parar após a décima repetição, não foi necessário o usuário intervir para parar a repetição, esta quantidade de vezes já foi predefino antes. Este laço é iterativo porque a cada repetição, a variável de controle do laço incrementa, adiciona, soma mais um.
Vejamos a sintaxe do laço para ate faca:

para "variavel_controle" de "valor_inicial" ate "valor_final" [passo "incremento"] faca
"sequencia_de_comandos"
fimpara

Onde:

"variavel_controle": é uma variável do tipo inteiro que vai controlar as repetições do laço;
"valor_inicial": definição do valor inicial para a variável_controle;
"valor_final": definição do valor limite para a variavel_controle;
"incremento": o valor a ser incrementado na variavel_controle;
"sequencia_comandos": parte do código (implementação) que será executada durante a repetição do laço;

Então, a variável de controle recebe um valor inicial para a contagem das repetições, e vai se repetir até que o valor final seja satisfeito, e, a cada repetição a variável de controle soma o valor do incremento. Este último, quando não passado, por padrão é sempre "um".
Em próximos artigos vamos trabalhar alguns algoritmos como exercícios práticos para entendermos melhor.

Estrutura de repetição interativa (loop interativo)

Dentro deste grupo, temos as estruturas "enquanto faca" e "repita ate".
Estas estruturas são utilizadas quando não temos previamente a quantidade de vezes que um determinado trecho de código irá se repetir. É dito interativo porque necessitada da ação do usuário para que o mesmo pare de se repetir. Essa interação do usuário vai ou não satisfazer uma condição de parada, desta maneira, quando tal condição for satisfeita o laço para de se repetir.
Imagine um algoritmo que cadastre nomes de pessoas, onde um menu será exibido ao usuário com duas opções: "Cadastrar" e "Sair". Sempre que o usuário escolher a opção "Cadastrar", o algoritmo pede para que o usuário digite o nome da pessoa, em seguida, o menu é exibido novamente. Percebe que, enquanto o usuário escolher a opção "Cadastrar", será necessário entrar com um nome a ser cadastrado, e quando, finalmente, o usuário escolher a opção "Sair", então, o laço para de se repetir, ou seja, a condição de parada do laço, é quando a opção escolhida for "Sair".
Essa é a diferença entre o laço iterativo e o laço interativo, este último, só para de se repetir, quando a condição de parada for satisfeita, neste caso, necessita-se da intervenção do usuário para isso. Então por que temos duas estruturas neste grupo?
Simples, o enquanto faca, o teste da condição de parada é feita no início, antes mesmo de entrar no laço, se o teste, ou expressão lógica, for satisfeita logo no início, então, o trecho de código dentro do laço nem chega a ser executado, já a estrutura repita ate, o teste da expressão lógica só é feito no final do laço, então, independente de tudo, o trecho de código dentro deste laço, sempre será executado pelo menos uma vez, ao chegar no fim, se a condição for satisfeita, o mesmo para, caso contrário, continua executando. Agora, cabe a você programador, analisar no seu dia a dia a necessidade do momento e escolher qual das duas estruturas interativas utilizar.
Vejamos a sintaxe do laço enquanto faca:

enquanto "condicao_de_parada" faca
"sequencia_de_comandos"
fimenquanto

Onde:

"condicao_de_parada": ou expressão lógica, representa o teste a ser realizado, se verdadeiro, o laço para, se falso, o laço continua executado. Esta expressão lógica é realizada a cada repetição, e deve ser do tipo booleana.

Agora, vejamos a sintaxe do laço repita ate:

repita
"sequencia_de_comandos"
ate "condicao_de_parada"

Neste caso, dispensa explicação, visto que é exatamente igual ao anterior, o que muda, é que o teste é feito no final do laço, e os comandos (repita..ate).
Também, faremos alguns algoritmos para praticar estas estruturas em próximos artigos, um grande abraço.

(Por Welinton J. Dias)

12 de maio de 2018

Cadastro Delphi POO + MVC + DAO - Camada View - Parte 6

delphi mvc poo camada view

Aooooo meu povo, finalmente chegamos ao penúltimo artigo da nossa série de cadastro Delphi POO + MVC + DAO. Estamos felizes por ter acendido uma pequena luz nessa escuridão, algumas pessoas tem interagido outras entraram em contato, e isso é muito gratificante. Neste artigo vamos finalizar as implementações da camada VIEW.
Sem perca de tempo, com o projeto aberto no Delphi, acesse a tela de cadastro de cliente, selecione a "StringGrid" e implemente o evento "OnDrawCell" assim:

delphi mvc poo camada view

Esta implementação apenas pinta os títulos das colunas da Grid, para ter um destaque visual, caso as descrições dos títulos das colunas não aparecer, acrescente esta linha após a linha 340:

Canvas.TextOut(Rect.Left, Rect.Top, Cells[ACol,ARow]);

Agora vamos implementar o evento "OnDblClick" da "StringGrid", este evento é acionado quando o usuário der um duplo-clique sobre algum registro, ele apenas chama o método "Detalhar":

delphi mvc poo camada view

OK, agora, implemente o evento "OnShow" do formulário de cadastro assim:

delphi mvc poo camada view

Simplesmente, ao abrir a tela de cadastro de cliente, o método "SetUp" será chamado, e as configurações básicas para o bom funcionamento da tela serão realizadas. 
Implemente o evento "OnKeyPress" da tela de cadastro desta maneira:

delphi mvc poo camada view

Este método verifica se a tecla "Enter" foi pressionada, caso sim, nós anulamos sua funcionalidade em seguida e chamamos a função "Tab", para que quando o usuário pressionar a tecla "Enter", ele consiga navegar entre os campos da tela.
Agora, vamos implementar os eventos "OnClick" dos seguintes botões:

Pesquisar

delphi mvc poo camada view

Novo

delphi mvc poo camada view

Detalhar

delphi mvc poo camada view

Excluir

delphi mvc poo camada view

Listar

delphi mvc poo camada view

Alterar

delphi mvc poo camada view

Gravar

delphi mvc poo camada view

Cancelar

delphi mvc poo camada view

Esta foi a parte mais simples, pois, apenas chamamos os métodos que já foram implementados nos botões. Desta maneira, finalizamos as implementações da camada VIEW, agora, no próximo artigo, vamos finalizar o projeto. Qualquer dúvida, só comentar, até o próximo, abraço.

Este artigo faz parte da série: CRUD Delphi POO + MVC + DAO;

(Por ClipaTec Informática)

11 de maio de 2018

Cadastro Delphi POO + MVC + DAO - Camada View - Parte 5

delphi mvc poo camada view

Olá clipatequeiros de plantão. Estamos em reta final desta série de artigos, e no artigo de hoje, vamos continuar implementando os métodos da camada VIEW. Com o projeto aberto no Delphi, implemente o método "Gravar":

delphi mvc poo camada view

Conforme vimos no início da parte 3 vamos usar o Field "FOperacao", o qual, uma de suas finalidades é nortear o método gravar, rapidamente explicando, quando o usuário clicar no botão "Novo", este campo recebe um valor de tipo enumerado "opNovo", e quando o usuário clicar no botão "Alterar", este campo recebe um valor "opAlterar", desta maneira, agora aqui dentro do método "Gravar", fazemos uma verificação, se o valor deste campo é "opNovo", então o método "Gravar" vai chamar o método de inserção, caso for "opAlterar", o método  de alteração será chamado.
Após o método Inserir ou Alterar for chamado, ao final da operação, se deu tudo certo, novamente chamamos o método de pesquisa para atualizar as informações.

Muito bem, agora implemente o método "Inserir":

delphi mvc poo camada view

Como você já deve estar habituado, não tem muito segredo, algumas linhas dispensa comentários e explicações. Basicamente um objeto do tipo "TCliente" é criado, e alimentado com as informações dos componentes que o usuário digitou, logo após, este objeto é enviado para a DAO por meio da Controller, onde as informações do mesmo será extraída e inserida na base de dados, se ocorrer algum erro, este erro é retornado dentro da variável "sErro" e exibida para o usuário como uma exceção.
Agora, vamos implementar o método que faz aquela mágica nos componentes para habilitar e desabilitar conforme a operação que está sendo realizada, então, mão na massa, implemente o método "HabilitarControles":

delphi mvc poo camada view
C
Como você percebeu, este método vai habilitar ou desabilitar os controles (TEdit, TButton, etc) conforme a operação (Inserção, Alteração ou Navegação). Sem segredos nénom? Qualquer dúvida, deixe seu comentário.
Ufa, calma que já estamos quase concluindo nosso projeto por completo, daqui sete artigos chegaremos ao fim (kkkkkkkkkk) brincadeira, faltam poucos artigos. Brincadeiras a parte, agora vamos implementar o evento "OnClick" do botão "btnCliente". Este botão, está no formulário do menu principal, então, acesse ele, dê um duplo-clique sobre o botão "Cliente" e implemente desta forma:

delphi mvc poo camada view

Este botão simplesmente cria o formulário de cadastro de cliente na memória e exibe para o usuário, e quando for fechado, o mesmo é liberado da memória. É importante ressaltar que, você precisa fazer o formulário principal enxergar o formulário de cadastro, para isso, pressione "Alt + F11" e selecione o formulário de cadastro de cliente na lista, deixe a opção "Implementation" marcada e clique no botão "OK". É o famoso "Use Unit". Para finalizarmos este artigo, volte para o formulário de cadastro de cliente, selecione a "StringGrid" e implemente o evento "OnSelectCell" da seguinte maneira:

delphi mvc poo camada view






Conforme o usuário seleciona um registro na "StringGrid", o código do mesmo é armazenado no campo "IdSelecionado", conforme você observou durante as implementações, este campo é usado durante as chamadas de alguns métodos, como o método "CarregarCliente" por exemplo.
Gente boa, assim terminamos mais um artigo, esperamos vocês no próximo artigo, um dos últimos desta série espetacular. Até lá. Tchauuu brigadoooo.

Este artigo faz parte da série: CRUD Delphi POO + MVC + DAO;

(Por ClipaTec Informática)

10 de maio de 2018

Cadastro Delphi POO + MVC + DAO - Camada View - Parte 4

delphi mvc poo camada view

Salve, salve galera. De volta a nossa série, no artigo anterior havíamos implementado alguns métodos, neste artigo, daremos continuidade nas implementações dos métodos. Para tal, abra o projeto no Delphi e implemente o método "CarregarCliente" da seguinte forma:

delphi mvc poo camada view

Nas linhas 157 e 158 declaramos nossos objetos da classe TCliente e TClienteController.
Nas linhas 160 e 161 criamos as instâncias desses objetos na memória e nas linhas 176 e 177 liberamos da memória após o uso.

Na linha 163, invocamos o método "CarregarCliente" da classe TClienteController, que por sua vez, vai chamar o método "CarregarCliente" da DAO. Note que este método pede um objeto do tipo TCliente que será preenchido lá na camada DAO, e o código do cliente, cujas informações serão buscadas na base de dados para preencher o objeto.
Da linha 164 a 174, apenas estamos lendo as informações que estão no objeto "oCliente" que foi preenchido anteriormente, e jogando nos componentes da tela, para que o usuário possa ver essas informações.

Agora, vamos implementar o método "Alterar:

delphi mvc poo camada view

Este método, conforme observado, vai ler as informações que estão nos componentes da tela que foram preenchidos pelo usuário e alimenta o objeto com estas informações. Feito isso, este objeto preenchido é passado para o método "Alterar" da "TClienteController", que vai direcionar para a DAO, onde as alterações serão persistida na base de dados, caso ocorra algum erro, o mesmo é retornado pelo método através do parâmetro do tipo variável "sErro", que é exibido pela exceção (raise Exception).
Agora, o método "Listar":

delphi mvc poo camada view

Este método simplesmente ativa a aba de pesquisa.
Implemente o método "Excluir":

delphi mvc poo camada view
Clique na imagem para ampliar e vê-la completo

O método excluir também é bem simples. Na linha 196, estamos verificando se nossa "StringGrid" possui algum registro, caso contrário, uma exceção é suscitada informando que a tabela está vazia, portanto, não há o que excluir.
Caso tenha algum registro selecionado, capturamos o código dele e repassamos para o método "Excluir" da "TClienteController" que fara o resto, como você já sabe.
Após a exclusão, apenas chamamos o método de pesquisa novamente, para atualizar a "StringGrid", se isso não for feito, embora o registro seja excluído ele continuará listado na tabela, e isso pode causar uma dúvida ao usuário, que vai pensar que o registro não foi excluído.
Muito bem, assim chegamos ao final de mais um artigo, aguardamos você no próximo para darmos continuidade, já estamos quase no final desta série, continue conosco, um grande abraço.

Este artigo faz parte da série: CRUD Delphi + POO + MVC + DAO;

(Por ClipaTec Informática)