quinta-feira, 16 de agosto de 2012

J3-FortesReport com Delphi XE2 Atualizado =)


Prezados,  atualizei hoje a questão do pacote compilável para Delphi XE2. Neste pacote está uma correção de um problema histórico do Fortes, que é a impressão de fotografias, dentre outros problemas. Ainda há muitas correções e melhoraias a fazer, como por exemplo deixar o código enxuto para o Delphi XE2. Abaixo as próximas alterações:
  1.  Preview melhorado.
  2.  Evento que permita manipular o Stream no final da geração do PDF.

Se você tiver alguma sugestão correção ou algum tipo de implementação, será bastante bem vinda. Entre em contato. Abaixo segue o link:


Atenciosamente,

Nelson Lima

segunda-feira, 13 de agosto de 2012

J3-FortesReport


Prezados,

É com muito prazer que estamos liberando alguns projetos que consideramos importantes para o desenvolvedor Delphi, e ao mesmo passo pedimos a colaboração da comunidade.
Dei inicio ao projeto J3-FortesReport, que é uma versão do Fortes Report mantida por mim, quem não conhece esse gerador de relatórios deveria conhecer é fantástico. Estamos buscando aperfeiçoar  atualizar seu código e buscar novas implementações.  Abaixo segue o  link para download:


Ainda não um “Project”  ou pacote definido, mas há muitos arquivos fontes. Caso alguém queira participar ativamente é só entrar em contato.

Abraços,
Nelson Lima

quarta-feira, 1 de agosto de 2012

TDBXDate To TDateTime


TDBXDate to TDateTime

Olá , se você está trabalhando com datas utilizando o TDBXDate e atribuindo diretamente no seu objeto que é tem uma propreidade do tipo TDateTime ou mesmo TDate, deve ter notado a que a data fica “maluca”.
procedure TFrmPrincipal.Button1Click(Sender: TObject);
var
  DBXCmd: TDBXCommand;
  DBXRdr: TDBXReader;
  dDta: TDateTime;
Begin
  DBXCmd := DM.DBXCon.DBXConnection.CreateCommand;
  try
    DBXCmd.Text := 'SELECT CAST(''NOW'' AS DATE) AS DATA' +
                         ' FROM RDB$DATABASE';
    DBXCmd.Prepare;
    DBXRdr := DBXCmd.ExecuteQuery;
    if DBXRdr.Next then
      dDta := DBXRdr.Value[0].GetDate;

    DBXCmd.Close;
    DBXRdr.Free;
  finally
    DBXCmd.Free;
  end;

  ShowMessage(FormatDateTime('dd/mm/yyyy', dDta));
end;

Esse exemplo clássico vai nos trazer algo assim:  1/08/3911 quando na realidade a data correta seria: 1/08/2012

Pois bem, para resolver esse problema criei uma função chamada de:
DBXDateToDateTime(_Data: TDBXDate): TDateTime;
Abaixo seque o código completo da minha UtilsClass que por sinal faz parte do meu novo FrameWork. Chamei minha classe de TJ3Utils e criei uma class function =) Segue:
{ TJ3Utils }
class function TJ3Utils.DBXDateToDateTime(_Data: TDBXDate): TDateTime;
var
  AuxData: TTimeStamp;
begin
  AuxData.Time := 0;
  AuxData.Date := _Data;
  Result := TimeStampToDateTime(AuxData);
end;

Então nosso atualizado ficará assim:
if DBXRdr.Next then
  dDta := TJ3Utils.DBXDateToDateTime(DBXRdr.Value[0].GetDate);


Espero que tenham gostado. Em breve tem mais.  =) Abraços,

 Nelson Lima