muitas duvidas sobre Kylix

23/03/2006

1

o titulo da pergunta é esse mesmo , não achei nada melhor para alguem que não dabe nada a respeito

ate para ter duvida de algo qua não se sabe é dificil ??? Alguem de voce tem dúvida de como o uranio é enriquecido ????

eu estou lendo a respeito e me surgiu uma varias duvidas ??

Para se desenvolver um aplicativo que rode em linux tem que se inicializar este projeto em Cross_Plataform ???
File /new/CLX.Application ???

Quando se abrre um aplicativo , seguindo esta linha(File /new/CLX.Application ) , não se esta usando VCL ????

Os componentes que são exclusivos da VCL some do IDE do delphi , ou continuam lá , porem ao usa-los teremos erros ????

Primeiro são essas duvidas .... Tem mais , tem muito mais , mas para passar adiante devo saber primeiro o basico do basico...


Responder

Posts

24/03/2006

Dopi

Ola Marco,

[quote:7b64ce4611=´Marco Salles´]
Para se desenvolver um aplicativo que rode em linux tem que se inicializar este projeto em Cross_Plataform ???
File /new/CLX.Application ???
[/quote:7b64ce4611]
Isso mesmo...

[quote:7b64ce4611=´Marco Salles´]
Quando se abrre um aplicativo , seguindo esta linha(File /new/CLX.Application ) , não se esta usando VCL ????
[/quote:7b64ce4611]
Exato... A CLX é muito parecida com a VCL, apesar de ter sido re-escrita desde o inicio (TObject)... Algumas units do Delphi são compartilhadas pela VCL /CLX... mas vc pode notar que todas as Units adcionadas pelos componentes iniciam com a letra Q QForms, QButtons, etc... Ou seja... é outro código fonte...

[quote:7b64ce4611=´Marco Salles´]
Os componentes que são exclusivos da VCL some do IDE do delphi , ou continuam lá , porem ao usa-los teremos erros ????
[/quote:7b64ce4611]
A IDE do Delphi tenta ocultar todos os componentes que não são compatíveis com a CLX... Vc notará que alguns componentes sumiram porém outros permanecem lá.. mas na verdade é a versão CLX deles... Se vc usar componentes VCL em uma aplicação CLX, provavelmente terá vários erros de compilação (conflitos entre as units VCL / CLX)... mesmo que vc consiga compila-lo no Delphi... vc NAO será capaz de ser compilado no Kylix


Responder

27/03/2006

Marco Salles

Dopi , muito obrigado pelas confirmaçoes ... Mas coom eu disse são muitas ???

Então , apos criar uma aplicação Cros_Plataforma , para executar no ambiente Linux voce precisa compilar este projeto .. Isto é feito no proprio Linux com uma aplicativo chamapo Kynix

Este aplicatico\Compilador , acho que esta na fase tres , Pois ja vi algo se referindo a ele assim Kynix3,0 é um aplicativo que ja vem no cd do delphi e tem que instala-lo nas maquinas aonde tem o sistema operacional Linux ???

Agora , porque esse duplo trabalho , caso as afirmaçoes anteriores sejam verdadeiras?? Porque não exise um cd do delphi que se instala no linux e se desenvolve por la mesmo????

E antes dessa plataforma Cros , acho que chegou no delphi 6.0 , qual era o procedimento???

Como se pode notar amigo Dopi , as duvidas são muitas e ainda estou muito inseguro com tudo isso :cry: :cry: :cry:

Muito obrigado e desde ja agradecoimentos....


Responder

27/03/2006

Dopi

O Kylix 3 é um produto completo... com uma IDE muito semelhante a do Delphi 7, e com um compilador de ObjectPascal que gera código nativo em Linux, porém só roda no Linux...

Se o programador decidir trabalhar apenas no Kylix... sem problemas... alias... tem problemas sim... A IDE do Kylix não se dá muito bem com as novas distro de Linux com kernel superior a 2.4... O Debug não funciona... o Code Completion tb não funciona...

Então o que se costuma fazer é usar a IDE do Delphi 7 para criar aplicações CLX e Compila-la no Delphi 7 para criar um programa compatívle com Win32... e depois, é só abrir o projeto na IDE do Kylix e compila-lo para Linux

Note portanto, que diferente do Java e .NET... vc irá gerar dois executáveis totalmente diferentes... nativos para as devidas plataformas... Porém usará o mesmíssimo código fonte...

Existe ainda a possibilidade de compilar para Linux dentro da IDE do Delphi 7, usando o [url=http://crosskylix.untergrund.net/]Cross-Kylix[/url]... Mas nesse caso vc não consegue rodar o executável Linux para ver como ficou...


Responder

27/03/2006

Martins

O Kylix 3 é um produto completo... com uma IDE muito semelhante a do Delphi 7, e com um compilador de ObjectPascal que gera código nativo em Linux, porém só roda no Linux... Se o programador decidir trabalhar apenas no Kylix... sem problemas... alias... tem problemas sim... A IDE do Kylix não se dá muito bem com as novas distro de Linux com kernel superior a 2.4... O Debug não funciona... o Code Completion tb não funciona... Então o que se costuma fazer é usar a IDE do Delphi 7 para criar aplicações CLX e Compila-la no Delphi 7 para criar um programa compatívle com Win32... e depois, é só abrir o projeto na IDE do Kylix e compila-lo para Linux Note portanto, que diferente do Java e .NET... vc irá gerar dois executáveis totalmente diferentes... nativos para as devidas plataformas... Porém usará o mesmíssimo código fonte... Existe ainda a possibilidade de compilar para Linux dentro da IDE do Delphi 7, usando o [url=http://crosskylix.untergrund.net/]Cross-Kylix[/url]... Mas nesse caso vc não consegue rodar o executável Linux para ver como ficou...


Muito interessante [b:663b941dd8]Daniel[/b:663b941dd8], poderiamos tb usar diretivas de compilação para diminuir algum trabalho ou o uso das mesmas é irrelevante?.


Responder

27/03/2006

Dopi

Isso mesmo Martins... as diretivas de compilação [b:c57e01b3fb]IFDEF, IFNDEF[/b:c57e01b3fb] são muito importantes para manter o mesmo código... Isso é necessário devido as diferenças dos sistemas operacionais, como nome de arquivos, paths, etc...

Podemos usar [b:c57e01b3fb]IFDEF MSWINDOWS[/b:c57e01b3fb] ou [b:c57e01b3fb]IFDEF LINUX[/b:c57e01b3fb]

Exemplo: A função abaixo é usada para Copiar Arquivos no Windows e no Linux... No Windows, temos uma API do windows também chamada CopyFile que faz o serviço... porém no Linux é necessário usar Streams..

Usando IFDEFs instruimos o compilador a processar apenas uma parte do código, dependendo do resultado do IFDEF

function CopyFileTo(AFromFileName, AToFileName : String;
   const AFailIfExists : Boolean) : Boolean;
{$IFNDEF MSWINDOWS}
var LStream : TStream;
{$ENDIF}
begin
  {$IFDEF MSWINDOWS}
    Result := CopyFile(PChar(AFromFileName), PChar(AToFileName), AFailIfExists);
  {$ELSE}
    if FileExists(AToFileName) and AFailIfExists then
       Result := False
    else
     begin
       LStream := TFileStream.Create(AFromFileName, fmOpenRead or fmShareDenyWrite);
       try
          with TFileStream.Create(AToFileName, fmCreate) do
             try
                CopyFrom(LStream, 0);
             finally
                Free;

             end;
       finally
          FreeAndNil(LStream);
       end;
       Result := True;


     end;
  {$ENDIF}
end;



Outra boa prática é usar as constantes do Delphi / Kylix...

Extraido de [b:c57e01b3fb]SysUtils.pas[/b:c57e01b3fb]
  PathDelim  = {$IFDEF MSWINDOWS} ´\´; {$ELSE} ´/´; {$ENDIF}
  DriveDelim = {$IFDEF MSWINDOWS} ´:´; {$ELSE} ´´;  {$ENDIF}
  PathSep    = {$IFDEF MSWINDOWS} ´;´; {$ELSE} ´:´; {$ENDIF}

Ou seja, ao invez de usarmos [b:c57e01b3fb]´\´[/b:c57e01b3fb] para compor um nome de arquivo, usamos [b:c57e01b3fb]PathDelim[/b:c57e01b3fb]

Ao invez de usar #13 ou 10 para quebra de linha... usamos [b:c57e01b3fb]sLineBreak[/b:c57e01b3fb]


Responder

28/03/2006

Martins

Isso mesmo Martins... as diretivas de compilação [b:381e0ef7f6]IFDEF, IFNDEF[/b:381e0ef7f6] são muito importantes para manter o mesmo código... Isso é necessário devido as diferenças dos sistemas operacionais, como nome de arquivos, paths, etc... Podemos usar [b:381e0ef7f6]IFDEF MSWINDOWS[/b:381e0ef7f6] ou [b:381e0ef7f6]IFDEF LINUX[/b:381e0ef7f6] Exemplo: A função abaixo é usada para Copiar Arquivos no Windows e no Linux... No Windows, temos uma API do windows também chamada CopyFile que faz o serviço... porém no Linux é necessário usar Streams.. Usando IFDEFs instruimos o compilador a processar apenas uma parte do código, dependendo do resultado do IFDEF
function CopyFileTo(AFromFileName, AToFileName : String;
   const AFailIfExists : Boolean) : Boolean;
{$IFNDEF MSWINDOWS}
var LStream : TStream;
{$ENDIF}
begin
  {$IFDEF MSWINDOWS}
    Result := CopyFile(PChar(AFromFileName), PChar(AToFileName), AFailIfExists);
  {$ELSE}
    if FileExists(AToFileName) and AFailIfExists then
       Result := False
    else
     begin
       LStream := TFileStream.Create(AFromFileName, fmOpenRead or fmShareDenyWrite);
       try
          with TFileStream.Create(AToFileName, fmCreate) do
             try
                CopyFrom(LStream, 0);
             finally
                Free;

             end;
       finally
          FreeAndNil(LStream);
       end;
       Result := True;


     end;
  {$ENDIF}
end;
Outra boa prática é usar as constantes do Delphi / Kylix... Extraido de [b:381e0ef7f6]SysUtils.pas[/b:381e0ef7f6]
  PathDelim  = {$IFDEF MSWINDOWS} ´\´; {$ELSE} ´/´; {$ENDIF}
  DriveDelim = {$IFDEF MSWINDOWS} ´:´; {$ELSE} ´´;  {$ENDIF}
  PathSep    = {$IFDEF MSWINDOWS} ´;´; {$ELSE} ´:´; {$ENDIF}
Ou seja, ao invez de usarmos [b:381e0ef7f6]´\´[/b:381e0ef7f6] para compor um nome de arquivo, usamos [b:381e0ef7f6]PathDelim[/b:381e0ef7f6] Ao invez de usar #13 ou 10 para quebra de linha... usamos [b:381e0ef7f6]sLineBreak[/b:381e0ef7f6]


Valew [b:381e0ef7f6]Daniel[/b:381e0ef7f6], muito obrigado pelos esclarecimentos e sugestões.


Responder

29/03/2006

Marco Salles

obrigado dopi obrigado martins . Mas com eu disse minhas dúvidas são muitas e eu ia chaegar tb nas diretivas de compilação;;

Mas ja que foi abordada então , vamos proseguir.

File -> New --> CLX.Application

Abro un novo projeto ..

Nesse mesmo projeto ao usar chamadas a funçoes da API do windows , na hora de compilar , não daria ERRO.. pois supostamente essas funçoes não estão disponiveis no Linux ????.. Acho que o própria aplicação ja deva avisar de alguma incompatibilidade sem ter que esperar este resultado na compilação do Kylix :?: :?: :?:

Duvida 2) Ao usar as diretivas de compilação , ainda assim sera necessário compilar o programa no Kylix ou nesse caso , não precisaria.
Não ficou muito claro á resposta dada ao Martins , apesar de particularmente eu ja conhecer a idéia das diretivas..

Muito interessante Daniel, poderiamos tb usar diretivas de compilação para diminuir algum trabalho ou o uso das mesmas é irrelevante?.


Obrigado....


Responder

30/03/2006

Dopi

Marco,

Não há vantagem alguma em usar a CLX no Delphi se vc NAO pretende escrever aplicações multiplataforma... ou seja, compila-las no Kylix para Linux

Quando vc usa diretivas de compilação o Compilador ignora completamente o código que está entre um bloco IFDEF, ENDIF que NAO satisfaça a condição... Então se vc quer chamar um API na versao Windows do sistema... sem problemas... desde que ela esteja dentro de um IFDEF MSWINDOWS ou IFNDEF LINUX. Veja o exemplo que postei acima...

Usar APIs do Windows deve ser evitado a qualquer custo, a não ser que vc consiga uma função equivalente no Linux... Caso contrário o seu software nunca poderá ser migrado para Linux, mantendo todas as caracteristicas e funcionabilidade da versao Windows


Responder