Um conhecimento só é válido quando compartilhado.

domingo, 11 de dezembro de 2011

31 Dias de RAD Studio XE2 Tutorias

Vídeos passo-a-passo sobre temas novos, incluindo desenvolvimento de aplicações 64-bit Windows, LiveBindings, desenvolvimento de aplicações móveis para iOS e Android, Windows e Mac desenvolvimento com uma base de código, estilos FireMonkey e muito mais.

quinta-feira, 29 de setembro de 2011

Ontem 28/09/2011, saiu o Update 1 do XE2, mal foi lançado e já temos 120 bugs e fixes de correções
Delphi XE2 Update 1, baixei a versão trial, e já encontrei outro bug não corrigido, ao criar um form novo herdando de outro, em uma aplicação VCL, ele tenta criar o form novo do tipo FireMonkey, e chega a fechar a IDE.


Bug Postado no QC

quarta-feira, 21 de setembro de 2011

Várias Versões do Delphi Instaladas

Para termos várias versões do Delphi instaladas em nosso computador, devemos fazer uma configuração simples para que não haja conflito entre as versões, buscando os caminho das versões antigas ou vice versa.

Passos:
1) Entre na IDE de cada Delphi instalado em sua maquina
2) Vá no menu Tools->Options-> Environment Variables,
3) Procure na lista "System Variables" a opção "Path" e selecione
4) Clique na opção "Add Override", será adicionado no quadro User Override uma opção Path
5) Selecione no quadro User Override, a opção Path que foi adicionada, clique em Edit e retire o path das outras versões, deixando somente os caminhos da versão que você estiver executando esse processo.

Depois de executar essa tarefa em cada versão, cada uma ao ser iniciada, irá sobrepor a variável PATH, não indo buscar mais nada, no path das outras versões do Delphi.

Até a proxima.

terça-feira, 13 de setembro de 2011

Delphi XE2 - LiveBindings


LiveBindings é baseado em expressões relacionais, chamado de expressões de ligação, que pode ser unidirecionais ou bidirecionais.
LiveBindings é também sobre objetos e controle de objetos de origem.
Por meio de expressões de ligação, qualquer objeto de origem pode ser vinculada a si mesmo (tornando-se fonte e objeto de controle) ou a qualquer outro objeto de controle, simplesmente definindo uma expressão de ligação, envolvendo uma ou mais propriedades dos objetos que você desejar vincular juntos.
Por exemplo, você pode fazer um ligação de um controle TEdit com um TLabel para que, quando as alterações da propriedade Text do TEdit aconteça, o Caption do TLabel automaticamente seja ajustado para o valor avaliado pela a expressão de vinculação.
Outro exemplo é a ligação de um controle de tracker para uma barra de progresso para que o progresso se eleva ou diminui à medida que você mover a barra.
Da mesma forma, você pode se conectar a bancos de dados, alterar uma ou mais propriedades de diferentes objetos, e assim por diante. Porque com LiveBindings, você pode até mesmo alterar as propriedades dos objetos que estão ligados a outros objetos que estão vinculados a um objeto de controle.

Video demonstrando o uso do novo recurso :


sábado, 9 de abril de 2011

TFields vs FieldByName

Olá caro leitor, começo te fazendo uma pergunta, você usa TFields em tempo de design ? Quando comecei a trabalhar com Delphi, comecei a usar TFields em tempo de design, no decorrer do tempo vi que os TFields em tempo de design, me dava muito trabalho para dar manutenção a eles, as vezes ter que mudar de tipo, tamanho, mascara, valor default, pois o mesmo TFields as vezes precisava ser adicionado no dataset, em vários pontos do sistema. Na época achei um forma de minimizar, colocando os datasets em um único datamodule e o herdando, foi uma solução que minimizou a dor minha de cabeça com manutenção. Uns anos depois, quis desenvolver uma aplicação multicamadas e multibanco, mas os TFields estavam la para me dar dor de cabeça novamente, porque ao adicionar os TFields no Delphi, alguns tipos são diferentes dependendo do banco de dados. Bom a solução foi adicionar os TFields via código (runtime), assim independente do banco de dados os TFields iriam ser adicionados no seu tipo certo, dependendo do banco que eu estava usando, dei até uma palestra sobre esse assunto em 2006 na Borcon (Borland Conferência), isso resolveu meu problema, alem de centralizar todos os parâmetros de cada TField, podendo ser aproveitado que qualquer parte de meu sistema, mas esse recurso esplêndido que consegui, tem para meu sistema um custo um pouco alto, não tão alto que não compense, mas tem, pois tive que usar em todo meu sistema "FieldByName('')", e isso, para quem já debugou o código do Delphi, sabe que ao chamar um FieldByName, o delphi faz um loop (for) para achar o campo pelo seu nome então imaginemos:
while not DS.eof do
begin
  DS.FieldByName('Campo1').AsInteger := DS.FieldByName('Campo1').AsInteger * 
                                        DS.FieldByName('Campo2').AsInteger;
end;
No código acima vemos, um exemplo até simples, do qual o Delphi terá que fazer três vezes o mesmo loop (for), agora imaginemos se essa tabela usada tiver uns 80,90 até 100 ou mais campos, multipliquem isso por três. Fazendo o que gosto de fazer, que é navegar pela NET, procurando exemplos, código, recursos etc.. sobre Delphi, descobri um post em um blog, o qual falava justamente sobre TFields vs FieldByName, não estou lembrado aqui nesse momento qual o link, mas no blog dizia que para resolver essa questão de poderíamos criar uma variável do tipo TField, para cada FieldByName assim:
var
Campo1: TField;
Campo2: TField;
begin
  Campo1 := DS.FieldByName('Campo1');
  Campo2 := DS.FieldByName('Campo2');
  while not DS.eof do
  begin
    Campo1.AsInteger := Campo1.AsInteger * Campo2.AsInteger;
  end;
end;

Dessa forma o loop (for) só será executada uma vez e não três, bom até ai MUITO bom já baixaria o custo a quase zero, mas ao ver código pensei, não da para ficar criando variáveis a cada ponto que precisar usar desse recurso, da veio a idéia de ter uma class como a mesma estrutura de cada tabela e cada propriedade ser do tipo TField assim:
type
  TDS = class
  private
    FCampo1: TField;
    FCampo2: TField;
  public
    property Campo1: TField read fCampo1 write Campo1;
    property Campo2: TField read fCampo2 write Campo2;
end;
...
Em seguida criar o link de forma automatizada, para eu não ter que ficar dando manutenção toda vez que adicionar um campo ou remover caso for preciso, é isso que irei mostrar para vez como fazer no meu próximo post. Abraço a todos e até la.

Baixe um demo no link meu link na Embarcadero http://cc.embarcadero.com/Author/55953

SAC Automação Delphi e Lazarus

SAC Automação Delphi e Lazarus
Assine nosso SAC Automação Delphi e Lazarus para ter suporte técnico especializado em desenvolvimento

Quem sou eu

Minha foto

Proprietário/Administrador de Empresa em TI (Tecsis Informática)
  • Autor dos projetos OpenSource ORMBr, e DBCBr
  • Autor dos componentes ACBrInstall, ACBrSped, ACBrPaf, ACBrInStore, ACBrDownload.

Total de visualizações

Postagem em destaque

ORMBr - Mapeamento objeto-relacional

Mapeamento objeto-relacional ( ou ORM, do inglês: Object-relational mapping ) é uma técnica de desenvolvimento utilizada para reduzir...

Todo os direitos reservados.. Tecnologia do Blogger.

Seguidores

Google+ Seguindores