sexta-feira, 7 de maio de 2010

Jogo da Velha - Parte 1

E aí galera!
Voltei depois de um bom tempo, e a partir desse post estarei mostrando o desenvolvimento de um jogo da velha em Delphi.
Quando fiz um jogo da velha no início do curso técnico, utilizei Visual Basic para fazer. Na época o resultado não foi bom, pois utilizei labels para "desenhar" os quadrados, e a lógica do código não ficou limpa.
Nesse jogo que farei agora, utilizando Delphi, não utilizarei nenhum objeto visual no formulário do jogo. Todas as marcações, tanto as linhas do tabuleiro como as jogadas serão marcadas utilizando o Canvas, que é o objeto que representa a área visual do Formulário e através do qual podemos desenhar no mesmo.
Para iniciar, vamos desenhar as linhas que marcam o tabuleiro no formulário. São quatro linhas, duas na horizontal e duas na vertical.
É importante definir um tamanho fixo para a largura e altura do formulário para não precisar readaptar o código a cada redimensionamento do formulário pelo usuário. Nesse exemplo estou utilizando 600 por 600 como dimensões do formulário.
Vamos agora ao código. O que faremos é um laço de repetição. Nele iremos desenhar as linhas do tabuleiro. Esse código será escrito no evento OnPaint do formulário.

Veja:

procedure Tfrmprincipal.FormPaint(Sender: TObject);
var
i:integer;
begin
for i:=1 to 2 do
begin
Canvas.MoveTo(i*200,0);
Canvas.LineTo(i*200,600);
Canvas.MoveTo(0,i*200);
Canvas.LineTo(600,i*200);
end;
end;

A cada passagem do laço, movemos o cursor do canvas para a posição x=i*200, ou seja quando i =1 o ponteiro em sua posição x será 200 e na segunda vez 400. E depois desenhamos uma linha dessa posição até a outra extremidade vertical. A posição i fica em 0 e depois na linha vai para 600 que é a última posição vertical.
Após isso invertemos, movendo o ponteiro para y=i*200 para desenhar as linhas horizontais.
Lembrando que quando falamos de posições x e y é só se lembrar de gráficos cartesianos para servir de referência.

Por esse post é só.Nos seguintes seguiremos com nosso jogo...

Abraços.

sexta-feira, 16 de abril de 2010

A Armadilha dos componentes DBAware

Todo desenvolvedor Delphi já deve ter utilizado e provavelmente 90% ainda utilizam os famosos componentes DBAware do Delphi. Esses componentes são diretamente ligados a um dataset e facilitam a vida de quem desenvolve. Porém essa facilidade e inútil no longo prazo.
Utilizando DBAware, todo o controle da inserção de dados no Dataset fica a cargo do Delphi e sua VCL, isso acaba gerando perda de performance e insegurança.
Por isso, para um controle mais efetivo, o ideal é utilizar componentes Standard e enviar as informações ao banco em transações combinadas com comandos SQL.
Fica a dica aos Delpheiros.
Até a próxima!

terça-feira, 30 de março de 2010

Projeto ACBr

Para os Delpheiros, a vida é encontrar soluções para automação comercial. Ponteiros, objetos, e outros detalhes inerentes a outras linguagens não fazem parte da rotina do Delpheiro.
Automação comercial significa ter de controlar estoque, balanços de caixa e agora, com a nova legislação vigente, encontrar formas do aplicativo interagir com as impressoras fiscais e emitir a famigerada Nota Fiscal Eletrônica.
É claro que a regra geral do "business" implica em que, encontrando solução para algo, o desenvolvedor apenas disponibilize o que encontrou mediante compensação financeira. Nada mais justo, afinal ninguém vai gastar tempo de trabalho e depois liberar geral para quem quiser.
No desenvolvimento relativo a NFe e Impressoras fiscais, várias empresas oferecem soluções e cobram por isso, virou um grande negócio devido a exigência da legislação em se ter no sistema esses quesitos.
E nessa área, um projeto vem surpreendendo: ACBr. O ACBr é uma iniciativa de programadores Delphi que montaram um conjunto de bibliotecas e rotinas para serem utilizadas na automação comercial. Até aí não seria novidade, mas ocorre que o projeto é Open Source. Isso mesmo, qualquer pessoa pode utilizar e modificar o projeto a vontade, sem nenhum custo.
Já tive a oportunidade de utilizar o ACBr e posso dizer que é muito bom. Mas o melhor mesmo foi a iniciativa dos caras de fazerem isso.
Deixo aqui registrado meus parabéns a todos os programadores responsáveis por esse grande projeto. Valeu galera!

sexta-feira, 19 de março de 2010

Criando Janelas

Falei em meu primeiro post que em Delphi não dava para se fazer muita cois aque valesse a pena.
Continuo achando isso, mas apenas para não dizerem que sou preconceituoso, segue um código que cria uma janela de mensagem, para que não seja necessário utilizar o já famoso showmessage:

Classe da janela:

type
TMsgwindow=class(TForm)
private
fBtnok:TButton;
fLabelmessage:TLabel;
fMessage:string;
procedure Custombtnokclick(Sender:TObject);
public
procedure Create(sMessage:string);
end;

Implementação das funções:

procedure TMsgwindow.Create(sMessage: string);
begin
fMessage:=sMessage;
//Setando propriedades da janela
Self.BorderStyle:=bsDialog;
Self.Color:=clMoneyGreen;
Self.Position:=poOwnerFormCenter;
Self.Caption:='Mensagem';
Self.ClientHeight:=100;
Self.ClientWidth:=300;

//Setando propriedades do botão
fBtnok:=TButton.Create(Self);
fBtnok.Parent:=self;
fBtnok.Top:=50;
fBtnok.Left:=120;
fBtnok.Caption:='OK';
fBtnok.OnClick:=Custombtnokclick;

//Setando propriedades da label
fLabelmessage:=TLabel.Create(Self);
fLabelmessage.Parent:=Self;
fLabelmessage.Alignment:=taCenter;
fLabelmessage.Font.Size:=12;
fLabelmessage.Font.Style:=[fsBold];
fLabelmessage.Top:=20;
fLabelmessage.Left:=40;
fLabelmessage.Caption:=fMessage;
end;

procedure TMsgwindow.Custombtnokclick(Sender: TObject);
begin
Self.ModalResult:=mrOk;
end;


Chamando a janela:

procedure Showmsg;
begin
try
msgwindow:=TMsgwindow.CreateNew(Application.owner);
msgwindow.Create('Aviso');
msgwindow.ShowModal;
finally
FreeAndNil(msgwindow);
end;
end;

Quem diria.Delphi com classes! pois é...
É isso galera.Bons códigos ae!

sexta-feira, 26 de fevereiro de 2010

Return- Concentração e Disciplina

E aí pessoal?
Três semanas fora e estou de volta.
Nos últimos anos, talvez nos últimos 7, para ser mais exato, a vida de quem é entusiasta da programação ficou um tanto confusa.E por que digo isso?
Pesquisando sobre o mundo da programação a uns vinte, vinte cinco anos, reparei que existiam poucas alternativas de ferramentas voltadas para essa área, além de existir uma extrema especialização de quem trabalhava com programação.
Porém os tempos mudaram.Hoje existem inúmeras ferramentas voltadas para o desenvolvimento de software. Qual o problema? O grande incoveniente é que os iniciantes e até mesmo pessoas mais experientes acabam tendo a vontade de se "especializar" em diversas áreas. Isso gera o problema da dispersão de objetivo.
Determinadas ferramentas são fáceis de aprender em seu conceito (Delphi por exemplo) porém em geral ferramentas que facilitam o aprendizado são ruins e acabam dando a ilusão aos incautos que aprender alguma linguagem ou ferramenta de qualidade também será fácil. Com isso, o que antes era um programador mediocre em Delphi passa a ser mediocre em outra linguagem também, como C++, Java, etc...
Outra coisa que geralmente quem estuda programação é qual ferramenta será mais rentável. Isso é o começo do fim. O recém iniciado em programação opta por algo levando em conta apenas o lucro e esquece qualidade. Mais um para a lista de medíocres...
Aprender uma lingugem ou ferramenta de qualidade requer disciplina, e é impossível ter disciplina em várias coisas ao mesmo tempo. Por isso, programadores que optam por aprender diversas ferramantas visando lucro, facilidade, sucesso, enfim, estão fadados ao fracasso.
Se você está começando no mundo da programação e lendo esse post, uma dica: Escolha uma linguagem e se dedique a aprender somente ela. Ao final, quando você tiver um conhecimento amplo dessa linguagem, aí sim pense em aprender outras.
Ter disciplina e concentração em qualquer área não é fácil, mas compensa ao final. Pergunte para um vestibulando que passou em um grande vestibular se não valeram a pena todas as horas de dedicação aos estudo para chegar lá. Você acha que ele irá respopnder que não? Improvável.
Galera é isso, abraços e até mais!

sexta-feira, 5 de fevereiro de 2010

Sobre o Delphi

E ae pessoal? Tranquiliz?
Não pretendo falar muito de Delphi nesse espaço, embora sempre que tiver algo que ache interessante sobre essa ferramenta irei postar.
Na época que a programação era console, estilo MS-DOS, nenhum programador precisava se preocupar com programação visual. Porém veio o Windows e suas janelas e a partir desse ponto todo desenvolvedor passou a ter de ser "desenhista" também. Só que para "desenhar" janelas no Windows, o programador tem de conhecer as API's necessárias para isso.
Foi nesse cenário que surgiu o Delphi. Essa ferramenta tornou a programação visual para Windows extremamente produtiva, pois contém em sua biblioteca padrão, a chamada VCL, todas as classes para a criação de janelas e demais componentes visuais do Windows. Isso tornou essa ferramenta muito popular.
Só que essa popularidade trouxe um sério problema: Programadores começaram a aprender programação em Delphi, sem atentar para um detalhe: Montagem de aplicativos em Delphi, apenas a montagem, não é programação. Isso criou uma geração de programadores medíocres, que nem sequer sabem o que é uma classse, um ponteiro, um handle de janela...Enfim conceitos básicos na programação.
É claro que a culpa da mediocridade não é do Delphi, e sim dos programadores que se especializaram em clicar e arrastar ao invés de procurar fazer manualmente certas rotinas que são importantes no aplicativo.
Delphi é uma grande ferramenta que auxilia bastante quando precisamos criar aplicações comerciais de forma rápida, porém toda a facilidade trouxe um incoveniente: A VCL gera erros que não podemos precisar onde e nem porque surgiram. Fora outros problemas.
Enfim, não falarei muito de Delphi porque fora o clique e arraste não há muita coisa a se mostrar quando trabalhamos com Delphi. Em geral coisas interessantes feitas em programação exigem que se façam as rotinas de uma forma mais "manual", e Delphi definitivamente não foi feito para isso.
Abraços e até a próxima!

terça-feira, 2 de fevereiro de 2010

No Início

Nada mais justo para começar do que contar como entrei nessa barca (furada?? rs) da programação.
No final de 2007, como me faltavam opções do que fazer, resolvi fazer o vestibular para a escola técnica aqui de Avaré. Só haviam três opções de cursos: Adiministração, Nutrição e Informática.
Na época optei por informática por ser o curso, que, na minha opinião, teria o conteúdo mais prático que teórico. A prática que estava imaginando era a manutenção de computadores. Embora tivesse ouvido falar por alto de Java, programação era uma coisa que eu não imaginava que existisse.
Acabei passando e quando entrei no curso, primeiro dia os professores nos explicaram qual eram o objetivo do curso: Desenvolver sistemas comerciais.
No começo, até uns dois meses após o início das aulas, não gostava nem um pouco de programação.Porém uma coisa precisa ser dita: Eu e ninguém ali no curso conhecia a verdadeira programação. Na época as linguagens que estavámos estudando eram pascal para as aulas de lógica e Visual Basic para prática em desenvolvimento de sistemas. Para mim tuddo muito chato.
Foi então que resolvi dar uma olhada em um livro sobre C++, que até aquele momento eu não sabia nem que existia.
Porém foi a partir desse livro que conheci a verdadeira programação: Ponteiros, alocação dinâmica, heap, contato mais próximo com o hardware e é claro a parte que na época mais me chamou a atenção: Orientação a Objetos. No livro, o autor iniciava com uma aplicação de 6 página s de código na função main utilizando programação estruturada, e aos poucos ia convertendo a aplicação para object oriented. Ao final do livro, a função main de 6 páginas estava reduzida a algo em torno de 7 linhas! A partir daquele momento passei a estudar C++, o que faço até hoje.
Esse foi o início, nos posts seguintes explicarei porque tenho ressalvas com relação ao Delphi, apesar de considerá-lo uma grande ferramenta.
Até mais!