Zetta-Ømnis Soluções Tecnológicas
Desenvolvendo hoje a tecnologia do amanhã
Visite Nosso Patrocinador
Você está aqui:
DO NOT UNDERSTAND PORTUGUESE? CLICK ON THE FLAG TO CHANGE THE LANGUAGE!

Entendendo a instalação de componentes - Paths e tipos de arquivo (resumo)

Imagem meramente ilustrativa

Paths e tipos de arquivo (resumo)

Abaixo está uma tabela que resume quais arquivos podem existir em cada um dos paths que o Delphi considera. Obviamente caso seu projeto não utilize alguns dos arquivos mencionados, não significa que você precisa usá-los, mas caso faça uso deles, esta tabela será sua grande amiga daqui pra frente. Eu não vou chamar esta tabela de recomendação pessoal, porque eu tenho visto muita gente fazendo uso dos paths de forma totalmente errada, portanto, eu considero a minha abordagem como um guia definitivo para minimizar problemas. Tem horas que, para o bem maior, a gente não pode ser um "falso modesto". Use a tabela ou continue fazendo errado. A escolha é sua

  .pas .dcu .res .rc .dcr .dfm .inc .bpl .dcp .exe .dll
Search Path X *   X X X X X        
Library Path   X X **     X ** X **        
Browsing Path X                    
Package Output Directory               X      
DCP Output Directory                 X    
Output Directory                   X X
Unit Output Directory   X                  
* Este arquivo só deve ser incluído no Search Path caso você esteja compilando um projeto normal. O Search Path não deve ser usado para referenciar units em projetos de pacotes porque o Delphi não gosta de units com o mesmo nome em pacotes (BPLs) distintos.

** Este arquivo só deve ser incluído no Library Path caso ele seja requerido durante a compilação de outros projetos. No caso dos arquivos res e inc, se eles forem utilizados apenas pelo pacote no momento da geração do BPL, eles não precisam ser incluídos no Library Path. No caso dos arquivos dfm, se eles representarem telas que são acessadas apenas em tempo de projeto, tais como telas de editores de propriedade e de componentes, eles não precisam ser incluídos no Library Path

Proposta de organização de projetos e pacotes

Organização é tudo, então resolvi terminar esse artigo com uma proposta de organização de pastas de projetos que vai facilitar sua vida, caso você decida começar a usar os paths da forma certa.

Para projetos

Detalhes

  • Meu Projeto\bin - Arquivo binário finalizado. Configure esta pasta como Output Directory nas propriedades do projeto

  • Meu Projeto\bin\dcu - Units compiladas. Configure esta pasta como Unit Output Directory, nas propriedades do projeto

  • Meu Projeto\dev - Arquivos de suporte relacionados ao projeto, mas que não são compiláveis

  • Meu Projeto\dev\doc - Arquivos de documentação a respeito do projeto

  • Meu Projeto\prj - Arquivo .dpr do projeto e todos os arquivos que forem criados automaticamente pelo Delphi

  • Meu Projeto\res - Arquivos de recurso que são utilizados pelo projeto na hora da compilação do mesmo. Podem ser arquivos .res, imagens, ícones ou qualquer outro tipo de arquivo que é carregado pelo projeto e é incluído no binário finalizado, isso inclui textos, scripts, etc. Você pode incluir esta pasta no Search Path do projeto a fim de facilitar a referência dos recursos

  • Meu Projeto\src - Arquivos de código-fonte .pas exclusivos deste projeto

Observações

  • Se seu projeto tiver mais de um módulo ele conterá mais de um arquivo de projeto (.dpr). Todos estes arquivos deverão estar em Meu Projeto\prj. Você pode, se quiser, colocar cada arquivo de projeto em uma pasta separada abaixo de prj a fim de separar cada projeto. Você pode também, neste caso, diretamente em Meu Projeto\prj, colocar o arquivo de grupo de projetos (.bdsgroup ou .groupproj), o qual vai aglutinar todos os projetos de módulos individuais de forma que você possa ter acesso simplificado a partir da IDE a todos os projetos

  • Se seu projeto tiver mais de um módulo ele conterá fontes de mais de um projeto. Todos estes arquivos deverão estar em Meu Projeto\src, mas você pode, se quiser, criar pastas abaixo de Meu Projeto\src a fim de separar os códigos-fonte dos módulos

  • Se mais de um módulo utilizar um mesmo código-fonte .pas, crie a pasta Meu Projeto\lib e dentro desta coloque tais arquivos. Em seguida, em cada projeto, inclua no Search Path a pasta Meu Projeto\lib

Para pacotes

Detalhes

  • Meu Pacote\dcu - Units compiladas. Configure esta pasta como Unit Output Directory, nas propriedades do projeto e inclua ela no Library Path do Delphi

  • Meu Pacote\dev - Arquivos de suporte relacionados ao pacote, mas que não são compiláveis

  • Meu Pacote\dev\doc - Arquivos de documentação a respeito do pacote

  • Meu Pacote\prj - Nesta pasta deve haver uma subpasta para cada versão de Delphi na qual este pacote é utilizável e dentro de cada uma destas subpasta deve ser colocado o arquivo de projeto do pacote específico daquela versão de Delphi (arquivo .dpk)

  • Meu Pacote\res - Arquivos de recurso que são utilizados pelo pacote na hora da compilação do mesmo. Podem ser arquivos .res, .dcr, imagens, ícones ou qualquer outro tipo de arquivo que é carregado pelo projeto do pacote e é incluído no binário finalizado (.bpl), isso inclui textos, scripts, etc. Você pode incluir esta pasta no Search Path do projeto do pacote a fim de facilitar a referência dos recursos. Ela também poderá ser incluída no Library Path dependendo da interpretação de seu conteúdo. Por favor, veja as observações mais adiante

  • Meu Pacote\res\dfm - Arquivos de formulário exclusivamente. Por favor, veja as observações a seguir

  • Meu Pacote\src - Arquivos de código-fonte .pas exclusivos deste pacote

Observações

  • Não configure em hipótese alguma a propriedade Output Directory do projeto do pacote. Verifique-a e mantenha-a em branco

  • Não configure em hipótese alguma a propriedade DCP Output Directory do projeto do pacote. Verifique-a e mantenha-a em branco
     
  • Na pasta Meu Pacote\res também podem ser incluídos arquivos de recurso que serão utilizados por outros projetos que utilizem o seu pacote. Para entender melhor, devemos considerar que existem dois pontos de vista: ao compilar um pacote e ao compilar um projeto que use seu pacote. Diante destes dois pontos de vista, devemos entender que:
    • Quando você está desenvolvendo e compilando o seu pacote, ele está em tempo de projeto, portanto arquivos existentes na pasta Meu Pacote\res poderão ser usados para a geração do BPL final e esta pasta deverá estar listada no Search Path do projeto do pacote
    • No momento em que você compila um pacote e ele é carregado pelo Delphi, ele se torna algo em execução, logo, seu pacote estará em tempo de execução e não mais em tempo de projeto
    • Ao compilar um projeto que use seu pacote, a pasta Meu Pacote\res, deverá estar listada no Library Path APENAS se ela contiver recursos que precisarão estar disponíveis para o projeto sendo compilado. Imagens e ícones são um bom exemplo disso
  • A pasta Meu Pacote\res\dfm tem uma função importante, mas negligenciada. Como se sabe, arquivos .dfm por padrão sempre são salvos juntamente com seu arquivo .pas correspondente. Suponha que seu pacote esteja sendo carregado pelo Delphi e suponha que você esteja desenvolvendo algo que use units de seu pacote. Suponha também que você esteja referenciando alguma unit que contenha um .dfm associado. Neste caso o .dfm precisará estar disponível para seu projeto sendo compilado e para que ele saiba onde estão estes arquivos .dfm eles precisam estar listados no Library Path obviamente, mas, você NÃO PODERÁ incluir este path no Library Path porque ele contém units não compiladas (arquivos .pas) e isso seria ERRADO. Existem duas formas de resolver este problema. A forma clássica é copiar os arquivos .dfm que estão na pasta Meu Pacote\src para a mesma pasta onde os arquivos .dcu são gerados, ou seja, Meu Pacote\dcu. Eu não gosto dessa forma porque eu convencionei que na pasta Meu Pacote\dcu devem existir apenas units compiladas (arquivos .dcu). Para resolver esse problema conceitual, já que arquivos .dfm são arquivos de recurso e não units compiladas, eu crio a pasta Meu Pacote\res\dfm, copio todos os arquivos .dfm que estão na pasta Meu Pacote\src para lá e em seguida eu adiciono Meu Pacote\res\dfm ao Library Path. Se eu criar um novo formulário eu preciso apenas me lembrar de copiar o arquivo .dfm para a pasta correta. Uma variação dessa forma, que exige um controle maior, é copiar APENAS os arquivos .dfm que efetivamente precisarão ser vistos fora do projeto do pacote. A desvantagem dessa forma de trabalho com arquivos .dfm é que toda vez que você alterar um formulário, precisará se lembrar de copiar o arquivo .dfm para a pasta Meu Pacote\res\dfm 

Conclusão

Esta artigo ficou maior do que eu esperava, mas foi necessário devido a grande utilidade do seu conteúdo. Se você leu tudo com cuidado será capaz de entender e notar quando um componente ou pacote está mal elaborado quanto a distribuição de seus artefatos e poderá organizá-lo da forma correta a fim de evitar problemas futuros. Se você é um desenvolvedor de componentes e leu este artigo, não existem mais desculpas para que seus componentes sejam distribuídos de forma errada. Estejam avisados! Eu torço para que as informações compartilhadas aqui atinjam o maior número de pessoas que usam o Delphi. Nós que utilizamos esta ferramenta precisamos conhecê-la a fundo a fim de podermos tirar o máximo de proveito da mesma.


Acesso Rápido
Não digite mais que o necessário...



Escaneie este QRCode em dispositivos móveis para acessar a página atual rapidamente nestes dispositivos
Conteúdo Verificado!
#BULLSHITFREE #CLICKBAITFREE
#MONEYLESS
Este site é amigo do desenvolvedor do mundo real
Gostou do conteúdo?
Se você gostou do conteúdo que está lendo, você pode ajudar a manter este site no ar doando qualquer quantia. Use os botões abaixo para realizar sua doação.
 
É rápido, fácil e indolor :)
 

Estatísticas em tempo real

Visite Nosso Patrocinador