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.
terça-feira, 20 de julho de 2010
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.
É 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!
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!
sábado, 3 de julho de 2010
FortesReport4Lazarus323
Comunico a todos que foi criado um novo projeto no sourceforge para o gerador de relatorios FortesReport4Lazarus
Esse projeto baseia-se na versão 3.23 do Fortes Report, mas com algumas melhorias e correções de bugs que foram feitas na versão 3.24 do Fortes4Lazarus:
.Modo draftfilter ok
.Exporta para html,pdf,excel
.Gera os relatorios mais rapidamente que na versão 3.24
A versão do Fortes4lazarus baseado na 3.24 está com um bug, que ainda não sabemos se é no Fortes4Lazarus ou na LCL, por isso recomendo a todos que voltem sua atenção para a versão 3.23.
Em breve estarei disponibilizando um projeto baseado na 3.24, que não finaliza, terminando a aplicação abruptamente, que é nosso bug, para que todos testem e deem sugestões.
O bug só ocorreu no windows, sendo que no linux o mesmo relatório funcionou normalmente.
Ainda não subi os fontes, mas em breve estarão disponiveis para todos.
O projeto Fortes4Lazarus precisa de contribuições para acelerar o desenvolvimento.
Se você é programador e tem um tempo livre, ajude a manter esses projetos, e assim fortalecer mais o nosso querido lazarus/freepascal.
Link para download da versão 3.23 no sourceforge:
FortesReport4Lazarus323
Seja livre
Use Lazarus/freepascal
Esse projeto baseia-se na versão 3.23 do Fortes Report, mas com algumas melhorias e correções de bugs que foram feitas na versão 3.24 do Fortes4Lazarus:
.Modo draftfilter ok
.Exporta para html,pdf,excel
.Gera os relatorios mais rapidamente que na versão 3.24
A versão do Fortes4lazarus baseado na 3.24 está com um bug, que ainda não sabemos se é no Fortes4Lazarus ou na LCL, por isso recomendo a todos que voltem sua atenção para a versão 3.23.
Em breve estarei disponibilizando um projeto baseado na 3.24, que não finaliza, terminando a aplicação abruptamente, que é nosso bug, para que todos testem e deem sugestões.
O bug só ocorreu no windows, sendo que no linux o mesmo relatório funcionou normalmente.
Ainda não subi os fontes, mas em breve estarão disponiveis para todos.
O projeto Fortes4Lazarus precisa de contribuições para acelerar o desenvolvimento.
Se você é programador e tem um tempo livre, ajude a manter esses projetos, e assim fortalecer mais o nosso querido lazarus/freepascal.
Link para download da versão 3.23 no sourceforge:
FortesReport4Lazarus323
Seja livre
Use Lazarus/freepascal
quinta-feira, 1 de julho de 2010
Nova versão do Fortes4lazarus
Estou disponibilizando a comunidade uma nova versão do gerador de relatorios Fortes4Lazarus.
Essa ferramenta é um fork, uma adaptação, da versão 3.23 do FortesReport para delphi.
Não deixem de informar os bugs, pois tenho pouco tempo para testar toda a funcionalidade dos componentes.
Criticas ou sugestões serão bem vindas.
Link para Download do pacote:
Fortes323forlazarus
Seja livre!
Use lazarus/freepascal.
Até a próxima.
Essa ferramenta é um fork, uma adaptação, da versão 3.23 do FortesReport para delphi.
Não deixem de informar os bugs, pois tenho pouco tempo para testar toda a funcionalidade dos componentes.
Criticas ou sugestões serão bem vindas.
Link para Download do pacote:
Fortes323forlazarus
Seja livre!
Use lazarus/freepascal.
Até a próxima.
Assinar:
Postagens (Atom)