muitas duvidas sobre Kylix
23/03/2006
0
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...
Marco Salles
Posts
24/03/2006
Dopi
[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
27/03/2006
Marco Salles
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....
27/03/2006
Dopi
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...
27/03/2006
Martins
Muito interessante [b:663b941dd8]Daniel[/b:663b941dd8], poderiamos tb usar diretivas de compilação para diminuir algum trabalho ou o uso das mesmas é irrelevante?.
27/03/2006
Dopi
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]
28/03/2006
Martins
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;
PathDelim = {$IFDEF MSWINDOWS} ´\´; {$ELSE} ´/´; {$ENDIF} DriveDelim = {$IFDEF MSWINDOWS} ´:´; {$ELSE} ´´; {$ENDIF} PathSep = {$IFDEF MSWINDOWS} ´;´; {$ELSE} ´:´; {$ENDIF}
Valew [b:381e0ef7f6]Daniel[/b:381e0ef7f6], muito obrigado pelos esclarecimentos e sugestões.
29/03/2006
Marco Salles
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..
Obrigado....
30/03/2006
Dopi
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
Clique aqui para fazer login e interagir na Comunidade :)