segunda-feira, 13 de outubro de 2008

0

DUG-SP - Delphi Users Group São Paulo

Salve Galera!

É com muita alegria que estamos começando as operações do DUG-SP (http://www.dug-sp.com).
 
 Temos uma lista na internet também .
 
 
 Como estamos começando, estamos fechando as parcerias para as reuniões 
 que a principio serão bimestrais com um evento de hands-on também, 
 esses eventos serão definidos mas sem uma obrigação periódica.
 
 A agenda será publicada com antecedência no próprio site (Que é feito em Delphi).
 
 Ainda existem funcionalidades que não implementamos e o layout como 
 era de se esperar é aquele...feito por programadores..risos.
 
 Mas começamos as operações e isso que importa agora..se formos esperar 
 estar tudo 100% não começaríamos nunca.
 
 Na lista tem uma enquete sobre o melhor dia para a reunião bimestral. 
 O evento de hands on será sempre aos sábados de 09:00 as 18:00.
 
 
 Vamos sempre fazer pesquisa sobre o assunto a ser abordado nas 
 reuniões bimestrais e tentaremos sempre definir uma pauta anual e 
 contaremos com todos os participantes para estarem compartilhando 
 conhecimento em nossas reuniões. E periodicamente tentaremos marcar um 
 "Botequim do programador" e tentar alcançar cidades ao redor da 
 capital também. Mas vamos tentar, o certo é que as reuniões estarão 
 acontecendo na capital.
 
 Estaremos publicando todas as informações operacionais do DUG na lista e 
 nos site. A agenda de eventos do DUG estará somente no site (http://www.dug-sp.com). 
 No site teremos mais funcionalidades a medida que fizermos manutenção e 
 formos evoluindo a engine dele.
 
 Abraços!!!

quinta-feira, 11 de setembro de 2008

1

Simular a nova propriedade HintText do Delphi2009

Olá Pessoal,

Fiquei muito entusiasmado com os novos recursos e componentes da VCL, e um deles que é de muita utilidade é a nova propriedade HintText presente no TEdit, ela permite que você defina um texto padrão a ser exibido no Edit quando a propriedade text não tiver nenhum valor.

Bom, como eu sei que nem todos podem migrar imediatamente e desfrutar desse novo recurso, resolvi demonstrar como é possível simular o HintText utilizando qualquer versão do Delphi.

Veja o exemplo:

unit uFormPadrao;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;

type
TFormPadrao = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure TextHintOnEnter(Sender: TObject);
procedure TextHintOnExit(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;

var
FormPadrao: TFormPadrao;

implementation

{$R *.dfm}

Const
DefaultColor: TColor = clBlack;

procedure TFormPadrao.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TEdit then
begin
TEdit(Components[i]).OnEnter := TextHintOnEnter;
TEdit(Components[i]).OnExit := TextHintOnExit;
TextHintOnExit(TEdit(Components[i]));
end;
end;
end;

procedure TFormPadrao.TextHintOnEnter(Sender: TObject) ;
begin
if Sender is TEdit then
begin
if TEdit(Sender).Text = TEdit(Sender).Hint then
TEdit(Sender).Text := EmptyStr;
TEdit(Sender).Font.Color := DefaultColor;
end;
end;

procedure TFormPadrao.TextHintOnExit(Sender: TObject) ;
begin
if Sender is TEdit then
begin
if TEdit(Sender).Text = EmptyStr then
begin
TEdit(Sender).Text := TEdit(Sender).Hint;
TEdit(Sender).Font.Color := clGray;
end;
end;
end;
end.

Para que todos os forms tenham a funcionalidade você pode criar um form Padrao e utilizar a herança para fazer o trabalho para você.

Veja o nosso exemplo funcionando:

Bom a única observação é que na hora de utilizar esse valor (seja para gravar no banco ou apenas exibir ao usuário) você deve verificar se o text é igual ao hint, se estiver igual significa que Text está vazio.

É isso ai! um grande abraço a todos.

quarta-feira, 10 de setembro de 2008

0

Delphi Tour 2009

     Pessoal, hoje tive o prazer de participar do Delphi Tour 2009. E posso afirmar que a nova versão está repleta de grandes novidades. Dentre elas, as que mais me chamaram a atenção foram:

  • Build Configuration
  • Generics
  • Métodos Anonimos
  • Novos DataSnap (Esse em especial está um show)  
   Além é claro de 100% de suporte a UNICODE e novos componentes da VCL (destaque para o Ribbon Controls). 

   Já está disponível para donwload a versão trial, então vale apenas baixar e conferir pessoalmentes todas essas novidades.

Vamos lá pessoal. Delphi 2009 na cabeça!

terça-feira, 2 de setembro de 2008

4

Algorítimo para validação de CNH

Olá comunidade,

Hoje resolvi disponibilizar um algoritmo para a validação de CNH, essa função já contempla os dois modelos de CNH. Aproveitem!


function ValidaCNH(cnh: string): Boolean;
function valida_new_cnh(cnh: String): Boolean;
var
Soma, Conta, Dv, Digito, i: Integer;
CnhN: String;
NumerosIguais: Boolean;
begin
Result := False;
NumerosIguais := True;

CnhN := FormatFloat('00000000000', StrToFloat(trim(cnh)));
Soma := 0;

{Validando se todos o números são iguais}
for i := 1 to length(CnhN) - 1 do
if CnhN[1] <> CnhN[i] then
NumerosIguais := False;

if NumerosIguais then
Exit;

for i := 1 to length(CnhN) - 2 do
Soma := Soma + (StrtoInt(CnhN[i]) * (i + 1));

Conta := (Soma div 11) * 11;
if (Soma - Conta) < 2 then
Dv := 0
else
Dv := 11 - (Soma - Conta);

Digito := StrToInt(CnhN[10]);

if Digito = Dv then
Result := True;
end;

function valida_old_cnh(cnh: String): Boolean;
var
Soma, Conta, Dv, Digito, i: Integer;
CnhN: String;
NumerosIguais: Boolean;
begin
Result := False;
NumerosIguais := True;;

CnhN := FormatFloat('000000000', StrToFloat(trim(cnh)));
Soma := 0;

{Validando se todos o números são iguais}
for i := 1 to length(CnhN) - 1 do
if CnhN[1] <> CnhN[i] then
NumerosIguais := False;

if NumerosIguais then
Exit;

for i := 1 to length(CnhN) - 1 do
Soma := Soma + (StrtoInt(CnhN[i]) * (i + 1));

Digito := StrToInt(CnhN[9]);
Conta := Soma mod 11;

if Conta = 10 then
Conta := 0;

if Digito = Conta then
result := True;
end;
begin
result := (valida_new_cnh(cnh) or valida_old_cnh(cnh));
end;



Bom eu testei com algumas CNH's e ela funcionou na boa, se tiverem problema me avisem.

Abraço a todos.

sexta-feira, 29 de agosto de 2008

0

Delphi Tour 2009



Pessoal, o momento está chegando, dia 10 de setembro de 2008 em São Paulo é o dia em que vamos conhecer a próxima geração das melhores ferramentas de desenvolvimento do planeta!.

Já tenho acomanhado alguma novidades e posso garantir que essa versão está repleta de novidades.

Eu já fiz aminha inscrição, não vou perder isso por nada nesse mundo. Vejo vocês lá!

Abraço a todos.

quinta-feira, 28 de agosto de 2008

3

Importar um arquivo delimitado de forma prática

Pessoal tenho recebido alguns pedidos para demostrar como importar de forma prática um arquivo delimitado.
Então resolvi publicar aqui uma forma de se trabalhar na importação desse tipo de arquivo de forma simples e rápida.
Obviamente essa não é a única forma e talvez nem seja a melhor, mas é aquela que me atende nos meus projetos,
portanto quem tiver algum outro meio que julgue prático fique a vontade para deixar o comentário. Primeiro quero explicar o que será feito, depois codificamos. Imagine um arquivo delimitado por ";" (ponto-e-virgula)

0001;CRISTIANO MARTINS ALVES;28;MASCULINO
0002;ALESSANDRA AMARAL;37;FEMININO

Vemos nesse exemplo que podemos obter Linhas e Colunas, então a ideia é: Primeiro extraimos e linha e depois, extraimos as colunas dessa linha.
Podemos então utilizar 2 TStringLists para nos ajudar nessa tarefa, um chamado de linhas e outro de colunas. Depois percorremos o StringList de linhas e
extraimos as colunas, "jogando" no outro StringList. Ou Seja o que esta em linha assim:

0001;CRISTIANO MARTINS ALVES;28;MASCULINO
vai parar em coluna assim:
CRISTIANO MARTINS ALVES
28
MASCULINO

Dessa forma fica fácil manipular essa dados no LtringList, veja o código


var
Linhas, Colunas:TStringList;
i,j:integer;
begin
Linhas := TStringList.Create;
Colunas := TStringList.Create;
try
Linhas.LoadFromFile('C:\MeuArquivo.txt'); //Carregando arquivo
for i := 0 to Pred(Linhas.Count) do
begin
{Transformando os dados das colunas em Linhas}
Colunas.text := StringReplace(Linhas.Strings[i],';',#13,[rfReplaceAll]);
for j := 0 to Pred(Colunas.Count) do
begin
{ Aqui você faz alguma coisa como colocar num Edit
No Meu caso aqui para exemplificar vou apenas mostrar num ShowMessage}
ShowMessage('Valor "'+Colunas.Strings[j] + '" da Linha '+IntTostr(i+1) +
' Coluna '+IntToStr(j+1));
end;
end;
finally
Linhas.Free;
Colunas.Free;
end;


É isso ai pessoal!. A única observação importante, é que se o arquivo for muito grande, coisa de mais de 150.000 linhas, vale apenas ler direto do disco (com TextFile) ao invez de colocar num StringList. Mas nesse código mudaria apenas o primeiro StringList.

quarta-feira, 27 de agosto de 2008

0

A CodeGear anunciou no último dia 25 o Delphi 2009. Eu estou muito empolgado com esse lançamento, são muitas novidades principalmente com relação a VCL que traz novos componentes com um visual perfeito para quem gosta do Windows Vista e o DataSnap que está recheado de novos recusrsos, atendendo ai a pedidos de todos nós.

Agora é só aguardar a liberação da versão trial que deve sair em breve.

Segue um ScreenShot para dar uma água na boca da galera.

sábado, 26 de julho de 2008

0

Preview Tiburón

No próximo dia primeiro às 11h (horário de Brasília), a CodeGear/Embarcadero fará um evento on-line para apresentar um preview do Tiburón (Delphi) e C++ Builder. Vale apena conferir, segue alguns tópicos do que será bordado no preview:

- Novos componentes da VCL
- Novos recursos da linguagem
- Novo DataSnap

As inscrições podem ser feitas pelo site: http://latam.codegear.com/br/tiburonpreview

Vamor participar galera!

domingo, 18 de maio de 2008

0

Bate papo com CEO da CodeGear Jim Douglas e CEO da Embarcadero Wayne Williams

Olá pessoal, venho trazer boas notícias, depois de uma semana de muita especulação acerca do nosso futuro (comunidade delphi), será promovido no próximo dia 22, um bate papo com Jim Douglas e Wayne Williams Ceo's da CodeGear e Embarcadero, e os membros da comunidade CodeGear.
Essa é a hora de tirarmos todas as nossas dúvidas, portanto não percam tempo! façam a pré-inscrição no link http://borland.interwise.com/borland/iSeminar/RN1890/ e mandem suas perguntas.

As perguntas podem ser feitas (em inglês) antecipadamente envindo para o e-mail do David I davidi@codegear.com com o assunto "Question for the CEOs community chat"

É isso pessoal, vamos participar!

Abraço a todos

quarta-feira, 7 de maio de 2008

3

Embarcadero Technologies® Compra Code Gear

Olá amigos,

Nesta quarta feira, dia 07 de maio de 2008, li uma notícia que a principio me deixou preocupado, a noticia da conta de que a Embarcadero tecnologies estava acertanto a compra de ativos com a Borland Software Corporation para adquirir sua divisão CodeGear. Imediatamente entrei em contato com o meu amigo Bruno Lichot (CodeGear Product Evangelist), que imediatamente me posicionou dos fatos.
Logo, o que no inicio era uma preocupação, virou motivo de festa. Com essa "mudança", a Embarcadero passa a ser o maior fornecedor independentes de plataforma para o design, o que torna a nossa IDE mais sólida do que nunca.

Veja a carta de David I à Comunidade de Desenvolvedores CodeGear

quarta-feira, 19 de março de 2008

0

Aprendendo com os Mestres

Pessoal essa semana encontrei um material muito bom, que é o materia do CodeRage II realizado em novembro de 2007, este que é um evento parecido com o que tivemos aqui (Delphi Day OnLine), tem um material de primeira linha só com feras como Marco Cantu, Nick Rodges e Cia, os vídeos, claro, estão todos em inglês mas vejo isso como uma oportunidade para praticarmos! rsrs

Ai segue o Link e espero que todos disfrutem dessa dica!

http://video.codegear.com/CodeRageIIArchives/

Abraço a todos!

domingo, 20 de janeiro de 2008

0

Mini Cidade Delphi Brasil

Pessoal, essa semana eu criei a mini cidade Delphi Brasil, a ideia de criar essa mini-cidade é ver o quanto a comunidade delphi no Brasil é grande, quanto mais pessoas clicarem no link mais a cidade crescerá, e isso nos dará um "dimensão" do tamanho da comunidade. Lá existe uma espécie de mural! deixem um recado pra comunidade lá!, vamos mostrar como a comunidade é grande!
Veja como está a cidade hoje:



http://delphibrasil.myminicity.com/ - Entrar na Cidade
http://delphibrasil.myminicity.com/ind - Criar uma Indústria

Vamos fazer a cidade crescer.

terça-feira, 15 de janeiro de 2008

4

DataSnap Dinâmico

Pessoal, gostaria de dar destaque para um artigo que saiu na edição 47 da Active Delphi, esse que é uma espécie de "repescagem" para queles que não tiveram a oportunidade de ir na Borcon 2007. É o artigo do nosso amigo Marcos Barreto (mrbar2000 da lista NDDV).
O cara conseguiu revolucionar o que já era uma revolução, que é o desenvolvimento n-tier, mas de forma dinâmica. Confesso que no inicio imaginei que seria mais dispendioso, e que perderia o desenvolvimento RAD, mas quando vi a implementação das classes, percebi que é muito simples tanto a implementação quanto a manutenção.

Veja quais são as vantagens dessa técnica:



  1. Não precisamos mais ficar nos aborrecendo com tanta Query e Provider espalhados pelo RDM.
  2. Não é necessário se preocupar mais com a trabalheira dana em criar RDM's filhos e ter que configurar a TypeLibrary para que os SharedConnections enxerguem os RDM's filhos. (essa é melhor de todas rsrs, pelomenos pra nós)
  3. Consumo de memória reduzido em 90% ou mais.
  4. Facilidade na migração dos componentes de acesso a dados (já que é tudo dinâmico).
  5. Facilidade em mudar a técnologia de acesso.
  6. RN's (Regras de negócio) bem encapsuladas.
  7. Facilidade de modulariação do Servidor de Aplicação

Além do artigo, uma ótima dica também, é baixar o material da Borcon que pode ser encontrado no link http://cc.codegear.com/Item/25225

Parabéns Marcos!


quarta-feira, 2 de janeiro de 2008

2

Evitando Lookup's

Olá pessoal, para aqueles que utilizam campos lookup's para exibir num DBGrid a descrição de uma chave estrangeira, resolvi postar aqui um exemplo utilizando uma técnica que visa evitar esse tipo de campo, melhorando e muito na performance da sua aplicação. Vale a pena dar uma conferida.

Trata-se de uma tela de pedidos/vendas, onde o usuário insere os produtos utilizando o próprio DBGrid, recuperando a descrição do produto utilizando um JOIN entre as tabelas, a parti dai, basta adicionar os fields e alterar todas as ProviderFlags do TField do campo "externo" para false, para que ele não entre na montagem do updade.

Clique aqui para baixar o exemplo