Pergunta

Estou desenvolvendo um pacote de componentes IDE-registrados, a maioria dos quais são derivados de uma classe base TFrame. Existem também várias formas de diálogo personalizadas que são chamados por esses componentes, incluídos no pacote. Eu estou trabalhando em Delphi 2007.

Eu estou percebendo que às vezes quadros e formar unidades, que normalmente têm um arquivo DFM associados, nem sempre mostram o arquivo DFM "embaixo" (acessível através da pequena [+] treeview nó expansor) debaixo deles. Se eu adicionar um arquivo PAS baseada em formulário existente, por exemplo, via botão direito do mouse sobre o projeto BPL (no Project Manager) -> Adicionar, ele não mostra o arquivo DFM na listagem.

Se eu Adicionar novo, embora, e criar uma nova forma ou estrutura da unidade no projeto, ele mostra como o item de dois arquivo aninhado típico no Project Manager. Ele também mostra que maneira se eu arrastar um formulário existente a partir de outro projeto no Grupo de Projecto para este projecto BPL em questão.

Parece que este deve ser consistente, e eu prefiro os dois arquivos que mostram quando a unidade é um quadro ou formulário.

É este o indicativo de algo errado no arquivo de projeto? Estou adicionando formas / quadros existentes a este pacote incorretamente? Se sim, como devo acrescentar unidades forma / quadro existentes, de modo que ambos os arquivos mostram no Project Manager lista?

* ACTUALIZAÇÃO *

A partir sugestão de Alen abaixo:

Eu tentei adicionar a {$ R * .dfm} directiva à unidade da forma, e não forçar o arquivo DFM para mostrar-se ao adicioná-lo ao meu pacote de BPL / projeto. Adicionando {$ R * .dfm} para o próprio arquivo de projeto (o que eu não acho que é o que você quis dizer, mas eu pensei que eu ia tentar) não quer trabalhar. Será que esta técnica só trabalho com projetos EXE?

Possivelmente (provavelmente) relacionado, tentando construir com essa directiva em lugares dá-me isto:

[DCC erro] E2161 Warning: Duplicate recurso: Tipo 10 (RCDATA), ID TTESTTREEVIEW; Ficheiro E: \ Projects \ recurso MyApp \ Components \ TTestTreeViewFrame.dfm mantido; Arquivo E:. \ Resource Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm descartado

"Keping" e "descartar" o mesmo arquivo ??


Mais tarde: Parece que esta questão "duplicado recurso" pode estar relacionado com este . Não certo, mas pelo menos em um exemplo ambos aconteceram simultaneamente.

Foi útil?

Solução

Vegar está no caminho certo. Para que o gerente de projeto para exibir o nó .dfm, ele precisa saber que um formulário / frame / datamodule está associado com o arquivo pas. Ele olha para o {Form1} comentário no .dpk ou .dpr arquivo para obter essa informação. Se, ao adicionar um arquivo para o projeto, o IDE não reconhece que há uma .dfm associado a ele, verifique se o arquivo .pas tem a {$ R * .dfm} directiva em claro. Por isso, não deve ser enterrado em uma IFDEF ou de outra forma obscurecido por erros de sintaxe potenciais no arquivo. O IDE usa a presença desta directiva para decidir se deve ou não tentar abrir o .dfm no designer.

O IDE não apenas tomar como certo que se houver uma Unit1.pas e uma Unit1.dfm, que eles estão realmente deveria estar juntos. Considere que você criou uma nova unidade de forma e foi chamado Unit1. Agora você excluiu apenas o Unit1.pas e depois só fui e criou uma nova unidade, que seria dado o nome Unit1.pas. Não há nenhuma referência ao velho, obsoleto Unit1.dfm lá fora no disco a partir deste novo, do mesmo-base chamada, Unit1.pas. Seria estranho e confuso se o IDE foram de apenas cega abrir esse .dfm.

Outras dicas

Se você der uma olhada na fonte do projeto para o pacote, você vai encontrar uma diferença na seção Contém-:

contains
  Unit2 in 'unit2.pas',
  Unit1 in 'Unit1.pas' {Form1};

Unit2 irá mostrar como uma única unidade, e unit1 irá mostrar como uma unidade com um formulário. Como você pode ver, unit1 tem um {Form1} comentário que unit2 falta.

Eu não sei se é possível adicionar uma unidade existente para que este comentário é gerado automaticamente.

Outra razão para qualquer outra pessoa que está à procura de uma outra solução é quando você renomeia arquivo pas feche todos os arquivos e reabrir. A versão anterior será reaberta e deve ser removido com anteriormente denominado adicionado ao projeto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top