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.

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.

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.

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:

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

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