| Últimas 20 atualizações de Marcelo Fernandes |
|
|
Olá pessoal, neste artigo abordarei sobre a utilização do Dunit um framework em vem junto com o Delphi que ajuda a fazer teste unitário.
Bem o conceito de Teste unitário surgia da ideia do ken beck em suas praticas de XP,no Delphi já existia o projeto Dunit desde 2002 e foi incorporado no Delphi na versão 2010.
Mas vamos ao que interessa imagina a seguinte telas
Figura 1. Layout Inicial
Figura 2. Incluir dois Cachorros.
Figura 3. Incluir três Aves.
Figura 4. Selecionando
Temos um RadioGroup com dois valores, sendo quando selecionar algum destes valores sera modificado o valor do combobox e quando clicar no botão selecionar ele mostrar no label o valor escolhido do combobox.
Listagem 1: Criar o nosso Teste
TestTForm1 = class(TGUITestCase)
protected
procedure SetUp; override;
procedure TearDown; override;
published
procedure Hookup;
end;
Como sabemos o Setup e o tearDown é executado a cada teste para que o nosso teste não seja tão custoso criar e destruir o formulário.
Listagem 2: Criar um Suite
TForm1Setup = class(TTestSetup)
private
FForm1 : TForm1;
protected
procedure SetUp; override;
procedure TearDown; override;
end;
[/co
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
O PHP desde do seu lançamento evoluiu bastante passou de um linguagem de script para um linguagem para desenvolver sistema robusto na web, a partir do php 5 introduziu um novo modelo de orientação objeto que foi
completamente reescrito, permitindo um desempenho melhor e mais vantagens. Mais para que possa aproveitar todo recurso de um linguagem precisamos de um editor eficaz e produtivo.
O NetBeans é um IDE gratuito e de código aberto para desenvolvedores nas linguagem Java, C, C++, PHP, Groovy, Ruby, entre outras a IDE é executado em muitas plataformas, como Windows, Linux, Solaris e MacOS, além
de fornecer aos desenvolvedores ferramentas necessárias para criar aplicativos profissionais.
Podemos contar com diversas features dento da IDE do NetBeans entre elas podemos destacar algumas,que agiliza o nosso desenvolvimento em php, sendo elas:
Refatoração Renomear e Renomeação instantânea
A refatoração, é possível alterar o nome de um tipo utilizando a refatoração Renomear, a Renomeação renomeia todos os elementos do escopo.

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Podemos incrementar nossa class helper, Tdataset, for in, acrescentando mais um elemento: as variants.
Vamos usar variants para incrementar nossos for in, para isso vamos acrescentar recursos como métodos e propriedades,e invés de nosso enumerador retornar um índice ele retornará uma variant assim podemos acessar suas propriedades, usando da
seguinte maneira:
data.First_Name
Com a class helper será a responsável de retornar a nossa variant adequada, para isso precisamos modificar para GetCurrent retornar uma variante invés o número do registro.
Além disso, precisamos criar uma class que herde TInvokeableVariantType e sobrescrever alguns métodos.
type
TVarDataRecordType = class(TInvokeableVariantType)
public
procedure Clear(var V: TVarData); override;
procedure Copy(var Dest: TVarData; const Source: TVarData; const Indirect: Boolean); override;
function GetProperty(var Dest: TVarData; const V: TVarData; const Name: string): Boolean; override;
function SetProperty(const V: TVarData; const Name: string; const Value: TVarData): Boolean; override;
end;
Para que economizamos memória, vamos criar somente uma instância depois criarmos record para armazenar os dados da variante.
type
TVarDataRecordData = packed record
VType: TVarType;
Reserved1, Reserved2, Reserved3: Word;
DataSet: TDataSet;
Reserved4: LongInt;
end;
Este nosso record é uma forma simplificada da TVarData record declara
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
A Embarcadero nos últimos lançamentos do Delphi vem acrescentando em cada versão recursos que a borland/codegear deixaram a muito a desejar, destes recursos o que mais me chamou a atenção foi a implementação do "for in" que deixa o nosso código mais elegantes. Alem disso agora nos permite "extender" uma class sem a necessidade de fazer herança, como se fosse um "puxadinho",neste artigo vou demonstrar que com um pouco de criatividade podemos ter uma nova visão de trabalhar com o nosso TDataset. Em nosso dia a dia costumamos fazer muitas interação em nossos TDataset:
dataset.First;
while not dataset.EOF do
begin
//Acesso aos Fields
dataset.Next;
end;
E Que tal usamos assim:
for data in dataset do
begin
//Acesso aos Fields
end
Assim conseguimos eliminar pelo menos 2 linhas de código,mais para conseguimos usar o for in necessitaríamos de um enumerador que infelizmente o TDataset não tem, então vamos implementar o nosso.
type
TDataSetEnumerator = class
private
FDataSet: TDataSet;
FCounter: Integer;
function GetCurrent: Integer;
public
constructor Create(ADataSet: TDataSet);
destructor Destroy; o
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
No Capitulo 4 do livro Código Limpo do Robert C. Martins começa com a seguinte frase: "Não insira comentários num código ruim, reescreva-o" - Brian W. kernighan e P.J. Plaugher, fazendo uso das palavras de Martins, comentários são maus necessários, pois ainda não conseguimos expressar nossa intenção de uma maneira que não precisaríamos de comentários. No Delphi, existe duas maneira de comentar. Comentários em bloco e linhas de comentários, comentário de linhas utilizamos o símbolo "//" desta maneira o compilador ignora toda a linha a partir de onde se encontra o símbolo.
var i, j: integer
...
i: = 0; / / j: = 5
...
// Showmensage("Ola Mundo");
Já nos comentários em blocos existe duas maneiras utilizando os símbolos {} e (* *), lembrando que devemos utilizar em pares os símbolos. Porém muitas vezes temos alguns problemas com os grandes blocos de comentários, pois o Delphi não permite alinhar os mesmos. Além disso, muitas das vezes encontramos no nosso código diretivas de compilação que começam com "{$" e podem tem comentários no meio de nosso código, sendo que o Delphi quando achar o primeiro símbolo final } ou *) ele acaba fechando o seu comentário, por isso devemos ter muito cuidado ao comentar nossos códigos. Porém a minha intenção não é dizer as formas que o Delphi tem de comentar um código. Os comentários e para compensar o nosso fracasso em expressa
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Em seu livro Código Limpo Robert C. Martin, dedica um capitulo só para aborda sobre tratamento de erro, trabalhar com entradas de dados que podem estar errado, dispositivos podem falhar. Podemos afirmar que se uma coisa pode dar errado, ela vai dar errado e quando ocorre, nós como programadores somos responsável por certificar que nosso código faça o seja preciso fazer com eficiência e eficácia. O tratamento de erro é um recurso muito importante, tanto para o usuário como para nós desenvolvedores. Mas não basta só tratar o erro, temos que tratar o erro com elegância e estilo. Normalmente temos o costume de criar flags de erro ou retornar código para que o chamador possa verificar, como o código abaixo ilustra.
procedure Logar
begin
if (FUsuario.Login <> Emptystr) then
begin
ValidaUsuario(FUsuario);
if (FUsuario.Ativo) then
begin
GravaSessionUsuario(FUsuario);
CarregaConfiguracao(FUsuario);
end
else
begin
Showmensagem(" Usuario nao esta Ativo)
end
end
else
Showmensagem(" Login em branco ")
end.
O problema desta abordagem que nossa função "logar" que acumula responsabilidade e não deixa o chamador tomar uma decisão sobre o erro lançado para o usuário, refactorando para uma bordagem "código limpo" podemos fazer da seguinte maneira:
procedure logar;
begin
Try
doLogar
except on E: EControlUsuario do
ShowMessage(E.Message);
end;
end;
procedure doLocar;
begin
ValidaUsuario(FUsuario);
GravaSessionUsuario(FUsuario);
CarregaConfiguracao(FUsuario);
end;
Bem, como podemos observar o código fica mais claro, isso porque as duas preocupações que estavam no primeiro código, o algori
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
No nosso dia a dia de desenvolvimento sempre temos algumas tarefas rotineiras e repetitivas, pensando nestas tarefas sugiram diversas ferramentas para automatizar esses processos de baixar fontes de repositórios, copiar, criar pastas, compilar, compactar ... a lista de tarefas é imensa. Sempre tivemos ferramentas para ajudar o desenvolvedor no seu dia a dia como por exemplo: o "Make, essa ferramenta é um utilitário que compila automaticamente programas e bibliotecas do arquivo fonte através da leitura de arquivos denominados Makefiles, que especificam como obter o programa de destino.", com o passar do tempo foi surgindo diversas outras ferramentas similares escritos em diversas linguagens e plataformas uma destas ferramenta e o Apache Ant. Para quem não sabe o próprio Delphi utiliza uma dessas ferramentas para gerenciar o processo de compilação que é o MSBuild, por isso a minha proposta e mostrar que podemos melhorar nosso dia a dia com ferramentas disponíveis. Bem inicialmente você terá que instalar o Apache Ant, atualmente está na versão 1.8. Após a instalação você deverá instalar também o plugin do MSBuild para o Apache Ant(os arquivos dproj sao script do msbuild).
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|

Integrando Aplicações Delphi com JavaScriptPor Marcelo Fernandes,Marcos George
Bem pessoal, neste artigo
mostarei alguns dos fantásticos recursos do dephi: como se pode interagir com
suas aplicação web. Principalmente nos dias de hoje em que as aplicações web estão
ganhando cada vez mais espaço no mercado, é importante entender como interagir
e usar todo o poder do javascript, e como sua aplicação win32 feitas em delphi
podem se beneficiar desta tecnologia.
Quais as vantagens
Nossas aplicações acessando recursos de web site e até mesmo interagindo com eles. Um exemplo
prático disso seria uma aplicação utilizando os maravilhosos recursos do Google
maps.
Um exemplo prático
Bem, vamos trabalhar
diretamente com as API do Google maps.
- Crie uma aplicação normal
no Delphi
Agora, vamos ta utilizar o componente TWebBrowser da paleta internet, temos que
adicionar a uses MSHTML para termos acesso às interfaces para manipular o HTML e os
objetos dele.
- Coloque um componente
TWebBrowser no Form;
- No evento OnShow do
formulário coloque o seguinte:
procedure
TfrmPrincipal.FormShow(Sender: TObject);
begin
WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)
+ 'google.html');
end;
- Bem, no meu caso eu criei
um arquivo de HTML que contem as API’s e chamadas de função de javascript
para que o Delphi possa chamar.
- Adicione um TEdit e um TButton e no evento OnClick do Button1 fazemos
assim :
procedure TfrmPrincipal.Button1Click(Sender: TObject);
Begin
with WebBrowser1.Document as
IHTMLDocument2 do
parentWindow.execScript('showAddress("' + edBuscar.Text +
'")', 'javascript')
end;
Isto fará com que o nosso WebBrowser1
chame e execute esta função javascript
que esta dentro do nosso HTML.
function
showAddress(address) {
if (geoCoder) {
geoCoder.getLatLng(
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
| |
|