quarta-feira, 29 de julho de 2009

Usando o lazarus com QT widget

(English Version at the end of page)

Esta dica esta obsoleta. A partir da versão 0.9.28 a Qt vem configurada perfeitamente.

Apos varias tentativas, descobri com fazer funcionar perfeitamente(ou quase) o lazarus com a maravilhosa biblioteca Qt (versao 4.5.1)

Screenshot:




Pra quem não sabe, a QT foi disponibilizada sob a licença LGPL, tornando-se assim uma das melhores opções de trabalho no linux, senão a melhor.

Esse procedimento foi realizado no ARCHLINUX

.Baixar o arquivo
bin-qt4pas-V1.70_Qt4.5.0.tar.gz ou
bin64-qt4pas-V1.70_Qt4.5.0.tar.gz
..dependendo da arquitetura da maquina

descompactar:
tar -zxvf bin-qt4pas-V1.70_Qt4.5.0.tar.gz

dois arquivos serão descompactados:
libqt4intf.so
qt4.pas

Após descompactar, o arquivo libqt4intf.so deve ser copiado nas seguintes pastas:
/usr/lib
/usr/lib/lazarus/lcl/interfaces/qt

Copiados esses arquivos, entre na pasta /usr/lib/lazarus/lcl/interfaces/qt

#cd /usr/lib/lazarus/lcl/interfaces/qt

Duas tarefas a fazer nessa pasta:
.renomear o arquivo qt4.pas ja existente
mv qt4.pas qt4.pas.old

.alterar o arquivo qtdefines.inc
acrescentar a linha:
{$define USE_QT_44}

Em seguida entre na pasta /usr/lib/lazarus/lcl/units/i386/ e crie uma pasta qt

#cd /usr/lib/lazarus/lcl/units/i386/
mkdir qt
chmod 0777 qt

Na minha maquina, não era possivel compilar a ide, sempre dava erro de unit não encontrada

Alterando o arquivo /etc/fpc.cfg, inclui a seguinte linha na seção
# searchpath for units and other system dependent things
-Fu/usr/lib/lazarus/ideintf/

A LCL Qt tem um bug no linux, não aparece o botão fechar do form, de qualquer form até mesmo da ide, o que traz um grande desconforto pro desenvolvedor.
No meu caso, resolvi esse problema da seguinte forma:

Localize a unit qtwsforms.pp

Abra a unit e localize: TQtWSCustomForm.CreateHandle

Apartir da linha 153, deve aparecer o seguinte codigo:

if not (csDesigning in TCustomForm(AWinControl).ComponentState) then
begin
UpdateWindowFlags(QtMainWindow, TCustomForm(AWinControl).BorderStyle,
TCustomForm(AWinControl).BorderIcons, TCustomForm(AWinControl).FormStyle);
end;

altere para:

{$IFDEF LINUX}
UpdateWindowFlags(QtMainWindow, TCustomForm(AWinControl).BorderStyle,
[biSystemMenu,biHelp], TCustomForm(AWinControl).FormStyle);
{$ELSE}
UpdateWindowFlags(QtMainWindow, TCustomForm(AWinControl).BorderStyle,
TCustomForm(AWinControl).BorderIcons, TCustomForm(AWinControl).FormStyle);
{$ENDIF}

.Salve as modificações

Pra recompilar o lazarus, entre em Tools->Configure Build Lazarus
Marque Build All
Selecione o widget qt (beta)
Clique em Build

Após concluir a compilação
marque Build IDE with Packages
Clique em Build

Se tudo tiver certinho, deve recompilar o lazarus com o widget QT, que apesar de ter alguns bugs, dá um resultado final muito mais bonito.
Em breve estarei postando aqui os bugs que eu encontrar

Até a próxima

English Version

Using lazarus with QT widget

After many attempts, I discovered with making to perfectly function (or almost) lazarus with the wonderful Qt library (version 4.5.1)
To who does not know, the QT was under license LGPL, becoming thus one of the best options of work in linux, or best.

This procedure was carried through in the ARCHLINUX

Download the archive bin-qt4pas-V1.70_Qt4.5.0.tar.gz or bin64-qt4pas-V1.70_Qt4.5.0.tar.gz .like your architecture of your pc.

to unpack:
tar - zxvf bin-qt4pas-V1.70_Qt4.5.0.tar.gz
two archives will be unpacked:
libqt4intf.so
qt4.pas

After to unpack, the archive libqt4intf.so must be copied in the following folders:
/usr/lib
/usr/lib/lazarus/lcl/interfaces/qt

Copied these archives, it enters in the /usr/lib/lazarus/lcl/interfaces/qt folder

#cd /usr/lib/lazarus/lcl/interfaces/qt

Two tasks to make in this folder:
to.rename the existing archive qt4.pas already
mv qt4.pas qt4.pas.old

to change the archive qtdefines.inc
to add the line:
{$define USE_QT_44}

After that it enters in the
/usr/lib/lazarus/lcl/units/i386/ folder and it creates a folder qt
#cd /usr/lib/lazarus/lcl/units/i386/
#mkdir qt
#chmod 0777 qt
In my case, it was not possible to compile IDE, always gave not joined error of unit
Modifying the /etc/fpc.cfg archive, it includes the following line in the section
# searchpath will be units and to other system dependent things
- Fu/usr/lib/lazarus/ideintf/

The LCL Qt has one bug in linux, does not appear the close button of form, of any form even though of IDE, what it brings a great developer discomfort.
In my case that, I decided this problem of the following mode:
.locate unit Qtwsforms.pp
.Open unit and it locates: TQtWSCustomForm.CreateHandle
Near the line 153, must appear the following code:

if not (csDesigning in TCustomForm(AWinControl).ComponentState) then
begin
UpdateWindowFlags(QtMainWindow, TCustomForm(AWinControl).BorderStyle,
TCustomForm(AWinControl).BorderIcons, TCustomForm(AWinControl).FormStyle);
end;

change to:

{$IFDEF LINUX}
UpdateWindowFlags(QtMainWindow, TCustomForm(AWinControl).BorderStyle,
[biSystemMenu,biHelp], TCustomForm(AWinControl).FormStyle);
{$ELSE}
UpdateWindowFlags(QtMainWindow, TCustomForm(AWinControl).BorderStyle,
TCustomForm(AWinControl).BorderIcons, TCustomForm(AWinControl).FormStyle);
{$ENDIF}


It saves the modifications
To compile lazarus, enters in Tools-> Build Lazarus configures


.Selects widget QT(beta)
.It marks Build All
.Click in Build
.After to conclude the compilation marks "Build IDE with Packages"
.Click in Build

If everything will right, must re-compile lazarus with widget QT, that although to have some bugs, of the much more pretty final resulted one. Soon I will be post here bugs that to find.

Best regards

Fortes Report para lazarus vs 0.3.5.6

FortesReport4Lazarus
Versão 0.3.5.6
(English version at the end of page)
Screenshots

Windows XP


Linux with LCL Qt widget


running under Wine:


Report page 1

Printer setup

Report page 2



Para baixar clique aqui

To download latest version click here

Para fazer:

.Visualizar relatorio em tempo de design
.Corrigir bug que impede visualizar componentes no linux ao recarregar o projeto (obs: no windows carrega perfeitamente)
.Corrigir bug do RLPreview
.Implementar giro nos componentes RLAngleLabel e RLBarcode

Historico

28/07/2009:

.O Draftfilter esta funcionando perfeitamente no modo padrão do FortesReport

O modo padrão é configurado automaticamente quando insere o componente Draftfilter no form, sendo o padrão o seguinte:
WINDOWS
DeviceKind :=dkPrinterPort;
DevicePath :='prn';

Linux
DeviceKind :=dkProgram;
DevicePath :='lpr -P%p %f';

27/07/2009:
Unit RLPrinters
.Correções para as funções:

LoadPrintersList no linux
GetPrinterDevice no linux

23/07/2009:
No linux, nao precisa mais da biblioteca libborqt-6.9.0-qt2.3.so
.Draftfilter:
.Retirada todas as chamadas de scanline, antes dependente da dll, que teve mal funcionamento.
Obviamente, em alguns casos deve retornar algum valor estranho. Nos meus testes funcionou normalmente
.Eu consegui usar o DraftFilter de duas maneiras:
1- DeviceKind:=dkFilename;

linux-> DevicePath:='/dev/lp0';
windows-> DevicePath:='prn';
...funcionou perfeitamente
ou
2- DeviceKind:=dkFilename;
DevicePath:='/tmp/saida.txt';
Nesse caso gerou um arquivo txt, usando o comando
$ cat /tmp/saida.txt > /dev/lp0
type c:\saida.txt > prn
...funcionou perfeitamente



22/07/2009:
.Na versão para linux, não precisa mais da librlreportshared.so
.Corrigido bug do ShowProgress, que eu havia fixado em True.
.DraftFilter não funcionou, provavelmente problemas com a dll.

21/07/2009:

.Listagem simples com Header, ColumHeader,Detail, Summary e Footer funcionou perfeitamente.
.Relatorio com RLGroup funcionou perfeitamente
.Exporta para PDF, RichText, HTML e Excel sem problemas
.Preview funcionando perfeitamente.
.Print funcionou perfeitamente.

.DraftFilter ainda não foi testado. Assim que eu conseguir uma impressora matricial eu farei os testes.

.Os componentes RLBarcode e RLAngleLabel estão sem a opção de rotacionar, pois ainda não está resolvido a questão do ScanLine, que não tem na classe TBitmap do freepascal.

.O componente RLPreview não funcionou, da erro e fecha o lazarus
.Testado em win32 e GTK2 (no meu ARCHLINUX)
.Na GTK2 apresenta problemas na ide. Ao recarregar um projeto com o componente RLReport, simplesmente fica impossivel de alterar, pois não é possivel discernir onde estão os componentes.
.No windows funcionou beleza, sem problemas na ide.

Postem suas sugestões, criticas e duvidas para que todos possamos tirar proveito desse componente, e deixa-lo o mais funcional possivel.

email para contato sobre o projeto:
dicas4lazarus@yahoo.com.br

To download latest version click here


Para baixar a versão atualizada clique aqui


English version

Todo:
.To visualize report in time of design
.To correct bug that it hinders to visualize components in linux when recharging the project (obs: in windows it loads perfectly)
.To correct bug of the RLPreview component
.To implement rotate function in the components RLAngleLabel and RLBarcode


Historic

28/07/2009:

.Draftfilter functioning perfectly in the standard mode of the FortesReport

The standard mode is configured automatically when it inserts the Draftfilter component in form, being the standard the following one:
WINDOWS
DeviceKind :=dkPrinterPort;
DevicePath :='prn';

Linux
DeviceKind :=dkProgram;
DevicePath :='lpr -P%p %f';


27/07/2009:
Unit RLPrinters
.Correções para as funções:

LoadPrintersList no linux
GetPrinterDevice no linux

23/07/2009:
.in linux, it does not need the library more than libborqt-6.9.0-qt2.3.so
. Draftfilter: . Withdrawal all the calls of scanline, before dependent of the DLL, that had functioning badly. Obviously, in some cases it must return some strange value. In my tests it functioned normally
. I obtained to use the DraftFilter in two ways:
1- DeviceKind:=dkFilename;

linux-> DevicePath:='/dev/lp0';
windows-> DevicePath:='prn';
... it functioned perfectly
ou
2- DeviceKind:=dkFilename;
DevicePath:='/tmp/saida.txt';
In this case that txt generated an archive, using the command
$ cat /tmp/saida.txt > /dev/lp0
type c:\saida.txt > prn
...it functioned perfectly


22/07/2009:
.In the linux version, it does not need librlreportshared.so more than
.Corrected bug of the ShowProgress, that I had fixed in True. .DraftFilter did not function, probably problems with the DLL.
21/07/2009:
. Simple listing with Header, ColumHeader, Detail, Summary and Footer functioned perfectly.
. Report with RLGroup functioned perfectly
. It exports to pdf, RichText, HTML and Excel without problems
. Preview functioning perfectly.
. Print functioned perfectly.
. DraftFilter not yet was tested. As soon as I to obtain a dot-matrix printer I will make the tests.
. The components RLBarcode and RLAngleLabel are without the option of rotated, therefore not yet the question of the ScanLine is decided, that does not have in the TBitmap classroom of the freepascal.
. The RLPreview component did not function, of the error and closes lazarus
. Tested in win32 and QT (in my ARCHLINUX) . In the QT it presents problems in IDE when recharging a project with the RLReport component, simply is impossible to modify, therefore it is not possible to discern where they are the components. . In windows beauty functioned, without problems in IDE.
Post its suggestions, you criticize and you doubt so that all let us can take off advantage of this component, and leave it most functional possible. email for contact on the project: dicas4lazarus@yahoo.com.br

terça-feira, 21 de julho de 2009

Fortes Report para lazarus

Terça-feira, 21 de Julho de 2009
Fortes Report para lazarus
Estou disponibilizando a versão para lazarus do excelente gerador de relatorios Fortes Report.

A conversão ainda não está completa, mas pra mim, está perfeitamente funcional.

Essa conversão é baseada na versão 3.24B14.

Não testei tudo, apenas converti, criei um relatorio relativamente complexo, imprimiu beleza, então funciona ok.

As correções efetuadas serão disponibilizadas somente a noite.

Assim que eu aprender como trabalhar com CVS estarei disponibilando o pacote, se possivel, no sourceforge. Quem puder demonstrar como se faz isso, ficarei muito agradecido.

Historico
23/07/2009:
No linux, nao precisa mais da biblioteca libborqt-6.9.0-qt2.3.so
.Draftfilter:
.Retirada todas as chamadas de scanline, antes dependente da dll, que teve mal funcionamento.
Obviamente, em alguns casos deve retornar algum valor estranho. Nos meus testes funcionou normalmente
.Eu consegui usar o DraftFilter de duas maneiras:
1- DeviceKind:=dkFilename;

linux-> DevicePath:='/dev/lp0';
windows-> DevicePath:='prn';
...funcionou perfeitamente
ou
2- DeviceKind:=dkFilename;
DevicePath:='/tmp/saida.txt';
Nesse caso gerou um arquivo txt, usando o comando
$ cat /tmp/saida.txt > /dev/lp0
type c:\saida.txt > prn
...funcionou perfeitamente



22/07/2009:
.Na versão para linux, não precisa mais da librlreportshared.so
.Corrigido bug do ShowProgress, que eu havia fixado em True.
.DraftFilter não funcionou, provavelmente problemas com a dll.

21/07/2009:

.Listagem simples com Header, ColumHeader,Detail, Summary e Footer funcionou perfeitamente.
.Relatorio com RLGroup funcionou perfeitamente
.Exporta para PDF, RichText, HTML e Excel sem problemas
.Preview funcionando perfeitamente.
.Print funcionou perfeitamente.

.DraftFilter ainda não foi testado. Assim que eu conseguir uma impressora matricial eu farei os testes.

.Os componentes RLBarcode e RLAngleLabel estão sem a opção de rotacionar, pois ainda não está resolvido a questão do ScanLine, que não tem na classe TBitmap do freepascal.

.O componente RLPreview não funcionou, da erro e fecha o lazarus
.Testado em win32 e GTK2 (no meu ARCHLINUX)
.Na GTK2 apresenta problemas na ide. Ao recarregar um projeto com o componente RLReport, simplesmente fica impossivel de alterar, pois não é possivel discernir onde estão os componentes.
.No windows funcionou beleza, sem problemas na ide.

Postem suas sugestões, criticas e duvidas para que todos possamos tirar proveito desse componente, e deixa-lo o mais funcional possivel.

email para contato sobre o projeto:
dicas4lazarus@yahoo.com.br

O link para download do componente é:
fortes4lazarus.tar.gz

http://www.4shared.com/file/120192061/cca35d61/fortes4lazarustar.html

Bem vindos ao Dicas for Lazarus

Usuarios do lazarus

Sejam todos bem-vindos!

É com grande satisfação que inicio esse trabalho.

O lazarus na sua versão atual (0.9.26) está bastante estavel, com um desenvolvimento bem acelerado.

Aqui encontrarão dicas de programação, dicas de configuração, artigos, componentes, links interessantes, etc.

Não sou nenhum expert em programação, apenas sou alguem que tem grande interesse em aprender e compartilhar sobre essa ferramenta maravilhosa que é o lazarus.

Não posso prometer atualização semanal, mas sempre que possivel estarei postando material sobre programação pascal, configuração do lazarus, macetes, manuais, etc.

Obrigado a todos e fiquem com Deus.