Fenner
RAD

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ê#

ArquivoQuem escreveO que é
src\Unit1.fxfo RADa fonte da verdade do desenho, em texto estilo DFM
src\Unit1.designer.fxio RADo LoadComponents, reescrito inteiro a cada gravação; o .fxm o traz com {$include}
src\Unit1.fxmos doiso módulo: as rad_region 'fields' e rad_region 'events' são regeneradas a cada gravação; o resto é do programador
src\AppGuard.fxmo RADa rede de segurança contra queda muda; reescrito a cada gravação, não edite
Projeto.fxpos doiso programa, na primeira aba: o RAD refaz o topo; o resto é do programador
Projeto.configo RADbuild: plataformas, configurações (Mode) e os ajustes de cada uma

Um exemplo de .fxf:

texto
object Form1: TForm
  Caption = 'Form1'
  Left = 200
  Top = 120
  ClientWidth = 520
  ClientHeight = 360
  Position = Designed
end

E o código que o RAD gera dele, no .designer.fxi:

Fenner
procedure TForm1.LoadComponents;
begin
  SetClientBounds(200, 120, 520, 360);
  Caption := 'Form1';
  Position := TPosition.Designed;
end procedure;

O módulo de um formulário#

Fenner
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. // Unit1

As 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.

Fenner
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:

AbaO que guarda
VersãoVerInfo: as informações de versão do executável
Aplicaçãoo ícone e o manifesto, copiados para res\ ao gravar
Temasos .vsf embutidos e o tema inicial, aplicado com TrySetStyle no .fxp
Recursosarquivos RCData avulsos
Compilaçãoas 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).