Entendendo a instalação de componentes - Paths e tipos de arquivo (resumo)
Escrito por Carlos B. Feitoza Filho | |
Categoria: Artigos | |
Categoria Pai: Addicted 2 Delphi! | |
Acessos: 56605 |
Páginas dentro deste artigo
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 |
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.