Receber por email
← Voltar para o catálogo

DevExpress/DEXT Components

Standards for using DevExpress (DEXT) components in Delphi VCL applications

42estrelas
Atualizado há 7 meses

Ver no GitHub ↗ Licença: MIT

Como adicionar

/plugin marketplace add delphicleancode/delphi-spec-kit

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/devexpress-dext-components-delphicleancode/svg)](https://www.skillteca.com.br/skills/devexpress-dext-components-delphicleancode)

Alerta por categoria

Receba novas skills de Design e Frontend toda segunda

1 email curto, só com as skills novas de Design e Frontend. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

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 TcxDBTreeList for 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

  • [ ] TdxSkinController configured in the main form?
  • [ ] Grids configured with OptionsData (read-only when appropriate)?
  • [ ] Footer summaries configured with BR formats (R$ #,##0.00)?
  • [ ] TdxLayoutControl used for editing forms?
  • [ ] Grid columns with Caption, Width and Alignment?
  • [ ] Filters using DataController.Filter (not SQL)?
  • [ ] Export via cxGridExportLink?
  • [ ] Component prefixes following the standard table?
Compartilhar X LinkedIn