WCL
Os componentes visuais para Windows — formulários, controles, estilos, o editor de código e as árvores virtuais.
A WCL é a biblioteca de componentes visuais da BedRock: TForm, TButton, TEdit, TListView, TTreeView, menus, barras de ferramenta e mais. Ela desenha sobre a API do Windows e segue de perto o modelo do Delphi (TComponent, Parent, Owner, propriedades e eventos), de modo que quem conhece a VCL se orienta de imediato.
Uma janela, à mão#
O RAD gera código assim, e você pode escrevê-lo direto:
program HelloGui;
{$config Manifest 'HelloGui.manifest'}
uses
System.Remainder,
System.WCL,
MainForm;
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.module MainForm;
uses
System.Remainder,
System.WCL;
public type
TMainForm = class(TForm)
private
FLabel: TLabel;
FButton: TButton;
FClicks: Int32;
procedure ButtonClick(Sender: TObject);
protected
// chamado pelo Load do TComponent: aqui nascem os controles
procedure LoadComponents; override;
end class;
public var
MainForm: TMainForm;
procedure TMainForm.LoadComponents;
begin
SetClientBounds(200, 120, 320, 140);
Caption := 'Olá, Fenner';
FLabel := TLabel.Create(Self);
FLabel.Parent := Self;
FLabel.SetBounds(16, 16, 280, 24);
FLabel.Caption := 'Nenhum clique ainda';
FButton := TButton.Create(Self);
FButton.Parent := Self;
FButton.SetBounds(16, 56, 120, 28);
FButton.Caption := 'Clique aqui';
FButton.OnClick := ButtonClick;
end procedure;
procedure TMainForm.ButtonClick(Sender: TObject);
begin
Inc(FClicks);
FLabel.Caption := 'Cliques: ' + IntToUStr(FClicks);
end procedure;
end.- O projeto (
.fxp) chamaApplication.Initialize,Application.CreateForm(TMainForm, MainForm)eApplication.Run. - O formulário é uma classe que herda de
TForm. O métodoLoadComponents(chamado peloLoaddoTComponent) é onde os controles nascem: cada um é criado comCreate(Self), ligado ao pai porParente posicionado comSetBounds. - Um evento é um tipo procedural
of object:FButton.OnClick := ButtonClick;. - O
{$config Manifest …}liga o Common Controls 6 (sem ele o Windows desenha tudo no estilo clássico), eConfig All AppType GUIna configuração evita a janela de console.
O mesmo código é o que o RAD escreve a partir do desenho.
O que a WCL tem#
| Grupo | Componentes (os mesmos da paleta do RAD) |
|---|---|
| Padrão | TLabel, TEdit, TMemo, TButton, TCheckBox, TRadioButton, TListBox, TComboBox, TGroupBox, TPanel, TStaticText, TRadioGroup, TScrollBar, TScrollBox |
| Adicionais | TShape, TBevel, TMaskEdit, TLabeledEdit, TButtonedEdit, TImage, TPaintBox, TSplitter, TColorBox, TColorListBox, TLinkLabel, TFlowPanel, TGridPanel |
| Win32 | TTabControl, TRichEdit, TTrackBar, TProgressBar, TUpDown, THotKey, TDateTimePicker, TMonthCalendar, TTreeView, TListView, THeaderControl, TStatusBar, TToolBar, TComboBoxEx, TCoolBar |
| Não visuais | TTimer, TMainMenu, TPopupMenu |
Estilos visuais#
A WCL carrega estilos visuais (.vsf), no mesmo modelo dos estilos do Delphi, embutidos no executável com {$config WCLStyle 'arquivo'}. O compilador lista os estilos que traz com fc --wclstyles. O estilo inicial se aplica com TStyleManager.TrySetStyle, e os controles, as barras de rolagem e o editor de código seguem o tema. O módulo System.WCL.Styles e os StyleAPI, StyleBitmap e SysStyles o sustentam.
O editor de código: SynEdit#
O SynEdit foi portado para a WCL: realce de sintaxe, números de linha, dobra de blocos, localizar e substituir e completar. Vem com dezenas de realces (cada um é um módulo System.WCL.SynEdit.<Linguagem>), de Pascal, SQL, C, C++, C#, Java, Kotlin, Go, Rust, Python, Ruby, Lua, JavaScript, TypeScript, PHP, HTML, CSS, JSON, XML, YAML, TOML e Markdown a Dockerfile, PowerShell, Bat e Makefile, e da própria Fenner (System.WCL.SynEdit.Fenner). É o editor que o RAD usa.
Árvores virtuais#
O System.WCL.VirtualTrees traz uma árvore virtual no estilo do VirtualTreeView, para volumes grandes de dados.
Direct2D#
O System.D2D1 traz as declarações do Direct2D para desenho acelerado por hardware.