Os arquivos de um projeto
O que o RAD escreve, o que é seu, as regiões geradas e as configurações do projeto.
Quem escreve o quê#
| Arquivo | Quem escreve | O que é |
|---|---|---|
src\Unit1.fxf | o RAD | a fonte da verdade do desenho, em texto estilo DFM |
src\Unit1.designer.fxi | o RAD | o LoadComponents, reescrito inteiro a cada gravação; o .fxm o traz com {$include} |
src\Unit1.fxm | os dois | o módulo: as rad_region 'fields' e rad_region 'events' são regeneradas a cada gravação; o resto é do programador |
src\AppGuard.fxm | o RAD | a rede de segurança contra queda muda; reescrito a cada gravação, não edite |
Projeto.fxp | os dois | o programa, na primeira aba: o RAD refaz o topo; o resto é do programador |
Projeto.config | o RAD | build: plataformas, configurações (Mode) e os ajustes de cada uma |
Um exemplo de .fxf:
object Form1: TForm
Caption = 'Form1'
Left = 200
Top = 120
ClientWidth = 520
ClientHeight = 360
Position = Designed
endE o código que o RAD gera dele, no .designer.fxi:
procedure TForm1.LoadComponents;
begin
SetClientBounds(200, 120, 520, 360);
Caption := 'Form1';
Position := TPosition.Designed;
end procedure;O módulo de um formulário#
module Unit1;
uses
System.Remainder,
System.WCL;
public type
TForm1 = class(TForm)
private
rad_region 'fields';
end rad_region;
rad_region 'events';
end rad_region;
protected
procedure LoadComponents; override;
end class;
public var
Form1: TForm1;
{$include Unit1.designer.fxi}
end. // Unit1As duas rad_region são regeneradas a cada gravação (os campos como Button1: TButton; e as declarações dos tratadores). Tudo fora delas é seu. Veja rad_region na linguagem: é uma região puramente léxica, que não abre escopo.
O .fxp: o RAD é dono do topo#
No .fxp, o RAD é dono do topo: a linha program/library, o comentário de abertura, as linhas {$config …} e a cláusula uses. Dali para baixo o arquivo é do programador, menos o corpo begin..end. de um projeto de janelas, que o RAD reescreve para acertar os Application.CreateForm. Quem é formulário se sabe pelo src\X.fxf, e o tema pela chamada TStyleManager.TrySetStyle do corpo: não há marcas no arquivo.
program Project1;
{$config Manifest 'Project1.manifest'}
{$config Icon 'res\Project1.ico'}
uses
System.Remainder,
AppGuard,
System.WCL,
Unit1;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.Configurações do projeto#
Projeto > Configurações… abre uma janela com abas:
| Aba | O que guarda |
|---|---|
| Versão | VerInfo: as informações de versão do executável |
| Aplicação | o ícone e o manifesto, copiados para res\ ao gravar |
| Temas | os .vsf embutidos e o tema inicial, aplicado com TrySetStyle no .fxp |
| Recursos | arquivos RCData avulsos |
| Compilação | as configurações de build e a opção da RTL pré-compilada |
As quatro primeiras viram {$config …} no .fxp e são lidas de volta ao abrir.
Ícone padrão#
Um projeto novo já nasce com ícone: o RAD embute res\AppDefault.ico (uma janelinha neutra) e, na primeira gravação, escreve uma cópia em res\<Nome>.ico do projeto e a liga com {$config Icon}. Assim nenhum aplicativo gerado sai com o ícone genérico do Windows. Um projeto aberto do disco sem ícone não ganha nenhum: ali a ausência pode ser escolha.
Configurações de build#
Na aba Compilação, cada configuração é um Mode do compilador no <Nome>.config. Um projeto novo nasce com Debug (O0, com depuração e mapa) e Release (O2), e o usuário cria quantas quiser (Homolog, Profile…). Os ajustes de cada uma são as linhas Config, Define, UserVar e SysConst do arquivo, com escopo na configuração escolhida ou em "(todas as configurações)" (o escopo All). A saída vai para bin\($PlatformMode), então cada configuração tem a sua pasta; o RAD resolve o OutputPath (e o ExeOutput, que manda mais) para saber o que o F9 executa. Veja a configuração do compilador.
O __history#
Como no Delphi: antes de sobrescrever um arquivo do projeto, a versão que está no disco vai para um __history ao lado dele, com o sufixo .~N~ (o maior N é o mais recente): o .fxp e o .config na pasta do projeto; o .fxm, o .fxf e o .designer.fxi em src\__history. Só as N mais novas ficam; Histórico = 0 desliga a cópia (o que já existe não é apagado).