quarta-feira, 13 de fevereiro de 2013

Advantage Database 11.1


Foi lançado em dezembro de 2012 a versão 11.1 do banco de dados Advantage Database, de propriedade da Sybase Inc.


Eu, particularmente ainda uso a versão 8.10. Não façam isso!

Eu trabalho com esse componente desde 2006, devido a capacidade dele funcionar no windows e no linux.


TAdsStringField

Essa nova versão vem com uma correção a muito tempo esperada por mim, e imagino que muitos outros.

Ao portar um projeto do delphi, quem utiliza esse banco de dados tinha que manualmente alterar o tipo de campo TAdsStringField para TStringField.


Conclusão

Convido a todos a testar esse componente, que é um dos poucos que tem a caracteristica de ser cliente/servidor e tambem funcionar no modo local.

Para baixar o componente, click aqui.

Postem seus comentários sobre esse componente.


Até a proxima.





terça-feira, 12 de fevereiro de 2013

Dicas for lazarus - O retorno

Depois de 2 anos sem postar devido a vários contratempos, estou de volta.

As coisas não são faceis quando se trabalha sozinho, o que é o meu caso.

Pesquisar, escrever, postar, responder comentários, pode parecer tarefa simples pra alguns, mas pra mim nem sempre é possivel.

Muita coisa mudou de lá pra cá.

O lazarus avançou bastante, e agora funciona até no android.

Apesar de estar na versão 1.06, eu ainda uso a versão 0.9.30.4, por questão de compatibilidade com alguns componentes.

Estarei testando a partir de hoje a versão mais recente, postando nesse espaço minhas duvidas e soluções.

Espero com isso, colaborar com a comunidade lazarus e ajudar a melhorar ainda mais esta ferramenta de programação.

Abração a todos.

domingo, 26 de dezembro de 2010

Illegal unit name Calendar

Na postagem anterior sobre esse problema, eu recomendei renomear a unit Calendar e alterar todos os fontes que a utilizava.

Fazendo alguns testes para Windows Mobile, deu o mesmo problema com uma versão mais recente do lazarus.

Desta vez, ao invés de renomear a unit, eu fiz o seguinte:

Na unit Calendar.pp, exclui as seguintes linhas:

{
@abstract(Calendar component)
@author(Shane Miller)
@created(05 Dev 2001)
}

A partir dai, resolveu o problema de illegal unit name, mas deu outro erro:
"Search CalendarPopup, but found Calendar"

A unit Calendar.pp fica na pasta lazarus\lcl\ e a unit CalendarPopup na pasta -lazarus\lcl\forms

Então, alterei o arquivo fpc.cfg, acrescentei os path abaixo, na seção searchpath for units

-FuC:\lazarus\lcl
-FuC:\lazarus\lcl\forms

A partir dai, compilou normalmente.

Até a proxima.

domingo, 5 de setembro de 2010

illegal unit name Calendar

O lazarus é uma ferramenta em constante evolução, e por isso as vezes ocorre uns erros muito estranhos, bugs que parecem impossivel de resolver ou remediar.

Ontem baixei o snapshot revisão 27259 fpc 2.4.0. A instalação ocorreu normalmente.

O problema foi quando tentava instalar o pacote sqlite3dataset e deu o erro de illegal unit name Calendar.

Nunca tinha visto esse tipo de erro, então mudei o nome para calendar minusculo, tambem não resolveu.

Depois de muito pesquisar no google, não encontrei a solução para o problema. As vezes deve ser até coisa simples, mas eu não consegui resolver de forma elegante.

A solução que eu encontrei foi renomear a unit Calendar para Calendar2 (calendar2.pp).

Claro que tive que alterar todas as ocorrencias de Calendar para calendar2, mas o mais importante é que deu certo!

Se alguem está passando por esse problema, não desista, tenha paciencia e altere o nome da unit.

Se alguem tiver a solução correta para esse problema, por favor poste aqui para nosso conhecimento.

Até a próxima.

terça-feira, 20 de julho de 2010

Simulando um keybd_event

Nos meus programas em Delphi, algumas vezes, se fez necessário simular o pressionamento de uma tecla num TEdit que ainda não recebeu o foco.

Por exemplo:

procedure TFormPegaProdutos.DBGrid1KeyPress(Sender: TObject;
var Key: Char);
begin

//Testa se pressionou um tecla valida
if not (key in ['0'..'9','/',#13,#27,'A'..'z']) Then key:=#0;
if key=#27 then close;

//Testa se pressionou um letra
if (key in ['A'..'Z']) or (key in ['a'..'z']) Then
begin
//Abre um painel para digitacao do nome do item a pesquisar
. PanelPesquisa.Top:=80;
. PanelPesquisa.Left:=160;
. PanelPesquisa.visible:=True;
. Palavra1.setfocus;
. if (key in ['a'..'z']) Then Key:=chr(trunc(ord(Key))-32);
. keybd_event(trunc(Ord(Key)),0,0,0);
end;
if key in ['0'..'9'] Then
begin
. PanelVenda.Top:=80;
. PanelVenda.Left:=60;
. PanelVenda.visible:=True;
. ValorUni.Text:=FormatCurr('#0.00',ProTEMPP_VIS.AsCurrency);
. QTD.setfocus;
. keybd_event(trunc(Ord(Key)),0,0,0);
end;

...ou seja, na lista de itens (dbgrid1) o usuario pode abrir um painel de pesquisa de um novo item sem sair da lista, e ainda pode registrar uma venda do item, sem sair da lista, o que é, diga-se de passagem, muito prático.

Mas no lazarus não temos disponivel o keybd_event, então como resolver esse problema?

Criei uma simples procedure:

procedure keybd_event_on(EditControl:TEdit; var key: char);
begin
EditControl.Text:=key+' ';
EditControl.setfocus;
EditControl.SelStart:=1;
EditControl.SelLength:=1;
end;

Pronto!

Agora, posso continuar portando meus programas pro lazarus :-)
Não é por causa de um keybd_event que o projeto vai parar!

procedure TFormPegaProdutos.DBGrid1KeyPress(Sender: TObject;
var Key: Char);
begin

//Testa se pressionou um tecla valida
if not (key in ['0'..'9','/',#13,#27,'A'..'z']) Then key:=#0;
if key=#27 then close;

//Testa se pressionou um letra
if (key in ['A'..'Z']) or (key in ['a'..'z']) Then
begin
//Abre um painel para digitacao do nome do item a pesquisar
. PanelPesquisa.Top:=80;
. PanelPesquisa.Left:=160;
. PanelPesquisa.visible:=True;
. Palavra1.setfocus;
. if (key in ['a'..'z']) Then Key:=chr(trunc(ord(Key))-32);
. keybd_event(trunc(Ord(Key)),0,0,0);
. keybd_event_on(Palavra1,Key);
end;
if key in ['0'..'9'] Then
begin
. PanelVenda.Top:=80;
. PanelVenda.Left:=60;
. PanelVenda.visible:=True;
. ValorUni.Text:=FormatCurr('#0.00',ProTEMPP_VIS.AsCurrency);
. QTD.setfocus;
.//keybd_event(trunc(Ord(Key)),0,0,0);
. keybd_event_on(QTD,Key);
end;

O lazarus não é 100% compativel com o Delphi, mas ao depararmos com problemas como esse, não podemos desistir, sempre tem uma saida.

Seja livre!
Use lazarus/freepascal.

segunda-feira, 19 de julho de 2010

GERAOBJCODE - Simples gerador de codigo OOP

Pra quem esta começando na programação OOP, e não dispõem de nenhuma ferramenta auxiliar para geração de codigos, venho aqui disponibilizar uma ferramenta de minha autoria.

É um programa simples, mas que tem sido muito util pra mim.

GERAOBJCODE





Muito simples de usar, basta informar o nome da classe ou objeto, colocar as variaveis da classe/objeto na caixa codigo fonte do objeto e clicar em gerar propriedades e metodos.


Imagine que será necessário criar propriedades e metodos para os items abaixo:
Nome da classe: TObjetoTeste

Itens que compoem a nossa classe:




Codigo gerado pelo nosso GERAOBJCODE:








Criticas, elogios, deixem a sua mensagem.

Link para download dos fontes:
GERAOBJCODE

Até a próxima.

segunda-feira, 5 de julho de 2010

Build Lazarus com QT - problemas encontrados

Build Lazarus com QT no linux

A ide GTK2 está excelente, porem é muito lenta comparada com a IDE QT, por isso eu recomendo a todos aqueles que precisa de uma IDE mais agil que use o widget QT

Levando em conta que a solução a seguir foi o que resolveu pra mim. Eu uso o lazarus versão svn, e se encontra na pasta
/home/usuario/lazarus29-2svn/lazarus/

Quem instalou o lazarus a partir dos pacotes, normalmente o lazarus esta localizado em /usr/lib/lazarus.

Exclarecido esses pontos, continuemos.


Problemas encontrados

Mensagem de erro:

Unable to find file "osprinters.pas"

Solução:

Abra um terminal e localize a unit osprinters.pas:

no meu caso digitei:
find ~/lazarus29-2svn/lazarus -name "osprinters.pas"

Retornou:

/home/usuario/lazarus29-2svn/lazarus/components/printers/osprinters.pas

Agora abra o /etc/fpc.cfg

Acrescente o path de osprinters a seção searchpath for units

-Fu/home/usuario/lazarus29-2svn/lazarus/components/printers/


Mensagem de erro:

.../printers/osprinters.pas(47,8) Fatal: Can't open include file "qtprinters_h.inc"

Repita o mesmo procedimento, no terminal pesquise o arquivo com o find, e acrescente o path seção searchpath for includefiles de /etc/fpc.cfg assim:

-Fi/home/usuario/lazarus29-2svn/lazarus/components/printers/qt/


Agora é só:

Build LCL
Build IDE with packages

E pronto, problema resolvido.

Seja livre
Use lazarus!