Esse artigo faz parte da revista Clube Delphi edição 17. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

Kylix

Conheça a primeira ferramenta de desenvolvimento visual criada para plataforma Linux

 

Não há melhor forma de começar este artigo a não ser afirmando: "o sonho se tornou realidade". Após tanto tempo de espera, o Delphi para Linux está aí, e provavelmente quando você ler este artigo, já poderá encontrá-lo nas prateleiras.

É claro que as especulações a respeito do produto continuarão, até que ele se torne tão popularizado quanto o próprio Delphi. O mais curioso neste lançamento foi em relação à mudança na estratégia de marketing: não há Delphi para Linux, e sim Kylix. Ora, não seria a mesma coisa? Parece que não. A Borland surpreendeu a todos e tornou o Kylix um novo produto, e não apenas mais uma distribuição do Delphi.

Mas não se espante, é apenas Marketing. O Kylix é o Delphi. Obviamente, muito diferente do que se dizia no início do ano passado, mas certamente, um ótimo produto. Os céticos já previam que isso iria acontecer. As primeiras promessas de lançar um Delphi-Linux 100% compatível Delphi-Windows foi pouco a pouco sendo adaptada, e o que temos hoje é um Delphi com mudanças radicais em sua estrutura. O compilador já não é mais o mesmo: executáveis Windows possuem muita diferença em relação à executáveis Linux.  O compilador do Kylix nada aproveita do Delphi para Windows. Segundo David Intersimone, relation manager da Borland "um novo compilador foi construído a partir do zero, para garantir a estabilidade e a performance de aplicações nativas Linux".

         A VCL também precisou ser repensada. Muitos componentes e classes da VCL são FrameWorks da WinAPI, ou seja, representam ponteiros para objetos padronizados da GUI do Windows. A VCL também utiliza conceitos como as mensagens do Windows, que obviamente não estão presentes no Linux. Uma nova framework de componentes foi construída para atender as necessidades do Linux, bem como se desvincular de toda a estrutura do Windows. Essa nova framework se chama CLX (pronuncia-se: “clicks”, uma brincadeira ao próprio nome Kylix) e estará presente também nas próximas versões do Delphi para Windows, criando uma camada de compatibilidade entre os dois sistemas.

 

 

Compatibilidade Delphi-Windows

 

Então o sonho de abrirmos um projeto Delphi-Windows no Linux e transformá-lo em executável acabou? Não. O fato é que os projetos construídos em versões atuais do Delphi Windows não são totalmente compatíveis com o Kylix. Apenas o código Object Pascal puro, sem chamada a APIs, e os objetos mais básicos  são reconhecidos pelo Kylix. Entretanto, o Delphi 6 promete criar uma camada de total compatibilidade com o Kylix, como uma ponte. Ou seja, o Delphi 6 virá acompanhado de VCL, CLX e DBExpress. Se o desenvolvedor criar seus aplicativos utilizando somente Object Pascal e componentes CLX, então terá um código 100% compatível com o Kylix. Confira neste mesmo artigo como foi o comportamento de uma aplicação feita em Delphi 5 e aberta dentro do Kylix.

 

A CLX

 

A VCL é totalmente baseada na GUI do Windows, também conhecida como Win32 API. A GUI (Graphics User Interface) de um sistema operacional é a biblioteca que define como será o comportamento dos objetos visuais do sistema. Por exemplo, como será o formato e o comportamento de uma combobox, como será o pressionamento de um botão, o efeito de maximização e minimização, entre outros. Para exemplificar, podemos dizer que o Microsoft Windows 3.11 é uma GUI para o sistema operacional DOS.

Como a VCL está diretamente associada as APIs da GUI Win32, esta não pôde ser aproveitada no desenvolvimento do Kylix. A CLX é baseada na GUI da TrollTech (www.trolltech.com), conhecida como Qt. Um dos motivos para escolha da Qt é o fato de estar disponível para várias plataformas, como Linux e Windows. Daí podemos visualizar a próxima versão do Delphi para Windows ser compatível com a CLX.

Apesar dos desenvolvedores Windows geralmente não estarem familiarizados com a Qt, essa biblioteca possui larga utilização nas distribuições do Linux. Para se ter uma idéia, o desktop KDE, um dos mais utilizadas, é baseado na Qt. Outro desktop bastante difundido no mundo linux é o GNOME, baseado na biblioteca GTK. A GTK, porém, não possui versões para Windows.

         O Windows possui apenas uma GUI, disponibilizada pela própria Microsoft e que é compatível entre todas as versões de 32 bits do sistema. Em contraste, o Linux possui diversas GUI, fornecidas por diversos fabricantes. Na verdade, o Linux possui um conceito de GUI um pouco mais complexo do que o Windows. No Linux, a GUI é composta de três partes:

 

1)  Servidor X

2)  Window Manager

3)  Widget Set

 

Servidor X: O X Windows System, também conhecido simplesmente como ‘X’, é o coração da interface gráfica, gerenciando as funções mais básicas, como o display, o teclado e o mouse. Existem várias versões do X, porém a mais famosa foi a versão de número 11, fato responsável por muitos denominarem a tecnologia como X11. Apesar de possuir uma implementação muito interessante, principalmente no que diz respeito ao acesso via rede, o servidor X não possui muita complexidade, apenas as funções e rotinas básicas. Entre as funções do X11, podemos destacar:

 

Permite alternar do modo texto para o modo gráfico;

Permite a criação de um handle de desenho para o display;

Permite a impressão no Handle (Canvas) de bitmaps e texto.

 

Window Manager: Como vimos, o X11 possui a função básica de criar um handle para o modo gráfico. O Window Manager é um conjunto de APIs que gerenciam e sincronizam a criação de um ambiente “enjanelado” sobre um servidor X. Ou seja, o Window Manager cria um ambiente onde as janelas irão possuir um formato e comportamento padronizados. Por exemplo, é o Window Manager que especifica a forma como as janelas serão maximizadas e minimizadas, além de controlar aspectos de profundidade, como qual janela está ativa, qual janela está oculta ou sobreposta entre outras funções. Se fizermos uma analogia com o Windows, o servidor X forneceria as APIs necessárias para capturar o Handle de desenho do Desktop e imprimir um texto sobre a superfície do mesmo, enquanto a Window Manager seria responsável por disparar o evento OnPaint em nosso form, quando o mesmo fosse maximizado pelo usuário. Como exemplo de Window Managers, podemos citar o IceWM e o WindowMaker,este último criado por um brasileiro.

 

Widget Set: São os controles propriamente ditos. Esta biblioteca irá fornecer as APIs para criação de botões, comboboxes, listboxes, entre outros controles padronizados do sistema.

 

Destkop: Plataformas que integram um servidor X, um Window Manager e uma biblioteca de Widgets, além de fornecer aplicativos e utilitários gráficos para facilitar o uso do ambiente pelo usuário. Como exemplo de Desktops, podemos citar o KDE e o GNOME, os mais utilizados pelos usuários Linux.

 

         A Qt para Linux é baseada no servidor X11 e utilizada pelo desktop KDE.  Apesar da Qt estar na versão 2, o Kylix utiliza somente a versão 1.0 da biblioteca, mesmo que a Qt 2.2 esteja instalada no sistema. As bibliotecas da Qt 1.0 utilizadas pelo Kylix são instaladas no diretório /root/kylix/bin e deverão acompanhar os aplicativos gerados pelo Kylix. Provavelmente as próximas versões do Kylix serão compatíveis com a Qt 2.

 

         Podemos visualizar, portanto, a CLX como um conjunto de componentes de alto nível  que utilizam as APIs da GUI Qt. A CLX está dividida em quatro grupos básicos:

 

BaseCLX - São as classes básicas ou classes estruturais, como a Tobject e Tstream. As classes BaseCLX foram as que menos sofreram alterações de sintaxe em relação a VCL. Até as units referentes a BaseCLX, como a System e a Classes permaneceram com o mesmo nome.

 

VisualCLX - A Visual CLX, como o nome já indica, engloba os objetos e componentes ‘visuais’ do Delphi, como botões, menus, listboxes e outros. A VisualCLX é uma das que apresenta maiores diferenças quando comparada a VCL. Justamente pelo fato da VCL estar intimamente ligada a GUI do Windows, muitos recursos foram diferenciados na CLX. Por exemplo, a classe TwinControl não existe na CLX. Em seu lugar, podemos encontrar a classe TwidgetControl. A maioria dos componentes visuais descendem da classe TwidgetControl.

         Além disso, muitas propriedades encontradas na VisualCLX diferem em nome e sintaxe de seus equivalentes na VCL. Pelo fato das classes visuais da CLX possuirem a maior diferença de código em relação a VCL, as units referentes a VisualCLX possuem nomes diferentes, geralmente iniciados pela letra ‘Q’. Por exemplo, a unit controls se torna Qcontrols, dialogs é Qdialogs e menus é Qmenus, entre outros. Repare que outras units permanecem as mesmas, como Classes, Types e SysUtils. Esta diferenciação na nomenclatura das units é importante, pois permitirá ao Delphi 6 a utilização de classes CLX e VCL em um mesmo projeto.

  ...

Quer ler esse conteúdo completo? Tenha acesso completo