Devexpress components
Skill delphicleancode/delphi-spec-kit/.gemini/skills/devexpress-components
An opinionated ecosystem of rules, skills, and steerings to elevate Delphi development to a state-of-the-art level with Artificial Intelligence.
npx -y skills add delphicleancode/delphi-spec-kit --skill devexpress-componentsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Standards for using DevExpress (DEXT) components in Delphi VCL applications
SKILL.md
7.0 KB, as published. Nobody here has run it
DevExpress (DEXT) Components — Skill
Use this skill when developing rich interfaces with DevExpress (DEXT) components for Delphi VCL.
When to Use
- When creating advanced grids with
TcxGrid - When using
TcxDBTreeListfor hierarchical structures - When implementing layout managers (
TdxLayoutControl) - When customizing skins and themes
Main Components
| Component | Usage | Prefix |
|---|---|---|
TcxGrid | Advanced grid with grouping, filters, summaries | grd |
TcxGridDBTableView | Data-aware tabular view | tvw |
TcxGridDBBandedTableView | View with grouped bands/columns | btvw |
TcxGridDBCardView | Card view | cvw |
TcxDBTreeList | TreeList data-aware | trl |
TdxLayoutControl | Responsive layout manager | lyt |
TdxLayoutGroup | Grupo dentro de layout | lgrp |
TdxLayoutItem | Item within layout | litm |
TcxDBTextEdit | Edit text data-aware | edt |
TcxDBComboBox | ComboBox data-aware | cmb |
TcxDBDateEdit | Date picker data-aware | dte |
TcxDBCurrencyEdit | Data-aware currency editor | cur |
TcxDBCheckBox | Checkbox data-aware | chk |
TcxDBLookupComboBox | Lookup combo data-aware | lcb |
TcxDBMemo | Memo data-aware | mmo |
TdxBarManager | Toolbar/ribbon | bar |
TdxRibbon | Ribbon UI | rbn |
TdxNavBar | Navigation Bar | nav |
TdxSkinController | Skin controller | skn |
TcxPageControl | Advanced PageControl | pgc |
TcxGroupBox | Styled GroupBox | grp |
TcxGrid Configuration
// Criaction programática de colunas
procedure TfrmCustomerList.ConfigureGrid;
var
LView: TcxGridDBTableView;
begin
LView := grdCustomers.Views[0] as TcxGridDBTableView;
LView.DataController.DataSource := dsCustomers;
// Configurar comportamento
LView.OptionsData.Editing := False; // Somente leitura
LView.OptionsData.Deleting := False;
LView.OptionsData.Inserting := False;
LView.OptionsView.GroupByBox := True; // Agrupamento visual
LView.OptionsView.Footer := True; // Rodapé com sumários
LView.OptionsView.Indicator := True; // Indicador de linha
LView.OptionsCustomize.ColumnFiltering := True;
LView.OptionsCustomize.ColumnSorting := True;
LView.OptionsSelection.MultiSelect := True;
// Configurar colunas individualmente
ConfigureColumn(LView.GetColumnByFieldName('name'), 'Nome', 200);
ConfigureColumn(LView.GetColumnByFieldName('cpf'), 'CPF', 120);
ConfigureColumn(LView.GetColumnByFieldName('email'), 'E-mail', 250);
end;
procedure TfrmCustomerList.ConfigureColumn(
AColumn: TcxGridDBColumn; const ACaption: string; AWidth: Integer);
begin
if not Assigned(AColumn) then Exit;
AColumn.Caption := ACaption;
AColumn.Width := AWidth;
AColumn.HeaderAlignmentHorz := taCenter;
end;
Summaries in the Grid
// Sumário no Footer
procedure ConfigureFooterSummary(AView: TcxGridDBTableView);
var
LSummary: TcxGridDBTableSummaryItem;
begin
AView.DataController.Summary.FooterSummaryItems.Clear;
LSummary := AView.DataController.Summary.FooterSummaryItems.Add
as TcxGridDBTableSummaryItem;
LSummary.FieldName := 'value';
LSummary.Kind := skSum;
LSummary.Format := 'Total: R$ #,##0.00';
LSummary.Column := AView.GetColumnByFieldName('value');
LSummary := AView.DataController.Summary.FooterSummaryItems.Add
as TcxGridDBTableSummaryItem;
LSummary.FieldName := 'id';
LSummary.Kind := skCount;
LSummary.Format := 'Registros: %d';
LSummary.Column := AView.GetColumnByFieldName('name');
end;
TdxLayoutControl (Responsive Layout)
// Organizaction de formulário com LayoutControl
// Vantagens: responsivo, reposiciona automaticamente, visual consistente
procedure TfrmCustomerEdit.ConfigureLayout;
begin
lytMain.BeginUpdate;
try
// Grupo de data pessoais
lgrpPersonal.Caption := 'Dados Pessoais';
lgrpPersonal.LayoutDirection := ldHorizontal;
// Grupo de address
lgrpAddress.Caption := 'Endereço';
lgrpAddress.LayoutDirection := ldHorizontal;
// Configurar itens
litmName.Control := edtName;
litmName.CaptionOptions.Text := 'Nome:';
litmName.CaptionOptions.Width := 80;
finally
lytMain.EndUpdate;
end;
end;
Skinning / Themes
// Aplicar skin globalmente
uses
dxSkinsCore,
dxSkinOffice2019Colorful; // Skin específico
procedure TfrmMain.ApplySkin;
begin
// Via SkinController (recomendado)
sknController.NativeStyle := False;
sknController.SkinName := 'Office2019Colorful';
// OU programaticamente
cxLookAndFeelController.NativeStyle := False;
cxLookAndFeelController.SkinName := 'Office2019Colorful';
end;
// Skins populares: 'Office2019Colorful', 'WXI', 'Metropolis',
// 'MetropolisDark', 'TheBezier', 'Fluent', 'Office2019DarkGray'
Filters in the Grid
// Filtro programático
procedure TfrmCustomerList.ApplyFilter(const AField, AValue: string);
var
LView: TcxGridDBTableView;
begin
LView := grdCustomers.Views[0] as TcxGridDBTableView;
LView.DataController.Filter.Root.Clear;
LView.DataController.Filter.Root.AddItem(
LView.GetColumnByFieldName(AField),
foLike,
'%' + AValue + '%',
AValue
);
LView.DataController.Filter.Active := True;
end;
// Limpar filtro
procedure TfrmCustomerList.ClearFilter;
begin
(grdCustomers.Views[0] as TcxGridDBTableView)
.DataController.Filter.Root.Clear;
end;
Grid Export
uses
cxGridExportLink;
// Exportar para Excel
procedure TfrmCustomerList.ExportToExcel;
begin
cxGridExportLink.ExportGridToXLSX(
'customers.xlsx',
grdCustomers,
False, // AExpand
True, // AUseNativeFormat
True // AShowProgress
);
end;
// Exportar para PDF
procedure TfrmCustomerList.ExportToPDF;
begin
cxGridExportLink.ExportGridToPDF(
'customers.pdf',
grdCustomers
);
end;
DEXT Conventions
| Appearance | Convention |
|---|---|
| Prefixes | Follow the table above (grd, tvw, lyt, etc.) |
| Skins | Use TdxSkinController in the main form |
| Layout | Prefer TdxLayoutControl to manual positioning |
| Grid | Configure at FormCreate, never at design-time for dynamic columns |
| Filters | Use DataController.Filter — do not filter via SQL when possible |
| Summaries | Configure FooterSummaryItems instead of calculating manually |
| Exports | Use cxGridExportLink — do not redeploy export |
Checklist for DEXT Projects
-
TdxSkinControllerconfigured in the main form? - Grids configured with
OptionsData(read-only when appropriate)? - Footer summaries configured with BR formats (
R$ #,##0.00)? -
TdxLayoutControlused for editing forms? - Grid columns with
Caption,WidthandAlignment? - Filters using
DataController.Filter(not SQL)? - Export via
cxGridExportLink? - Component prefixes following the standard table?