Em qualquer documento, geralmente temos que informar datas, de modo que se torna necessário agilizar a digitação.
Pra resolver esse problema, criei duas rotinas, que já uso ha uns 6 anos.
Pra quem é experiente, é algo banal, mas para os iniciantes, essa dica pode ser interessante.
Como funciona as rotinas
São duas rotinas:
Validakeydatas e Validakeydatas2.
Funciona validando a data quando o usuario tecla ENTER.
No meu caso tem sido muito útil, pois essas rotinas alem de validar as datas tem outras vantagens:
.Agiliza na digitação, pois ao digitar a data não precisa colocar o separador, no caso a barra '/', e adicionalmente, não precisa informar o ano da data, que a rotina completa automaticamente
.Pode ser usado em qualquer componente, como Edit, DBEdit, DBGrid.
Essas rotinas interceptam a digitação do usuario, retornando um caracter nulo no caso de digitar algo invalido.
A diferença de Validakeydatas e Validakeydatas2 é que na segunda função pode-se informar o ano para preenchimento automatico.
Por exemplo, pra informar '01/12/2009' você digita apenas '01122009' ou '0112' e tecla ENTER.
Como utilizar as rotinas
Basta configurar o evento OnKeyPress do componente, da seguinte forma:
Crie um form
Insira dois componentes TEdit no form
De um duplo clique no evento OnKeyPress do Edit1
Exemplo 1
Validakeydatas
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
//Chama Validakeydatas, não aceita data em branco
Validakeydatas(Sender,Key,False);
if key=#13 then Edit2.setfocus;
if key=#27 then close;
end;
Exemplo 2
Validakeydatas
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
//Chama Validakeydatas, aceitando data em branco
Validakeydatas(Sender,Key,True);
if key=#13 then Edit2.setfocus;
if key=#27 then close;
end;
Exemplo 3
Utilizando
Validakeydatas2
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
//Chama Validakeydatas
//não aceita data em branco
//se não informar o ano, preenche com '2009'
Validakeydatas2(Sender,Key,False,'2009');
if key=#13 then Edit2.setfocus;
if key=#27 then close;
end;
Codigo fonte
Segue abaixo um exemplo de Unit que poderia ser usada pra armazenar as funcoes:
unit funcoes1;
interface
uses
LCLIntf, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
EditBtn, ExtCtrls, StdCtrls;
Function IsDate(wData:String):Boolean;
Procedure ValidaKeyDatas(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean);
Procedure ValidaKeyDatas2(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean;Const zAno:String);
implementation
Function IsDate(wData:String):Boolean;
var
T:TDateTime;
Begin
Try
T:=StrToDateTime(wData);
Result:=True;
except
Result:=False;
end;
end;
Procedure ValidaKeyDatas(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean);
var
D1:String;
L:integer;
begin
if not (key in ['0'..'9','/',#8,#13,#27]) Then key:=#0;
if Sender.ClassName='TEdit' Then
begin
D1:=TEdit(Sender).Text;
if (key=#13) and (D1='') then
if not (AceitaNulo) Then key:=#0;
if (key=#13) and (D1<>'') then
begin
L:=length(D1);
if (pos('/',TEdit(Sender).Text)=0) and ((L=6) or (L=8)) then
begin
if L=6 then
D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,2)
else
D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,4);
end;
if isdate(D1) Then TEdit(Sender).Text:=D1;
if not isdate(D1) Then
begin
key:=#0;
ShowMessage('Data Invalida');
TEdit(Sender).SetFocus;
end;
end;
end;
end;
Procedure ValidaKeyDatas2(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean;Const zAno:String);
var
D1:String;
L:integer;
begin
if not (key in ['0'..'9','/',#8,#13,#27]) Then key:=#0;
if Sender.ClassName='TEdit' Then
begin
D1:=TEdit(Sender).Text;
if (key=#13) and (D1='') then
if not (AceitaNulo) Then key:=#0;
if (key=#13) and (D1<>'') then
begin
L:=length(D1);
if (pos('/',TEdit(Sender).Text)=0) and ((L=6) or (L=8)) then
begin
if L=6 then
D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,2)
else
D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,4);
end;
if (pos('/',TEdit(Sender).Text)=0) and (L=4) then
begin
D1:=D1+zAno;
L:=length(D1);
if L=6 then
D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,2)
else
D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,4);
end;
if isdate(D1) Then TEdit(Sender).Text:=D1;
if not isdate(D1) Then
begin
key:=#0;
ShowMessage('Data Invalida');
TEdit(Sender).SetFocus;
end;
end;
end;
end;
end.
Até a próxima.
.
terça-feira, 17 de novembro de 2009
Bug na QT ou problema de configuração?
Ao utilizar Lazarus no linux, tenho utilizado o widget Qt, por dois motivos:
1-Pelo visual dos programas
2-Pela farta documentação e facilidade de implementar rotinas diretamente da Qt
Mas como tudo não são flores, sempre um problema aparece.
Nesse caso, não sei se é um bug da Qt, ou se é problema de configuração no linux.
Vamos ao problema.
O meu plano de acesso a internet funciona somente das 18:00 as 6:00 e no fim de semana na velocidade de 500kbps,
No horário normal não passa de 2kbps, isso porque não tem como eles desligar mesmo.
Pois bem, na velocidade de 500kbps, os programas com widget Qt carregam normalmente, mas na velocidade de 2kbps, demora uma eternidade pra carregar, como se de alguma forma a internet estivesse interferindo o carregamento do programa.
Alguem já passou por isso?
É um bug ou problema de configuração no linux?
Qualquer ajuda será bem vinda.
Obrigado
1-Pelo visual dos programas
2-Pela farta documentação e facilidade de implementar rotinas diretamente da Qt
Mas como tudo não são flores, sempre um problema aparece.
Nesse caso, não sei se é um bug da Qt, ou se é problema de configuração no linux.
Vamos ao problema.
O meu plano de acesso a internet funciona somente das 18:00 as 6:00 e no fim de semana na velocidade de 500kbps,
No horário normal não passa de 2kbps, isso porque não tem como eles desligar mesmo.
Pois bem, na velocidade de 500kbps, os programas com widget Qt carregam normalmente, mas na velocidade de 2kbps, demora uma eternidade pra carregar, como se de alguma forma a internet estivesse interferindo o carregamento do programa.
Alguem já passou por isso?
É um bug ou problema de configuração no linux?
Qualquer ajuda será bem vinda.
Obrigado
sábado, 14 de novembro de 2009
Dica de instalacao de componentes em ambiente linux
Alguns desenvolvedores, acostumados com o windows, tem certo receio de migrar seus aplicativos para linux, vista como uma plataforma dificil.
Isso não é verdade.
Eu só programo utilizando ambiente linux.
O proposito desse artigo é demonstrar como instalar componentes no ambiente de desenvolvimento lazarus, no caso o pacote/componente FortesReport4lazarus.
Após instalar o lazarus, versão 0.9.29 no meu Archlinux, fui instalar o componente FortesReport4lazarus.
Ao tentar instalar, tive alguns problemas.Vou descrever aqui como resolver esses problemas e instalar corretamente o pacote fortes4lazarus.
Não sei se esse erro acontece em todas as distribuições, mas comigo ja aconteceu no Archlinux e no slackware.
Vamos começar.
Fui em Package->Open package file(.lpk);
Abri o pacote fortes324forlaz.lpk;
Compilei, tudo certo;
Cliquei em Install, deu um erro com a seguinte mensagem:
Unable to find "componenttreeview.pas"
Esse arquivo encontra-se na pasta /usr/lib/lazarus/ideintf/ basta executar um find para encontra-lo, assim:
find /usr/lib/lazarus -name "componenttreeview.pas"
Agora, pra sanar o problema, vamos abrir o arquivo /etc/fpc.cfg
Procure pelo titulo:
# searchpath for units and other system dependent things
Acrescente a linha como descrita abaixo:
-Fu/usr/lib/lazarus/ideintf/
E salve o arquivo.
No pacote fortes324forlaz, clique novamente em install.
Agora dá outra mensagem:
Ambiguous unit found
Clique em Ignore All
Deu outra mensagem de erro:
Unable to find "rlreg.pas"
Essa unit faz parte do pacote fortes4lazarus.
No /etc/fpc.cfg procure a secao:
# searchpath for units and other system dependent things
Então acrescente a seguinte linha
-Fu/home/user/mycomponentes/laz/fortes324forlazarus
E salve.
Volte ao pacote fortes324forlaz e clique em install novamente.
Pronto! O pacote fortes324forlaz foi instalado corretamente.
Postem suas duvidas, criticas ou sugestões.
Até a proxima.
Isso não é verdade.
Eu só programo utilizando ambiente linux.
O proposito desse artigo é demonstrar como instalar componentes no ambiente de desenvolvimento lazarus, no caso o pacote/componente FortesReport4lazarus.
Após instalar o lazarus, versão 0.9.29 no meu Archlinux, fui instalar o componente FortesReport4lazarus.
Ao tentar instalar, tive alguns problemas.Vou descrever aqui como resolver esses problemas e instalar corretamente o pacote fortes4lazarus.
Não sei se esse erro acontece em todas as distribuições, mas comigo ja aconteceu no Archlinux e no slackware.
Vamos começar.
Fui em Package->Open package file(.lpk);
Abri o pacote fortes324forlaz.lpk;
Compilei, tudo certo;
Cliquei em Install, deu um erro com a seguinte mensagem:
Unable to find "componenttreeview.pas"
Esse arquivo encontra-se na pasta /usr/lib/lazarus/ideintf/ basta executar um find para encontra-lo, assim:
find /usr/lib/lazarus -name "componenttreeview.pas"
Agora, pra sanar o problema, vamos abrir o arquivo /etc/fpc.cfg
Procure pelo titulo:
# searchpath for units and other system dependent things
Acrescente a linha como descrita abaixo:
-Fu/usr/lib/lazarus/ideintf/
E salve o arquivo.
No pacote fortes324forlaz, clique novamente em install.
Agora dá outra mensagem:
Ambiguous unit found
Clique em Ignore All
Deu outra mensagem de erro:
Unable to find "rlreg.pas"
Essa unit faz parte do pacote fortes4lazarus.
No /etc/fpc.cfg procure a secao:
# searchpath for units and other system dependent things
Então acrescente a seguinte linha
-Fu/home/user/mycomponentes/laz/fortes324forlazarus
E salve.
Volte ao pacote fortes324forlaz e clique em install novamente.
Pronto! O pacote fortes324forlaz foi instalado corretamente.
Postem suas duvidas, criticas ou sugestões.
Até a proxima.
quarta-feira, 26 de agosto de 2009
O componente LazGradient
Com esse componente os programas escritos em lazarus ficam com um visual bem atraente, mas cuidado pra não exagerar na dose.
Exemplo simples:
Exemplo mais complexo:
Propriedades principais:
BeginColor:TColor
EndColor:TColor
Orientation => foLeftToRight, fdTopToBottom
Rounded => Boolean
Na versão atual esse componente ao ser adicionado no form, automaticamente ocupa toda a tela.
Para corrigir, faça as alterações a seguir.
Abra o pacote lazgradient.lpk
Abra a unit gradient.pas e localize o codigo abaixo:
constructor TLazGradient.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BeginColor:= clBlue;
EndColor:= clWhite;
Orientation:= foLeftToRight;
Align:= alClient;
Alignment := taCenter;
Rounded:= False;
end;
Mude
Align:= alClient;
para:
Align:= alNone;
Adicione as linhas abaixo:
Height:=35;
Width:=120;
Deve ficar assim:
constructor TLazGradient.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BeginColor:= clBlue;
EndColor:= clWhite;
Orientation:= foLeftToRight;
Align:= alNone;
Alignment := taCenter;
Rounded:= False;
Height:=35;
Width:=120;
end;
Incremente seu sistema de automação comercial, pdv, etc.
Experimente o LazGradient !
Link para download do componente:
http://wile64.perso.neuf.fr/download/lazarus/lazgradient.zip
Até a proxima.
Exemplo simples:
Exemplo mais complexo:
Propriedades principais:
BeginColor:TColor
EndColor:TColor
Orientation => foLeftToRight, fdTopToBottom
Rounded => Boolean
Na versão atual esse componente ao ser adicionado no form, automaticamente ocupa toda a tela.
Para corrigir, faça as alterações a seguir.
Abra o pacote lazgradient.lpk
Abra a unit gradient.pas e localize o codigo abaixo:
constructor TLazGradient.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BeginColor:= clBlue;
EndColor:= clWhite;
Orientation:= foLeftToRight;
Align:= alClient;
Alignment := taCenter;
Rounded:= False;
end;
Mude
Align:= alClient;
para:
Align:= alNone;
Adicione as linhas abaixo:
Height:=35;
Width:=120;
Deve ficar assim:
constructor TLazGradient.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BeginColor:= clBlue;
EndColor:= clWhite;
Orientation:= foLeftToRight;
Align:= alNone;
Alignment := taCenter;
Rounded:= False;
Height:=35;
Width:=120;
end;
Incremente seu sistema de automação comercial, pdv, etc.
Experimente o LazGradient !
Link para download do componente:
http://wile64.perso.neuf.fr/download/lazarus/lazgradient.zip
Até a proxima.
segunda-feira, 17 de agosto de 2009
Executando o lazarus no wine
Essa dica ficou obsoleta, pois a partir da versão 0.9.29 o lazarus funcionou perfeitamente no wine.
Para aqueles que desenvolvem pra linux e windows e o uso de uma maquina virtual não é uma alternativa muito pratica, e tem tempo pra encarar o wine, então essa dica pode ser interessante.
Realmente, rodar uma aplicação no wine pode não ser a opção mais confiavel, mas em muitos casos resolve o problema de ter que trabalhar com dois OS simultaneamente, o que implica o uso de maquinas virtuais, que consomem muito processamento da maquina, mas cada um tem uma opinião e depende de cada caso.
Rodando o lazarus
Varias vezes quando eu instalava o lazarus no wine, não era possivel trabalhar, pois não conseguia abrir os projetos.
Exemplo:
projeto g:\diversos\laztestewin32\linux\rlreportteste.lpi
Ao tentar abrir, o lazarus retorna que o projeto não existe:
E assim ocorre pra qualquer arquivo que tentar abrir.
A primeira solução que me veio a mente foi criar um link simbolico apontando pra pasta requerida, assim:
Considerando G:=/home/teste
cd /home/teste/diversos/laztestewin32/
ln -s linux/ linu
...e pronto, tava resolvido.
O problema é que ao abrir o mesmo arquivo, o lazarus suprimia a ultima letra outra vez, e assim sucessivamente, e tinha que criar um novo link.
Resolvi por a mão na massa e estudar o codigo.
Então criei as seguintes funções:
unit mainwine;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function WineValidFile(filename1:string):string;
function WineValidSaveFile(filename1:string):string;
implementation
function WineValidFile(filename1:string):string;
var
wineFile,wineFile2,winePath,winePath2:string;
wineListChar:TStringlist;
pathLen,charCount:integer;
begin
wineListChar:=TStringlist.Create;
Result:=filename1;
if not SysUtils.FileExists(filename1) then
begin
WinePath:=SysUtils.ExtractFilePath(filename1);
PathLen:=length(WinePath);
WinePath:=copy(WinePath,1,PathLen-1);
wineFile:=SysUtils.ExtractFileName(filename1);
for charCount:=32 to 127 do begin
wineFile2:=WinePath+chr(charCount)+'\'+wineFile;
if fileexists(wineFile2) then begin
Result:=wineFile2;
break;
end;
end;
end;
end;
function WineValidSaveFile(filename1:string):string;
var
wineFile,wineFile2,winePath,winePath2:string;
wineListChar:TStringlist;
pathLen,charCount:integer;
begin
wineListChar:=TStringlist.Create;
Result:=filename1;
if not SysUtils.FileExists(filename1) then
begin
WinePath:=SysUtils.ExtractFilePath(filename1);
PathLen:=length(WinePath);
WinePath:=copy(WinePath,1,PathLen-1);
wineFile:=SysUtils.ExtractFileName(filename1);
for charCount:=32 to 127 do begin
wineFile2:=WinePath+chr(charCount)+'\'+wineFile;
if DirectoryExists(WinePath+chr(charCount)+'\') then
begin
Result:=wineFile2;
break;
end;
end;
end;
end;
end.
Observei que o problema acontece sempre que se usa a classe TOpenDialog e TSaveDialog.
A unit que esta o codigo pra salvar os projetos, packages, etc é a main.pp.
Então, é só incluir essa unit (mainwine) na clausula uses da unit main.pp e chamar essas funções antes de abrir e salvar seus arquivos na ide.
crie uma diretiva USEWINE:
{$DEFINE USEWINE}
Agora implemente nos casos abaixo:
procedure TMainIDE.mnuOpenClicked(Sender: TObject);
...
For I := 0 to OpenDialog.Files.Count-1 do
Begin
AFilename:=CleanAndExpandFilename(OpenDialog.Files.Strings[i]);
{$IFDEF USEWINE}
AFilename:=mainwine.WineValidFile(AFilename);
{$ENDIF}
...
function TMainIDE.DoShowSaveFileAsDialog(AnUnitInfo: TUnitInfo;
var ResourceCode: TCodeBuffer): TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
...
if ExtractFileExt(NewFilename)='' then begin
NewFilename:=NewFilename+SaveAsFileExt;
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
end;
...
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
NewFilePath:=ExtractFilePath(NewFilename);
...
function TMainIDE.DoShowSaveProjectAsDialog: TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
if not FilenameIsAbsolute(NewFilename) then
RaiseException('TMainIDE.DoShowSaveProjectAsDialog: buggy ExpandFileNameUTF8');
NewProgramName:=ExtractFileNameOnly(NewFilename);
...
Eu não testei todos os casos, pois para mim desse jeito resolveu grande parte do problema, e o codigo da IDE é muito complexo, e extenso.
Mas fica registrada uma solução para o problema, e aqueles desenvolvedores que colaboram com o projeto e tem mais afinidade com o codigo da unit main.pp e outras units que compoem a IDE, podem apreciar e se for o caso, implementar definitivamente, e assim oferecer mais uma alternativa pro usuario.
Até a proxima.
English version:
Running lazarus under wine
For that they develop for linux and windows and the use of one virtual machine is not an alternative practises, and it has time to try wine, then this tip can be interesting.
Really run an application in wine can not be the option most trustworthy, but in many cases decided the problem to have that to work simultaneously with two OS, what implies the use of virtual machines, that they consume much processing of cpu, but each one has an opinion and depends on each case.
Make lazarus run on wine
Many times when I installed lazarus in wine, he was not possible to work, therefore he did not obtain to open the projects.
Example:
project g:\diversos\laztestewin32\linux\rlreportteste.lpi
When trying to open, lazarus returns that the project does not exist:
E thus occurs pra any archive that to try to open.
The first solution that came me the mind was to create one link symbolic pointing pra required folder, thus:
Considering:
G: =/home/teste
cd /home/teste/diversos/laztestewin32/
ln - s linux/linu
… and ready, it decided.
The problem is that when opening the same archive, lazarus suppressed finishes it letter another time, and thus successively, and had that to create new link.
I decided for the hand in the mass and to study the code.
Then I created following the functions:
Please, sees the unit mainwine.pas above listed
I observed that the problem happens whenever the class TOpenDialog and TSaveDialog is used.
Unit that this the code to save the projects, packages, etc is main.pp.
Then, is alone to include this unit (mainwine) in the uses clause of unit main.pp and to call these functions before opening and saving its archives in IDE.
It creates a directive USEWINE:
{$DEFINE USEWINE}
Now it implements in the cases below:
procedure TMainIDE.mnuOpenClicked(Sender: TObject);
...
For I := 0 to OpenDialog.Files.Count-1 do
Begin
AFilename:=CleanAndExpandFilename(OpenDialog.Files.Strings[i]);
{$IFDEF USEWINE}
AFilename:=mainwine.WineValidFile(AFilename);
{$ENDIF}
...
function TMainIDE.DoShowSaveFileAsDialog(AnUnitInfo: TUnitInfo;
var ResourceCode: TCodeBuffer): TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
...
if ExtractFileExt(NewFilename)='' then begin
NewFilename:=NewFilename+SaveAsFileExt;
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
end;
...
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
NewFilePath:=ExtractFilePath(NewFilename);
...
function TMainIDE.DoShowSaveProjectAsDialog: TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
if not FilenameIsAbsolute(NewFilename) then
RaiseException('TMainIDE.DoShowSaveProjectAsDialog: buggy ExpandFileNameUTF8');
NewProgramName:=ExtractFileNameOnly(NewFilename);
...
I did not test all the cases, therefore for me of this skill he decided great part of the problem, and the code of IDE is very complex, and extensive.
But a solution for the problem, and those developers is registered that collaborate with the project and have more affinity with the code of unit main.pp and others units that they make the IDE, can appreciate and it will be the case, to implement definitively, and thus to offer to end user a new alternative.
Until the next one.
Para aqueles que desenvolvem pra linux e windows e o uso de uma maquina virtual não é uma alternativa muito pratica, e tem tempo pra encarar o wine, então essa dica pode ser interessante.
Realmente, rodar uma aplicação no wine pode não ser a opção mais confiavel, mas em muitos casos resolve o problema de ter que trabalhar com dois OS simultaneamente, o que implica o uso de maquinas virtuais, que consomem muito processamento da maquina, mas cada um tem uma opinião e depende de cada caso.
Rodando o lazarus
Varias vezes quando eu instalava o lazarus no wine, não era possivel trabalhar, pois não conseguia abrir os projetos.
Exemplo:
projeto g:\diversos\laztestewin32\linux\rlreportteste.lpi
Ao tentar abrir, o lazarus retorna que o projeto não existe:
E assim ocorre pra qualquer arquivo que tentar abrir.
A primeira solução que me veio a mente foi criar um link simbolico apontando pra pasta requerida, assim:
Considerando G:=/home/teste
cd /home/teste/diversos/laztestewin32/
ln -s linux/ linu
...e pronto, tava resolvido.
O problema é que ao abrir o mesmo arquivo, o lazarus suprimia a ultima letra outra vez, e assim sucessivamente, e tinha que criar um novo link.
Resolvi por a mão na massa e estudar o codigo.
Então criei as seguintes funções:
unit mainwine;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function WineValidFile(filename1:string):string;
function WineValidSaveFile(filename1:string):string;
implementation
function WineValidFile(filename1:string):string;
var
wineFile,wineFile2,winePath,winePath2:string;
wineListChar:TStringlist;
pathLen,charCount:integer;
begin
wineListChar:=TStringlist.Create;
Result:=filename1;
if not SysUtils.FileExists(filename1) then
begin
WinePath:=SysUtils.ExtractFilePath(filename1);
PathLen:=length(WinePath);
WinePath:=copy(WinePath,1,PathLen-1);
wineFile:=SysUtils.ExtractFileName(filename1);
for charCount:=32 to 127 do begin
wineFile2:=WinePath+chr(charCount)+'\'+wineFile;
if fileexists(wineFile2) then begin
Result:=wineFile2;
break;
end;
end;
end;
end;
function WineValidSaveFile(filename1:string):string;
var
wineFile,wineFile2,winePath,winePath2:string;
wineListChar:TStringlist;
pathLen,charCount:integer;
begin
wineListChar:=TStringlist.Create;
Result:=filename1;
if not SysUtils.FileExists(filename1) then
begin
WinePath:=SysUtils.ExtractFilePath(filename1);
PathLen:=length(WinePath);
WinePath:=copy(WinePath,1,PathLen-1);
wineFile:=SysUtils.ExtractFileName(filename1);
for charCount:=32 to 127 do begin
wineFile2:=WinePath+chr(charCount)+'\'+wineFile;
if DirectoryExists(WinePath+chr(charCount)+'\') then
begin
Result:=wineFile2;
break;
end;
end;
end;
end;
end.
Observei que o problema acontece sempre que se usa a classe TOpenDialog e TSaveDialog.
A unit que esta o codigo pra salvar os projetos, packages, etc é a main.pp.
Então, é só incluir essa unit (mainwine) na clausula uses da unit main.pp e chamar essas funções antes de abrir e salvar seus arquivos na ide.
crie uma diretiva USEWINE:
{$DEFINE USEWINE}
Agora implemente nos casos abaixo:
procedure TMainIDE.mnuOpenClicked(Sender: TObject);
...
For I := 0 to OpenDialog.Files.Count-1 do
Begin
AFilename:=CleanAndExpandFilename(OpenDialog.Files.Strings[i]);
{$IFDEF USEWINE}
AFilename:=mainwine.WineValidFile(AFilename);
{$ENDIF}
...
function TMainIDE.DoShowSaveFileAsDialog(AnUnitInfo: TUnitInfo;
var ResourceCode: TCodeBuffer): TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
...
if ExtractFileExt(NewFilename)='' then begin
NewFilename:=NewFilename+SaveAsFileExt;
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
end;
...
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
NewFilePath:=ExtractFilePath(NewFilename);
...
function TMainIDE.DoShowSaveProjectAsDialog: TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
if not FilenameIsAbsolute(NewFilename) then
RaiseException('TMainIDE.DoShowSaveProjectAsDialog: buggy ExpandFileNameUTF8');
NewProgramName:=ExtractFileNameOnly(NewFilename);
...
Eu não testei todos os casos, pois para mim desse jeito resolveu grande parte do problema, e o codigo da IDE é muito complexo, e extenso.
Mas fica registrada uma solução para o problema, e aqueles desenvolvedores que colaboram com o projeto e tem mais afinidade com o codigo da unit main.pp e outras units que compoem a IDE, podem apreciar e se for o caso, implementar definitivamente, e assim oferecer mais uma alternativa pro usuario.
Até a proxima.
English version:
Running lazarus under wine
For that they develop for linux and windows and the use of one virtual machine is not an alternative practises, and it has time to try wine, then this tip can be interesting.
Really run an application in wine can not be the option most trustworthy, but in many cases decided the problem to have that to work simultaneously with two OS, what implies the use of virtual machines, that they consume much processing of cpu, but each one has an opinion and depends on each case.
Make lazarus run on wine
Many times when I installed lazarus in wine, he was not possible to work, therefore he did not obtain to open the projects.
Example:
project g:\diversos\laztestewin32\linux\rlreportteste.lpi
When trying to open, lazarus returns that the project does not exist:
E thus occurs pra any archive that to try to open.
The first solution that came me the mind was to create one link symbolic pointing pra required folder, thus:
Considering:
G: =/home/teste
cd /home/teste/diversos/laztestewin32/
ln - s linux/linu
… and ready, it decided.
The problem is that when opening the same archive, lazarus suppressed finishes it letter another time, and thus successively, and had that to create new link.
I decided for the hand in the mass and to study the code.
Then I created following the functions:
Please, sees the unit mainwine.pas above listed
I observed that the problem happens whenever the class TOpenDialog and TSaveDialog is used.
Unit that this the code to save the projects, packages, etc is main.pp.
Then, is alone to include this unit (mainwine) in the uses clause of unit main.pp and to call these functions before opening and saving its archives in IDE.
It creates a directive USEWINE:
{$DEFINE USEWINE}
Now it implements in the cases below:
procedure TMainIDE.mnuOpenClicked(Sender: TObject);
...
For I := 0 to OpenDialog.Files.Count-1 do
Begin
AFilename:=CleanAndExpandFilename(OpenDialog.Files.Strings[i]);
{$IFDEF USEWINE}
AFilename:=mainwine.WineValidFile(AFilename);
{$ENDIF}
...
function TMainIDE.DoShowSaveFileAsDialog(AnUnitInfo: TUnitInfo;
var ResourceCode: TCodeBuffer): TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
...
if ExtractFileExt(NewFilename)='' then begin
NewFilename:=NewFilename+SaveAsFileExt;
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
end;
...
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
NewFilePath:=ExtractFilePath(NewFilename);
...
function TMainIDE.DoShowSaveProjectAsDialog: TModalResult;
...
NewFilename:=ExpandFileNameUTF8(SaveDialog.Filename);
{$IFDEF USEWINE}
NewFilename:=WineValidSaveFile(NewFilename);
{$ENDIF}
if not FilenameIsAbsolute(NewFilename) then
RaiseException('TMainIDE.DoShowSaveProjectAsDialog: buggy ExpandFileNameUTF8');
NewProgramName:=ExtractFileNameOnly(NewFilename);
...
I did not test all the cases, therefore for me of this skill he decided great part of the problem, and the code of IDE is very complex, and extensive.
But a solution for the problem, and those developers is registered that collaborate with the project and have more affinity with the code of unit main.pp and others units that they make the IDE, can appreciate and it will be the case, to implement definitively, and thus to offer to end user a new alternative.
Until the next one.
sábado, 15 de agosto de 2009
Configurando fonte de tela multiplataforma
Quem desenvolve aplicações multiplataforma, muitas vezes tem o problema de visual gerado pela fonte de tela, que sempre acaba irritando.
Eu resolvia esse problema definindo manualmente a fonte que seria usada no linux, e outra fonte no windows, assim:
{$IFDEF LINUX}
self.font.name:='Helvetica';
{$ENDIF}
Assim, no linux usava a font 'Helvetica' e no windows a font 'Ms Sans Serif'.
Naturalmente não ficava perfeito, pois os tamanhos são diferentes.
Isso quando eu usava o kylix3.
Mas agora, com lazarus e a widget QT, consegui resolver esse problema de forma satisfatória.
Das varias fonts que eu testei, descobri que o font Verdana tem exatamente o mesmo resultado visual, tanto no windows como no linux, assim não preciso me preocupar em ficar redimensionando os labels, pra caber o texto em ambos os sistemas operacionais.
Portanto, antes de desenhar qualquer componente visual no form, mudei o font pra Verdana e pronto.
Não é o font mais bonito, mas não dava pra continuar do jeito que estava, pois configurar um font pra windows e outro pra linux é complicado.
Tambem é possivel configurar o font padrão das aplicações QT no QTConfig, mas eu não aconselho fazer isso.
Esse procedimento foi testado apenas no linux (não uso widget QT no windows)
Se alguem ja resolveu esse problema de outra maneira, aceito criticas e sugestões ok.
No proximo post, mostrarei como resolvi o problema de executar o lazarus dentro do wine, corrigindo aquele bug do diretório, que impede de abrir os projetos no wine.
Até a próxima.
English Version
Configuring screen font multiplatform
Who develops applications multiplatforms, many times has the problem of appearance generated for the screen font, that always finishes annoying. I decided this problem manually defining the font that would be used in linux, and another font in windows, thus:
{$IFDEF LINUX}
self.font.name: =' Helvetica' ;
{$ENDIF}
Thus, in linux ' used font; Helvetica' e in windows font ' Ms Sans Serif'. Of course he was not perfect, therefore the sizes are different.
This when I used kylix3.
But now, with lazarus and widget QT, I obtained the solution this problem of satisfactory form. Of them you vary fonts that I tested, I discovered that font Verdana has accurately the same resulted visual, as much in windows as in linux, to worry thus not necessary me in being change labels width, to fit the text in both the operational systems.
Therefore, before drawing any visual component in form, I changed font to Verdana. He is not font prettier, but it did not give to continue of the skill that was, therefore to configure one font for windows and another one for linux is complicated.
Also standard of applications QT in the QTConfig is possible to configure font, but I do not advise to make this.
This procedure was tested only in linux (not use widget QT in windows)
If somebody already decided this problem in another way, accepted you criticize and suggestions. In next post, I will show as I decided the problem to inside execute lazarus under wine, correcting that one bug of the directory, that it hinders to open the projects under wine.
Until the next one.
Eu resolvia esse problema definindo manualmente a fonte que seria usada no linux, e outra fonte no windows, assim:
{$IFDEF LINUX}
self.font.name:='Helvetica';
{$ENDIF}
Assim, no linux usava a font 'Helvetica' e no windows a font 'Ms Sans Serif'.
Naturalmente não ficava perfeito, pois os tamanhos são diferentes.
Isso quando eu usava o kylix3.
Mas agora, com lazarus e a widget QT, consegui resolver esse problema de forma satisfatória.
Das varias fonts que eu testei, descobri que o font Verdana tem exatamente o mesmo resultado visual, tanto no windows como no linux, assim não preciso me preocupar em ficar redimensionando os labels, pra caber o texto em ambos os sistemas operacionais.
Portanto, antes de desenhar qualquer componente visual no form, mudei o font pra Verdana e pronto.
Não é o font mais bonito, mas não dava pra continuar do jeito que estava, pois configurar um font pra windows e outro pra linux é complicado.
Tambem é possivel configurar o font padrão das aplicações QT no QTConfig, mas eu não aconselho fazer isso.
Esse procedimento foi testado apenas no linux (não uso widget QT no windows)
Se alguem ja resolveu esse problema de outra maneira, aceito criticas e sugestões ok.
No proximo post, mostrarei como resolvi o problema de executar o lazarus dentro do wine, corrigindo aquele bug do diretório, que impede de abrir os projetos no wine.
Até a próxima.
English Version
Configuring screen font multiplatform
Who develops applications multiplatforms, many times has the problem of appearance generated for the screen font, that always finishes annoying. I decided this problem manually defining the font that would be used in linux, and another font in windows, thus:
{$IFDEF LINUX}
self.font.name: =' Helvetica' ;
{$ENDIF}
Thus, in linux ' used font; Helvetica' e in windows font ' Ms Sans Serif'. Of course he was not perfect, therefore the sizes are different.
This when I used kylix3.
But now, with lazarus and widget QT, I obtained the solution this problem of satisfactory form. Of them you vary fonts that I tested, I discovered that font Verdana has accurately the same resulted visual, as much in windows as in linux, to worry thus not necessary me in being change labels width, to fit the text in both the operational systems.
Therefore, before drawing any visual component in form, I changed font to Verdana. He is not font prettier, but it did not give to continue of the skill that was, therefore to configure one font for windows and another one for linux is complicated.
Also standard of applications QT in the QTConfig is possible to configure font, but I do not advise to make this.
This procedure was tested only in linux (not use widget QT in windows)
If somebody already decided this problem in another way, accepted you criticize and suggestions. In next post, I will show as I decided the problem to inside execute lazarus under wine, correcting that one bug of the directory, that it hinders to open the projects under wine.
Until the next one.
terça-feira, 4 de agosto de 2009
Lançado KDE 4.3.0 codinome Caizen
Grande anuncio pra usuários do linux:
O time do KDE anuncia hoje disponibilidade imediata do KDE 4.3.0 codinome "Caizen" , com muitas melhorias à plataforma vindo da experiência e do desenvolvimento do usuário. O KDE 4.3 continua refinando as características originais conhecidas em versões anteriores, sempre trazendo inovações inéditas. Com a liberação da nova versão 4.3, o KDE oferece um produto mais estável e mais completo para uso pessoal ou profissional.
Espero que tenham corrigidos os bugs da versão 4.2, que estava tornando a experiencia bem desagradavel. O Linus Torvalds que o diga...
English Version:
KDE 4.3.0 Caizen Release Announcement
KDE Community Delivers Incremental Innovations With New KDE 4.3 Release
4 August, 2009.
The KDE Community today announces the immediate availability of "Caizen", (a.k.a KDE 4.3), bringing many improvements to the user experience and development platform. KDE 4.3 continues to refine the unique features brought in previous releases while bringing new innovations. With the 4.2 release aimed at the majority of end users, KDE 4.3 offers a more stable and complete product for the home and small office.
I wait that they have corrected bugs of version 4.2, that it was becoming the well ackward experience. The Linus Torvalds says that it…
I go to still install today!
Screenshot:
O time do KDE anuncia hoje disponibilidade imediata do KDE 4.3.0 codinome "Caizen" , com muitas melhorias à plataforma vindo da experiência e do desenvolvimento do usuário. O KDE 4.3 continua refinando as características originais conhecidas em versões anteriores, sempre trazendo inovações inéditas. Com a liberação da nova versão 4.3, o KDE oferece um produto mais estável e mais completo para uso pessoal ou profissional.
Espero que tenham corrigidos os bugs da versão 4.2, que estava tornando a experiencia bem desagradavel. O Linus Torvalds que o diga...
English Version:
KDE 4.3.0 Caizen Release Announcement
KDE Community Delivers Incremental Innovations With New KDE 4.3 Release
4 August, 2009.
The KDE Community today announces the immediate availability of "Caizen", (a.k.a KDE 4.3), bringing many improvements to the user experience and development platform. KDE 4.3 continues to refine the unique features brought in previous releases while bringing new innovations. With the 4.2 release aimed at the majority of end users, KDE 4.3 offers a more stable and complete product for the home and small office.
I wait that they have corrected bugs of version 4.2, that it was becoming the well ackward experience. The Linus Torvalds says that it…
I go to still install today!
Screenshot:
Lazarus - para desenvolvedores Delphi
Lazarus é uma ferramenta de desenvolvimento rápido de aplicações (RAD) semelhante ao Delphi da Embarcadero.
Assim como o Delphi, contém uma biblioteca de componentes visuais e uma IDE. A biblioteca de componentes do Lazarus (LCL) é muito parecida com a do Delphi que é a VCL. Muitas unidades, classes e propriedades tem o mesmo nome e funcionalidade. Assim, converter programas do Delphi pro lazarus é relativamente fácil.
Mas não espere 100% de compatibilidade com o Delphi. O Lazarus não é um clone do Delphi', apenas compativel.
Apresentando o Lazarus
Tela principal:
O Editor de codigo:
Paleta de Componentes
Standart:
Componentes: TMainMenu,TPopUpMenu,TButton,TLabel,TEdit,TMemo,TTogglebox,TCheckBox,TRadioButton,TListBox,TComboBox,TScrollBar,TGroupBox,TRadioGroup,TCheckGroup,TPanel,TFrame,TActionList
Additional
Componentes:
TBitBtn,TSpeedButton,TStaticText,TImage,TShape,TBevel,TPaintBox,TNotebook,TLabeledEdit,TSplitter,TTrayicon,TMaskEdit,TCheckListBox,TScrollBox,TApplicationProperties,TStringGrid,TDrawGrid,TPairSplitter,TColoBox,TColorListBox,TChart
Paleta Common Controls:
Componentes:
TTrackBar,TProgressBar,TTreeview,TListView,TStatusBar,TToolBar,TUpDown,TPageControl,TTabControl,THeaderConrol,TImagelist,TPopupNotifier
Paleta Dialogs:
Componentes:
TOpenDialog,TSaveDialog,TSelectDirectoryDialog,TColorDialog,TFontDialog,TFindDialog,TReplaceDialog,TOpenPictureDialog,TSavePictureDialog,TCalendarDialog,TCalculatorDialog,TPrintSetup,TPrintDialog,TPageSetupDialog
Paleta Misc:
Componentes:
TColorButton,TSpinEdit,TFloatSpinEdit,TArrow,TCalendar,TEditButton,TFileNameEdit,TDirectoryEdit,TDateEdit,TCalcEdit,TFileListBox,TFilterComboBox,TXMLPropStorage,TIniPropStorage,TBarChart,TButtonPanel,TShellTreeView,TShellListView,TIDEDialogLayoutStorage
Assim como o Delphi, contém uma biblioteca de componentes visuais e uma IDE. A biblioteca de componentes do Lazarus (LCL) é muito parecida com a do Delphi que é a VCL. Muitas unidades, classes e propriedades tem o mesmo nome e funcionalidade. Assim, converter programas do Delphi pro lazarus é relativamente fácil.
Mas não espere 100% de compatibilidade com o Delphi. O Lazarus não é um clone do Delphi', apenas compativel.
Apresentando o Lazarus
Tela principal:
O Editor de codigo:
Paleta de Componentes
Standart:
Componentes: TMainMenu,TPopUpMenu,TButton,TLabel,TEdit,TMemo,TTogglebox,TCheckBox,TRadioButton,TListBox,TComboBox,TScrollBar,TGroupBox,TRadioGroup,TCheckGroup,TPanel,TFrame,TActionList
Additional
Componentes:
TBitBtn,TSpeedButton,TStaticText,TImage,TShape,TBevel,TPaintBox,TNotebook,TLabeledEdit,TSplitter,TTrayicon,TMaskEdit,TCheckListBox,TScrollBox,TApplicationProperties,TStringGrid,TDrawGrid,TPairSplitter,TColoBox,TColorListBox,TChart
Paleta Common Controls:
Componentes:
TTrackBar,TProgressBar,TTreeview,TListView,TStatusBar,TToolBar,TUpDown,TPageControl,TTabControl,THeaderConrol,TImagelist,TPopupNotifier
Paleta Dialogs:
Componentes:
TOpenDialog,TSaveDialog,TSelectDirectoryDialog,TColorDialog,TFontDialog,TFindDialog,TReplaceDialog,TOpenPictureDialog,TSavePictureDialog,TCalendarDialog,TCalculatorDialog,TPrintSetup,TPrintDialog,TPageSetupDialog
Paleta Misc:
Componentes:
TColorButton,TSpinEdit,TFloatSpinEdit,TArrow,TCalendar,TEditButton,TFileNameEdit,TDirectoryEdit,TDateEdit,TCalcEdit,TFileListBox,TFilterComboBox,TXMLPropStorage,TIniPropStorage,TBarChart,TButtonPanel,TShellTreeView,TShellListView,TIDEDialogLayoutStorage
segunda-feira, 3 de agosto de 2009
Fortes Report for Lazarus no sourceforge.net
O projeto FortesReport4Lazarus esta agora disponivel no sourceforge.net, no endereço:
http://fortes4lazarus.sourceforge.net/
O projeto precisa de ajuda para desenvolvimento.
Junte-se ao projecto e ajude a tornar o FortesReport4Lazarus o melhor gerador de relatorios pro lazarus freepascal.
English version
Fortes Report for Lazarus no sourceforge.net
The project FortesReport4Lazarus is now avaliable in sourceforge.net at the address
http://fortes4lazarus.sourceforge.net/
FortesReport4Lazarus need contributors.
Join to the project and help to make the FortesReport4Lazarus the best report generator to lazarus freepascal.
regards
http://fortes4lazarus.sourceforge.net/
O projeto precisa de ajuda para desenvolvimento.
Junte-se ao projecto e ajude a tornar o FortesReport4Lazarus o melhor gerador de relatorios pro lazarus freepascal.
English version
Fortes Report for Lazarus no sourceforge.net
The project FortesReport4Lazarus is now avaliable in sourceforge.net at the address
http://fortes4lazarus.sourceforge.net/
FortesReport4Lazarus need contributors.
Join to the project and help to make the FortesReport4Lazarus the best report generator to lazarus freepascal.
regards
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
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
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
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.
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.
Assinar:
Postagens (Atom)