Referência de API — VB6
Documentação de referência do SDK VB6, extraída da fonte real em vb6\sdk\. Documenta apenas membros declarados Public (e Event, que em UserControl é exposto). Assinaturas reproduzidas como no código; a linha de propósito é inferida do corpo/uso.
O SDK VB6 é distribuído em nível de fonte (projeto NeXTFramework) ou como OCX único compilado. Referências externas usadas: ADODB 2.8, stdole2, e os OCX THREED32, MSMASK32, MSCOMCTL, MSCOMCT2.
Conceito em 1 minuto
O SDK é dirigido por metadados, não um gerador de código. Cada controle uc* na tela carrega dois metadados de projeto:
DataField— a coluna que ele representa.TypeControl— o tipo do valor (TipoCaracter), que decide formatação e a
conversão para literal SQL (função central Conv).
O engine (modForms.bas) percorre os controles do Form em tempo de execução, monta o SQL e persiste. Auditoria (codusuario/time_stamp) só é gravada quando a coluna existe (CampoVerificarExistencia), usando o global gCodUsuario.
Nada é gerado em disco. A fonte da verdade é o metadado, lido a cada operação.
Quick-start (padrão low-code de um cadastro)
' 1) configurar a base uma vez (Sub Main / carga do app)
gConfigDB.DBProvider = DBPROVIDERMSACCESS ' ou DBPROVIDERMYSQL / DBPROVIDERSQLSERV
gConfigDB.DBPath = App.Path & "\app.mdb"
AbreConexao True
SDKConfigPadrao
' 2) na tela, arraste controles low-code e defina no designer:
' txtCodigo (ucCodigo) -> DataField="codcli", PK=True (a PK)
' txtNome (ucText) -> DataField="nome"
' cboCidade (ucCombo) -> DataField="codcidade", SQL="SELECT codcidade,nome FROM tbcidade"
' ucToolbar1 -> DataTable="tbcliente", DataField="codcli"
' 3) o ucToolbar faz o CRUD automaticamente (Novo/Salvar/Navegar/Limpar).
' O form escreve SÓ o que o toolbar nao faz: excluir + load-on-code.
Private Sub cmdToolbar_CommandClick(ByVal p_TypeCommand As TypeCommand)
If p_TypeCommand = TC_Del Then
FormExcluir Me, "tbcliente", txtCodigo, "codcli"
Inicio
End If
End Sub
Private Sub txtCodigo_Validate(Cancel As Boolean) ' digitar o codigo carrega o registro
FormLerRegistro Me, "tbcliente", txtCodigo, "codcli"
End Sub
Um cadastro CRUD completo custa ~3 linhas de código de CRUD (só oTC_Del). Novo/Salvar/Próximo/Anterior/Limpar são 100% automáticos noucToolbar.
PARTE 1 — Funções (módulos e classes)
modMain.bas
Public Sub Main()— ponto de entrada do projeto/host.
modForms.bas — Engine de formulários (CRUD automático)
Motor genérico que percorre os controles uc* de um Form (via DataField/ TypeControl) e monta SELECT/INSERT/UPDATE/DELETE automaticamente. Auditoria só é gravada quando a coluna existe; filtro por empresa só quando p_CodEmpresa > 0.
Public Sub FormLerRegistro(ByRef p_Form As Form, ByVal p_Table As String, ByRef p_txtPK As Object, ByVal p_PK As String, Optional ByRef p_txtPKFK As ucText, Optional ByVal p_PKFK As String, Optional ByVal p_Operacao As QTipoOperacao = LerRegistro, Optional ByVal p_CodEmpresa As Long = 0)— lê um registro pela PK (ou PK+PKFK), preenche todos os controles ligados porDataField, carrega grids de detalhe e coloca o form emFEAlteracao. Suporta navegação Ler/Próximo/Anterior.Public Sub FormSalvar(ByRef p_Form As Form, ByVal p_Table As String, ByRef p_txtPK As VBControlExtender, ByVal p_PK As String, Optional ByRef p_txtPKFK As ucText, Optional ByVal p_PKFK As String, Optional ByVal p_CodEmpresa As Long = 0)— decide INSERT vs UPDATE (por valor/tipo da PK e verificação COUNT), monta o comando a partir dos controles ligados, executa em transação, salva grids de detalhe (objGrid.Save) e relê o registro. Gera PK nova viaCodInicioPK/CodInicioPKMaxquando necessário.Public Sub FormExcluir(ByRef p_Form As Form, ByVal p_Table As String, ByRef p_txtPK As Object, ByVal p_PK As String, Optional ByVal p_Confirmar As Boolean = True, Optional ByVal p_CodEmpresa As Long = 0)— exclui o registro pela PK (confirmação opcional), limpa os campos, põe o form emFENovoe atualiza grids em modo listagem.
FormHabilitareLimpaCampos, embora do "engine de forms", estão em modFuncoes.bas (abaixo).
modFuncoesDB.bas — Engine de banco (ADO)
Public Function AbreConexao(Optional ByVal p_blnConexaoInicial As Boolean = False) As Boolean— abre a conexão ADO global (conBD) usandogConfigDB. Retorna sucesso.Public Sub ExecutaComandoADOConn(ByVal p_strCommand As String, Optional ByRef p_conDb As ADODB.Connection = Nothing)— executa um comando SQL direto numaConnection.Public Function ExecutaComando(ByRef p_strComando As String, Optional ByRef p_conDb As ADODB.Connection = Nothing, Optional ByVal p_blnGravaLog As Boolean = True) As Long— executa INSERT/UPDATE/DELETE viaADODB.Command; retorna nº de afetados; log opcional; trata reconexão MySQL.Public Function ExecutaComandoArray(ByRef p_arrSQL() As String) As Long— executa um array de comandos SQL em sequência; retorna total afetado.Public Function RecuperaRegistroUnicoValor(ByVal p_strSQL As String, Optional p_OutraBaseDados As ADODB.Connection = Nothing) As Variant— retorna o primeiro campo do primeiro registro (escalar).Public Sub RecuperaRegistros(ByRef p_QRecordSet As ADODB.Recordset, ByRef p_Comando As String, Optional ByVal p_RetornaDesconectado As Boolean = True, Optional p_OutraBaseDados As ADODB.Connection = Nothing, Optional ByVal p_blnGravarLog As Boolean = True, Optional ByVal p_blnKeySetOptmistic As Boolean = False, Optional ByVal p_RecordSetIncusaoAlteracao As Boolean = False)— abre umRecordset(por padrão desconectado) de um SELECT.Public Function AdaptaQueryMySQL(ByRef p_strQuery As String) As String— adapta a query para dialeto MySQL.Public Function AdaptaQuerySQLServer(ByRef p_strQuery As String) As String— adapta a query para dialeto SQL Server.Public Function CampoVerificarExistencia(ByVal p_strTabela As String, ByVal p_strCampo As String) As Boolean— verifica se uma coluna existe (auditoria condicional).Public Function LastInsertId() As Long— último ID auto-incremento inserido.Public Function CodInicioPK(ByVal p_strTabela As String, ByVal p_strPK As String, ByVal p_blnUtilizarMax As Boolean, Optional ByVal p_lngValorDefault As Long) As Double— próximo valor de PK (viatbpkquandogPKAvancado, ouMAX(pk)+1).Public Function CodInicioPKMax(ByVal p_strTabela As String, ByVal p_strPK As String, Optional ByVal p_strPKFK As String, Optional ByVal p_lngCodPKFK As Long) As Double— próximo PK dentro de agrupamento por PKFK (chave composta).
modFuncoes.bas — Utilitários gerais / engine de UI
Seleção dos membros mais usados (o módulo é extenso):
Public Sub FormHabilitar(ByRef p_objForm As Form, ByVal p_iEstadoForm As FormEstado, Optional ByVal p_strCampoCodigo As String = "txtCodigo", Optional ByVal p_strBotaoComando As String = "cmdBotoes", Optional ... )— habilita/desabilita campos e botões da toolbar conforme o estado CRUD (FormEstado). Núcleo do engine de UI. (Vários parâmetros opcionais mapeiam índices de botões; ver fonte.)Public Sub LimpaCampos(ByRef p_objForm As Form, Optional ByVal p_blnLimparListView As Boolean = True)— limpa todos os controles ligados do form (e ListViews opcionalmente).Public Sub SetaFoco(ByRef Controle As Object, Optional ByVal p_blnEmpty As Boolean = False)— coloca foco num controle (opc. limpando-o).Public Sub SetaMouse(Optional ByVal p_Tipo As MousePointerConstants = vbArrowHourglass)— altera o cursor (ampulheta por padrão).Public Sub Mensagem(ByVal Mens As String, Optional ByVal Complemento As String)— mensagem padronizada ao usuário.Public Sub TrataErro(ByVal p_Formulario As String, Optional ByVal p_strMensagem As String = "", ...)— trata/mostra/loga erro padrão.Public Function TrataErroCritico(ByVal p_Formulario As String, Optional ByVal p_blnRollBackTrans As Boolean = True) As VbMsgBoxResult— erro crítico com rollback opcional.Public Sub GravaLogErro(...)/Public Sub GravaLogComando(ByVal Comando As String)— logs de erro/transação.Public Sub MostraInicio()/Public Sub MostraFim()— mensagens de início/fim de registros.Public Function FormShow(ByVal p_NomeForm As String, Optional ByVal p_blnModal As Boolean = False) As Boolean— exibe um form pelo nome (modal opcional).Public Function FormShow2(ByVal p_Form As Form, Optional ByVal p_blnModal As Boolean = False) As Boolean— exibe uma instância de form já carregada.Public Function FormLoad(ByVal p_strNmForm As String) As Boolean— carrega (Load) um form pelo nome.Public Function FormFindControl(ByRef p_Formulario As Form, ByVal p_strControlName As String) As Boolean— verifica se um controle existe no form pelo nome.- Validações:
Public Function CheckCPF(ByVal CPF As String) As Boolean;Public Function CheckCNPJ(ByVal CNPJ As String) As Boolean;Public Function VerificaCPFCNPJ(ByRef Controle As Control, ByVal TipoPessoa As TipoPessoa, ...);Public Function ConsisteData(ByVal Campo As String, Optional ByVal p_blnPermiteBranco As Boolean = False, Optional ByVal p_blnMostraMsg As Boolean = True) As Boolean;Public Function ConsisteHora(ByVal p_strHora As String, Optional ByVal p_blnPermiteBranco As Boolean = False) As Boolean;Public Function ValidarPeriodoDatas(ByVal p_strDataInicial As String, ByVal p_strDataFinal As String) As Boolean;Public Function ValidarDigitoEAN13(ByVal p_strEAN13) As Boolean. - Digitação/formatação:
Public Function InibeCaracteres(ByVal ValorAsc As Long, ByVal Tipo As QTipoCaracter) As Long;Public Sub FormatarCampo(ByRef p_Controle As TextBox, ByRef p_Panel As SSPanel, ByVal p_TipoCampo As FormatarCampoTipo, ...);Public Sub FormataData(ByRef ControleTexto As Object). - Diversos:
Public Sub AbreURL(ByVal p_strURL As String);Public Sub WhatsAppAbrir(ByVal p_strFone As String, Optional ByVal p_strMsg As String);Public Function RetornarHostName() As String;Public Function UBound2(ByRef p_Array As Variant) As Long; funções de processo Windows (VerificarProcessoWindows,TerminarProcessoWindows).
modFuncoesCombo.bas — ComboBox nativo
Public Sub CarregarComboSQL(ByRef p_objCombo As ComboBox, ByVal p_SQL As String, Optional ByVal p_lngCodigoSel As Long, ...)— popula o combo a partir de um SELECT (código/descrição) e seleciona um código.Public Sub CarregarComboArray(ByRef p_objCombo As ComboBox, ByRef p_Array As Variant, Optional ByVal p_lngCodigoSel As Long, ...)— popula o combo a partir de um array.Public Sub ProcuraCombo(ByRef Combo As ComboBox, ByVal Valor As Variant, ...)— seleciona no combo o item cujo ItemData/texto corresponde ao valor.Public Function RetornarValorCombo(ByRef p_objCombo As ComboBox, Optional ByVal p_blnRetornarListIndexSeNaoSelecionado As Boolean = False) As Long— retorna oItemDatado item selecionado (ou ListIndex).
modFuncoesData.bas — Datas e horas
Public Function FData(ByVal Qdata As Variant, Optional ByVal p_blnHora As Boolean = False) As String— formata data (DD/MM/AAAA, hora opcional) para exibição.Public Function FDataMySQL(ByVal p_strData As String, Optional ByVal p_blnHora As Boolean = False) As String— formata para literal MySQL (AAAA-MM-DD).Public Function FDataYMD(...) As String/Public Function FDataDMA(...) As String— conversões Y-M-D / D/M/A.Public Function FHora(ByVal p_strValor As Variant, Optional ByVal p_blnConsiste As Boolean = False) As String— formata hora (consistência opcional).Public Function AdicionarDiasData(ByVal p_strData As String, ByVal p_intDias As Long, Optional ByVal p_blnDataComercial As Boolean = True) As String— soma dias (com opção de dias úteis).Public Function RetornarTimeStamp(Optional ByVal p_strFData As String, Optional ByVal p_intNumAdicionar As Long, ...) As String— timestamp atual/derivado para auditoria.Public Function FDataTimeStamp(ByVal p_strTimeStamp As String, Optional ByVal p_blnHora As Boolean = True, ...) As String— formata timestamp para exibição.Public Function RetornarUltimoDiaMes(ByVal p_lngMes As Long, ByVal p_lngAno As Long) As Long;Public Function RetornarDiaSemana(...);Public Function VerificarDataUtil(ByVal p_strData As String) As Boolean;Public Function RetornaDataDiaUtil(ByVal p_strData As String) As String;Public Function CompararDatas(...) As Long;Public Function ExtensoData(...);Public Function ExtensoMonth(...);Public Sub RetornarPeriodoInicialFinal(...).
modFuncoesString.bas — Strings, números, moeda, hash, base64
Convenção: F* formata para exibição; D* desformata/converte para armazenamento.
- Conversão central:
Public Function Conv(ByVal Campo As Variant, ByVal Tipo As TipoCaracter, ...)— converte/escapa um valor para literal SQL conformeTipoCaracter(numérico, data, moeda, procura/LIKE, etc.). Usada por todo o engine. Public Function ENulo(ByRef Valor As Variant, Optional ByVal Tipo As TipoCaracter = Alfanumerico, Optional ByVal p_blnConvertNull As Boolean = False, Optional ByVal p_lngTamMax As Long) As Variant— trataNull/vazio, retornando default por tipo.- Moeda/qtde/peso:
FMoeda,DMoeda/DMoedaP/DMoedaDbl,FQtde/DQtde,FPeso/DPeso/DPesoDbl,Arredondar/Arredondar2. - Máscaras:
FormataCep,FormataTelefone,FormataCPFCNPJ,FormataIE; fiscaisFCFOP/DCFOP,FNCM/DNCM,FCEST/DCEST. - Texto:
AllTrim,LimitaTexto,AlinhaTexto,Zeros,CNumerico,RetirarCaracteresEspeciais,RetirarEspacos/RetirarEspacosDuplicados/RetirarEnter,Concatenar,RastreiaString,QtdeCaracteres,SplitLinha,URLEncode. - Extenso/XML/HTML:
ExtensoValor,ExtensoNF,FTagXML/FTagXML2,RetornarValorXMLTag,ConverterCaracteresHTML,CorteHTML. - Cripto/hash/base64:
Criptografa(usuario, senha, Modo, ...),SHA1,sha1hex,HexaToString/StringToHexa,Base64Encode/Base64ToText/TextToBase64,ConvertFileToBase64/ConvertBase64ToFile. Public Function ConvertFieldType(ByVal p_FieldType As DataTypeEnum) As TipoCaracter— mapeia tipo ADO paraTipoCaracter.
modFuncoesListView.bas — ListView (MSCOMCTL)
Public Sub lvwLimpar(ByRef p_lvwListView As ListView, Optional ByVal p_blnAjustar As Boolean = False, ...)— limpa o ListView.Public Sub lvwAjustar(ByRef LV As ListView, Optional ByVal p_intColFixa As Long, Optional ByVal p_intColFixa2 As Long, ...)— ajusta larguras (colunas fixas opcionais).Public Sub lvwAdicionarItem(ByRef p_lvwListView As ListView, ByRef p_strTexto As String, ...)— adiciona um item.Public Sub lvwAdicionarSubItem(ByRef p_lvwListView As ListView, ByRef p_strTexto As String, ...)— adiciona um subitem à linha corrente.
modRelatorio.bas — Relatório genérico
Public Function GerarRelatorioSQL(ByVal p_SQL As String, ByVal p_Titulo As String, Optional ByVal p_Formato As String = "HTML") As String— executa um SELECT e gera arquivo de relatório (HTML/TXT); retorna o caminho.Public Sub AbrirArquivo(ByVal p_Path As String)— abre um arquivo no aplicativo associado.
modGDI.bas — Wrapper GDI+ (suporte aos controles gráficos)
Majoritariamente interno. Públicas: ColorARGB, ColorSetAlpha, GetRGB_GDIP2VB/GetRGB_VB2GDIP, GetEncoderClsid/GetDecoderClsid, DEFINE_GUID, PtrToStrW/PtrToStrA, GetPropValue.
modDeclaracoesSDK.bas — Declarações globais
Enums: TipoCampo (TCVarChar=0 … TCDouble=15), QTipoCaracter (Letras/Numeros/CaracterEspecial), QTipoOperacao (LerRegistro=0/ProximoRegistro=1/RegistroAnterior=2), RetornoOperacao, FormatarCampoTipo (fctMoeda=1/fctQtde=2/fctData=3/fctHora=4/fctString=5), FormatarCampoEvento, Conv_Car, Alinhamento (alEsquerda/alDireita/alCentro), Criptografia_Modo, TipoPessoa (tpFisica=0/tpJuridica=1).
Types + globais:
CONFIG_DATABASE= { DBProvider, DBPath, DBServer, DBUser, DBPassword, DBDatabase, DBPort } (String) →Public gConfigDB As CONFIG_DATABASE.CONFIG_GERAL= { CasasDecimaisValor, CasasDecimaisQtde, CasasDecimaisPeso, GravarUpper, ProcuraAvancada, ValidarCNPJCPF, LogErros, LogTransacao, PathLog } →Public gConfig As CONFIG_GERAL.ERR_CLS→Public gErr As ERR_CLS.PROCESSENTRY32(Win32).
Globais: strQuery (query montada pelo engine), gCodUsuario As Long (0 = sem auditoria), conBD As ADODB.Connection, Conexao As clsConexao, gPKAvancado As Boolean (False=MAX+1, True=tabela tbpk), gDebug As Boolean.
Consts: DBPROVIDERMSACCESS="Microsoft.Jet.OLEDB.4.0", DBPROVIDERMYSQL="MSDASQL.1", DBPROVIDERSQLSERV="SQLOLEDB.1", cNOMESOFTWARE="NeXT LowCode SDK", operadores OPLIKE/OPDATA, mensagens MSGxxx, tags de estado, cURLWHATSAPPAPI, etc.
Sub: Public Sub SDKConfigPadrao() — aplica defaults sensatos em gConfig.
clsConexao.cls
Wrapper da conexão ADO que rastreia estado transacional via eventos.
Public WithEvents conexaoBD As ADODB.Connection— a conexão observada.Public blnTrans As Boolean— True enquanto há transação aberta.
clsStringBuilder.cls
Construtor de strings eficiente (chunk buffer).
- Propriedades:
length(Get),Capacity(Get),ChunkSize(Get/Let),ToString(Get),TheString(Get/Let). - Métodos:
Append/AppendByVal/AppendLine,Clear,Insert/InsertByVal,Remove,Find,HeapMinimize.
NeXTSDK.cls — Fachada pública (GlobalMultiUse)
Expõe a API ao host; cada método delega ao módulo qualificado. Hospeda também os enums de domínio globais do projeto:
TipoCaracter:Alfanumerico=0, Numerico=1, DataDMY=2, Procura=3, ProcuraFull=4, ValorNumerico=5, Quantidade=6, DataTimeStamp=8, AlfanumericoBranco=9, NumericoNotNull=10, ProcuraNumerico=11, Peso=15, HoraMinSeg=17, AlfanumericoCaixaAltaBaixa=18, AlfanumericoBrancoNull=19, QuantidadeNotNull=20, ValorNumericoNotNull=21, DataDMYHora=22, ValorNumerico4Casas=23, ValorNumerico2Casas=27, SemFormatacao=99FormEstado:FEInclusao=1, FEAlteracao=2, FEExclusao=3, FENovo=4, FEConsulta=5
Membros (e a quem delegam):
AbreConexao(Optional pConexaoInicial As Boolean = False) As Boolean→FuncoesDB.AbreConexao.ExecutaComando(ByRef pSQL As String, Optional pGravaLog As Boolean = True) As Long→FuncoesDB.ExecutaComando.FormLerRegistro(pForm As Object, pTable As String, ptxtPK As Object, pPK As String, Optional pOperacao As Long = 0)→modForms.FormLerRegistro.FormSalvar(pForm As Object, pTable As String, ptxtPK As Object, pPK As String)→modForms.FormSalvar.FormExcluir(pForm As Object, pTable As String, ptxtPK As Object, pPK As String)→modForms.FormExcluir.FormHabilitar(pForm As Object, pEstado As FormEstado)→Funcoes.FormHabilitar.LimpaCampos(pForm As Object, Optional pLimparListView As Boolean = True)→Funcoes.LimpaCampos.SetaFoco(pControle As Object, Optional pEmpty As Boolean = False)→Funcoes.SetaFoco.SetaMouse(Optional pTipo As MousePointerConstants = vbArrowHourglass)→Funcoes.SetaMouse.TrataErro(pFormulario As String, Optional pMensagem As String = "")→Funcoes.TrataErro.SDKConfigPadrao()→modDeclaracoesSDK.SDKConfigPadrao.ConfigurarBanco(pProvider As String, Optional pPath, pServer, pDatabase, pUser, pPassword, pPort As String)— preenchegConfigDB.- Propriedades:
PKAvancado(Get/Let →gPKAvancado),CodUsuario(Get/Let →gCodUsuario),ProviderMSAccess/ProviderMySQL/ProviderSQLServer(Get → consts). ConsultarEscalar(pSQL As String) As String— 1º campo da 1ª linha.FormatarMoeda(pValor As Double) As String→FMoeda;MoedaParaNumero(pTexto As String) As Double→DMoedaDbl.ProcurarRegistro(pTitulo As String, pSQL As String) As String— abrefrmLookupSDKe retorna a chave escolhida.RelatorioSQL(pSQL As String, pTitulo As String, Optional pFormato As String = "HTML") As String— gera relatório e exibe.
PARTE 2 — Controles OCX (uc*)
Convenções comuns. Os controles data-bound compartilham propriedades padrão de UserControl VB6 (passthrough): Name, hwnd, Enabled, Font, BackColor, ForeColor, ToolTipText, Caption, Container, Tag etc. Abaixo destacam-se as propriedades de metadados/binding e específicas, mais métodos e eventos. Todos expõem os eventos de persistência InitProperties/ReadProperties/WriteProperties (padrão do VB6), omitidos das tabelas. Validate() é um método (Function As Boolean), não um evento.
ucText — caixa de texto genérica
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| DataField | Variant | Get/Let | Coluna ligada |
| DataTable | Variant | Get/Let | Tabela |
| TypeControl | TipoCaracter | Get/Let | Tipo (dirige Conv/formatação) |
| Value | Variant | Get | Valor tipado |
| Text | String | Get/Let | Texto exibido |
| BackColorOnFocus | OLE_COLOR | Get/Let | Cor de fundo em foco |
Métodos: Refresh, Size(Width, Height), ValidateControls, Validate() As Boolean. Eventos: (só persistência).
ucCodigo — campo de código/PK com procura
Enums: TypeFind (TF_Nenhum=0, TF_Clientes=1, TF_Produtos=2, TF_NF=3, TF_Fornecedores=4); TypeDetail (TD_Nenhum=0, TD_Cliente=1, TD_Produto=2, TD_Transportador=3).
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| DataField | Variant | Get/Let | Coluna ligada |
| DataTable | Variant | Get/Let | Tabela |
| TypeControl | TipoCaracter | Get | Tipo (numérico) |
| Value | Long | Get | Valor do código |
| Text | String | Get/Let | Texto do código |
| PK | Boolean | Get/Let | Indica se é a chave primária |
| FindVisible | Boolean | Get/Let | Exibe botão de procura |
| CopyVisible | Boolean | Get/Let | Exibe botão de cópia |
| CodTypeFind | TypeFind | Get/Let | Tipo de lookup de procura |
| CodTypeDetail | TypeDetail | Get/Let | Tipo de detalhe/cadastro |
| ControlName | String | Get/Let | Nome lógico |
Métodos: Size, Refresh, ValidateControls, Validate() As Boolean, ExibirNome(p_Name As String). Eventos: Procura() — clique no botão de procura.
ucMask — campo com máscara (MaskEdBox)
Propriedades: DataField, DataTable, TypeControl, Mask (String), Format (String), PromptInclude (Boolean), PromptChar (String), Text, Value (Get). Métodos: Refresh, Validate() As Boolean. Eventos: Change().
ucMemo — texto multilinha
Propriedades: DataField, DataTable, TypeControl, Text, Value (Get), MaxLength. Métodos: Refresh, Validate() As Boolean. Eventos: (só persistência).
ucCPFCNPJ — documento (Física/Jurídica + máscara)
Status: stub de design na fonte atual. Não expõe propriedade/método/evento Public (só um handler privado de foco). Sem binding exposto por ora.
ucNumeroSpin — numérico com spin
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| DataField | Variant | Get/Let | Coluna ligada |
| DataTable | Variant | Get/Let | Tabela |
| TypeControl | TipoCaracter | Get/Let | Tipo do valor |
| Text | String | Get/Let | Texto exibido |
| Value | Variant | Get/Let | Valor numérico |
| Min | Long | Get/Let | Valor mínimo |
| Max | Long | Get/Let | Valor máximo |
| Increment | Long | Get/Let | Passo do spin |
Métodos: Refresh, Validate() As Boolean. Eventos: Change().
ucData — campo de data (com calendário)
Propriedades: DataField, DataTable, TypeControl (Get), Text, NowIsEmpty (Boolean, Get/Let) (se vazio assume data atual), BackColorOnFocus (OLE_COLOR), Container (Get/Set). Métodos: Size, Refresh, ValidateControls, Validate() As Boolean. Eventos: (só persistência).
ucHora — campo de hora
Propriedades: DataField, DataTable, TypeControl (Get), Text, NowIsEmpty (Boolean), Container (Get/Set). Métodos: Size, Refresh, ValidateControls, Validate() As Boolean. Eventos: (só persistência).
ucCheck — checkbox (grava 0/1)
Propriedades: DataField, DataTable, Value (Long, Get/Let). Métodos: Refresh, ValidateControls, Size. Eventos: Click(), MouseDown(Button, Shift, X, y).
ucOption — radio button
Propriedades: Caption (String), Value (Long), DataField, DataTable, Enabled, ForeColor/BackColor, Font (Get/Set), Name (Get). Métodos: (só acessores). Eventos: Click().
ucCombo — combo SQL-driven com detalhe
Enums: TypeComboEnum (TC_Nenhum=0, TC_CondicaoPagto=7, TC_Funcionario=8, TC_CFOP=10, TC_UF=50, TC_TipoOperacao=51, TC_RegrasFiscais=52, TC_ClassTrib=53, TC_CSTIBSCBS=54, TC_NFSePadrao=55); ComandoConstants (Com_Nenhum=0, Com_ParcelasReceber=1); DetalheConstants (Det_Nenhum=0, Det_Cliente=1, Det_CondicaoPagto=7, Det_Funcionario=8, Det_CFOP=10, Det_TipoOperacao=51, Det_RegrasFiscais=52, Det_ClassTrib=53, Det_CSTIBSCBS=54, Det_Generico=99); DescricaoLayoutEnum (DL_DescricaoeCodigo=0, DL_SomenteDescricao=1, DL_SomenteCodigo=2).
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| DataField | Variant | Get/Let | Coluna ligada (valor selecionado) |
| DataTable | Variant | Get/Let | Tabela |
| DataFieldFK | String | Get/Let | Coluna FK (filtro) |
| DataValueFK | String | Get/Let | Valor da FK para filtrar itens |
| TypeControl | TipoCaracter | Get/Let | Numérico → grava Value; senão Text |
| TypeCombo | TypeComboEnum | Get/Let | Preset de carga (UF, CFOP…) |
| DescricaoLayout | DescricaoLayoutEnum | Get/Let | Como exibir item (cód/desc) |
| SQL | String | Get/Let | SELECT de carga customizado |
| Value | Long | Get/Let | Código (ItemData) selecionado |
| ListIndex | Long | Get/Let | Índice selecionado |
| Text | String | Get/Let | Texto selecionado |
| Comando | ComandoConstants | Get/Let | Ação do botão de comando |
| Detalhe | DetalheConstants | Get/Let | Cadastro de detalhe vinculado |
Métodos: Recarregar() (recarrega conforme SQL/TypeCombo/FK), Clear(), AddItem(p_Item As String), Refresh, ValidateControls, Size, Validate() As Boolean. Eventos: Change(), Click(), MouseDown(...), ComandoClick(p_Index As Long), DetalheClick(p_Index As Long) (abre cadastro relacionado).
ucGrid — grade (listagem ou master-detail)
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| DataField | Variant | Get/Let | Campo/chave de ligação com o master |
| DataValue | Variant | Get/Let | Valor da chave master corrente |
| DataTable | Variant | Get/Let | Tabela de detalhe |
| SQL | String | Get/Let | SELECT de carga |
| ModoListagem | Boolean | Get/Let | True = listagem; False = detalhe editável |
| Changed | Boolean | Get | Edição pendente |
| Colunas | String | Get/Let | Definição serializada das colunas |
| Rows | Long | Get | Quantidade de linhas |
| Checkboxes | Boolean | Get/Let | Habilita checkboxes |
| ColumnHeaders | IColumnHeaders | Get | Coleção de cabeçalhos |
Métodos: Limpar([p_blnAjustarColunas]), ClearColumns, AddColumn(p_Name, p_Align, [p_Width=1500], [p_Field], [p_Control], [p_Tipo=0]), AplicarColunas, MapColumnField(p_Column, p_Field, p_Control), ClearControls, RemoveRow([p_lngRow]), AddRow([p_lngRow]), AddRowCol(p_Col As Collection), AddRowArray(p_Array() As String), AddRowEmpty() As Long, Save() As Boolean, Load() As Boolean, Atualizar([p_SQL]), Validate() As Boolean, ColIndex(p_Field) As Long, GetValue(p_Row, p_Field) As String, SetValue(p_Row, p_Field, p_Value), Refresh. Eventos: ItemClick(Item As ListItem), ItemCheck(Item As ListItem), Selecionou(Codigo As String).
ucAddRemove — barra Adicionar/Remover de um ucGrid
Enum: TypeAddRemove (TC_Add, TC_Remove, TC_Clear, TC_ClearAll = 0..3).
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| GridName | String | Get/Let | Nome do ucGrid alvo |
| ControlFocus | String | Get/Let | Controle a focar após ação |
| AddEnable/AddVisible | Boolean | Get/Let | Botão Adicionar |
| RemoveEnable/RemoveVisible | Boolean | Get/Let | Botão Remover |
| ClearEnable/ClearVisible | Boolean | Get/Let | Botão Limpar |
| ClearAllEnable/ClearAllVisible | Boolean | Get/Let | Botão Limpar Tudo |
Eventos: AddRemoveClick(p_TypeAddRemove As TypeAddRemove).
ucToolbar — barra CRUD padrão
Enum: TypeCommand (TC_New, TC_Save, TC_Del, TC_Next, TC_Previous, TC_Baixa, TC_Print, TC_Print2, TC_Excel, TC_Nota, TC_PDF, TC_Anexo, TC_Procura, TC_Help, TC_Limpar, TC_Exit = 0..15).
Propriedades: binding DataField (String), DataTable (String), ControlFocus (String); e para cada botão um par Enable/Visible (Boolean, Get/Let): New*, Save*, Del*, Next*, Prev*, Baixa*, Print*, Print2*, Excel*, Nota*, PDF*, Attach*, Find*, Help*, Clear*, Exit*. Métodos: LabelCaption(p_Command As TypeCommand, p_Caption As String). Eventos: CommandClick(p_TypeCommand As TypeCommand).
Auto-CRUD: comDataTable/DataField/ControlFocusdefinidos no designer e a PK emtxtCodigo(convenção), o toolbar executa Novo/Salvar/Navegar/Limpar automaticamente após dispararCommandClick. OTC_Delfica vazio de propósito (o host trata a exclusão destrutiva).
ucImagem — imagem com binding
| Propriedade | Tipo | Acesso | Descrição |
|---|---|---|---|
| DataField | String | Get/Let | Coluna ligada |
| DataTable | String | Get/Let | Tabela |
| TypeControl | TipoCaracter | Get/Let | Tipo do valor |
| Text | String | Get/Let | Valor textual (caminho/base64) |
| Caminho | String | Get/Let | Caminho do arquivo de imagem |
| Caption | String | Get/Let | Legenda |
Métodos: (só acessores). Eventos: nenhum público. Persiste o caminho da imagem.
ucFrame — container/moldura (não data-bound)
Propriedades: hwnd (Get), BackColor, ForeColor, Enabled, Font (Get/Set), BorderStyle, Caption, ToolTipText, Name (Get). Métodos: Refresh. Eventos: Click(), DblClick().
ucLabelText — rótulo read-only ligado a coluna
Propriedades: DataField, DataTable, Text, Caption, Alignment, FillStyle/FillColor (sem TypeControl). Métodos: Refresh, Size. Eventos: Click(), DblClick().
ucLabelPlus — rótulo avançado GDI+ (imagem/gradiente/callout)
Rótulo renderizado em GDI+ com ícone (fonte de ícones), sombra, gradiente, borda arredondada, callout/balão, blur acrílico, rotação e carga de imagem por URL; binding leve por SQL. Conjunto muito extenso de propriedades (grupos: Caption, Cor/fundo, Borda, Sombra, Callout, Imagem, Ícone, HotLine, Interação). Métodos-chave: CarregarSQL(pSQL), Draw(hdc, hGraphics, PosX, PosY), Refresh, LoadPicture(SrcImg) As Boolean, PictureFromURL(sUrl, [UseCache], [DrawProgress]) As Boolean, PictureGetStream() As Byte(), PictureDelete(), DrawLine(...), Polygon(...). Eventos: Click, DblClick, MouseDown/Move/Up, MouseEnter/Leave/Over/Out, PrePaint/PostPaint, KeyPress/KeyUp/KeyDown, OLEDragDrop/OLEDragOver, PictureDownloadProgress/Complete/Error, TabFocus.
Controles gráficos (dashboards)
Visualização em GDI+, carga por SQL. Todos expõem Image([Width], [Height]) As IPicture, Refresh, GetWindowsDPI() As Double, RGBtoARGB(...) e os eventos Click, DblClick, MouseDown/Move/Up.
- ucChartBar — barras/linhas, múltiplas séries, legenda, eixos. Métodos:
Clear,AddSerie(SerieName, SerieColor, Values As Collection, [cCustomColors]),UpdateSerie(...),AddAxisItems(AxisItems As Collection, ...),CarregarSQL([pSQL]). Props:SQL,Title/TitleFont,ChartStyle,LabelsPositions,LegendAlign,AxisMax/AxisMin, cores/linhas. - ucChartArea — área/linha. Métodos:
Clear,AddLineSeries(SerieName, Values As Collection, SerieColor),AddAxisItems(...),CarregarSQL([pSQL]). Props:SQL,AxisMax/AxisMin,LegendAlign, cores/linhas. - ucPieChart — pizza/rosca. Métodos:
Clear,AddItem(ItemName, Value, ItemColor, [Special]),GetCenterPie(X, y),CarregarSQL([pSQL]). Props:Count (Get),ItemColor(Index),DonutWidth,Rotation,ChartStyle,LabelsPositions,LegendAlign. Evento extra:ItemClick(Index As Long). - ucTreeMaps — treemap. Métodos:
Clear,CarregarSQL(pSQL),AddLineSeries(SerieName, SerieColor, cValues As Collection, [cLabels], [cIconsFonts], [cKeys], [cCustomColors]). Props:LabelsPositions,IconsPositions/IconFont,LegendAlign,ShowToolTips,CornerRound. Evento extra:ItemClick(Key As Variant). - ucProgressCircular — progresso circular/gauge animado. Métodos:
CarregarSQL(pSQL),AddPaletteColors(lPalette()),GetPaletteColors() As Long(),DrawGradientArc(...). Props:Value (Single),Min/Max,Angle/StartAngle/GradientAngle,Caption1/Caption2(+ForeColor/Font),DisplayInPercent,ShowAnimation/AnimationInterval, estilos de anel (PF_*/PB_*/Center*).
Observações finais
- ucCPFCNPJ é o único controle sem membro público (stub de design na fonte atual).
- Os controles data-bound expõem eventos de domínio específicos (
Procura,
ComandoClick, DetalheClick, CommandClick, AddRemoveClick, ItemClick, ItemCheck, Selecionou, Change), não os eventos genéricos Click/Mouse*. Os controles gráficos e ucLabelPlus usam Public Event (incluindo Click/Mouse*).
Validate()é método (Function As Boolean), não evento.- Eventos de persistência (
InitProperties/ReadProperties/WriteProperties) foram
omitidos por serem padrão do VB6 UserControl.
Referência de API — .NET
Documentação de referência do SDK .NET, extraída da fonte real em dotnet\src\. Documenta apenas membros public.
- NeXT.LowCode.Core (netstandard2.0) — engine e acesso a dados, sem UI.
Namespaces NeXT.LowCode.Core e NeXT.LowCode.Core.Data.
- NeXT.LowCode.WinForms (net481) — os controles low-code e o helper de forms.
Namespace NeXT.LowCode.WinForms.
Conceito em 1 minuto
O SDK é dirigido por metadados, não um gerador de código. Cada controle na tela implementa IFormControl e carrega dois metadados:
DataField— a coluna que ele representa.TypeControl— o tipo do valor (TipoCaracter), que decide formatação e
conversão para parâmetro SQL.
O FormEngine (núcleo) percorre a lista de controles em tempo de execução, monta o SQL parametrizado (anti-injeção) e persiste. Na camada WinForms, o WinFormsFormHelper coleta automaticamente os IFormControl/IFormDetail da árvore de Controls, e o LowCodeToolbar faz o CRUD sem você escrever SQL.
Nada é gerado em disco. A fonte da verdade é o metadado, lido a cada operação.
Quick-start (WinForms)
// 1) configurar a base uma vez (provider + connection string)
var db = new Database(new SqliteProvider(), "Data Source=app.db");
// 2) na tela, arraste controles low-code e defina DataField/TypeControl:
// txtCodigo (LowCodeCodigo) -> DataField="codcli", TypeControl=Numerico (PK)
// txtNome (LowCodeTextBox) -> DataField="nome"
// cboCidade (LowCodeComboBox)-> DataField="codcidade", Sql="SELECT codcidade,nome FROM tbcidade"
// 3) a toolbar faz o CRUD — sem SQL no form:
toolbar.Db = db;
toolbar.DataTable = "tbcliente";
toolbar.DataField = "codcli";
toolbar.PkControl = txtCodigo; // liga o load-on-code (digitar o código carrega o registro)
// (equivalente manual, se não usar a toolbar)
WinFormsFormHelper.FormSalvar(db, this, "tbcliente", txtCodigo, "codcli");
WinFormsFormHelper.FormLerRegistro(db, this, "tbcliente", txtCodigo, "codcli",
operacao: TipoOperacao.ProximoRegistro);
PARTE 1 — Funções (núcleo + helpers)
Enums (Enums.cs, namespace NeXT.LowCode.Core)
enum TipoCaracter
Tipo do valor de um campo. Decide a formatação para exibição e a conversão para parâmetro SQL.
| Membro | Valor | Membro | Valor | |
|---|---|---|---|---|
| Alfanumerico | 0 | AlfanumericoBranco | 6 | |
| Numerico | 1 | NumericoNotNull | 7 | |
| DataDMY | 2 | DataDMYHora | 8 | |
| Procura | 3 | AlfanumericoPlaca | 9 | |
| ProcuraFull | 4 | Quantidade | 10 | |
| ValorNumerico | 5 | Peso | 11 | |
| ProcuraNumerico | 12 | AlfanumericoCaixaAltaBaixa | 13 | |
| AlfanumericoBrancoNull | 14 |
enum Alinhamento
Esquerda = 0, Direita = 1, Centro = 2
enum TipoOperacao
Navegação de registros. LerRegistro = 0, ProximoRegistro = 1, RegistroAnterior = 2
enum FormEstado
Estado do formulário (habilitação de controles). FEInclusao = 1, FEAlteracao = 2, FEExclusao = 3, FENovo = 4, FEConsulta = 5
enum DescricaoLayout
Layout do item exibido em combo SQL-driven. DescricaoeCodigo = 0, SomenteDescricao = 1, SomenteCodigo = 2
enum TypeCommand
Comandos de uma toolbar de CRUD. TC_New = 0, TC_Save = 1, TC_Del = 2, TC_Next = 3, TC_Previous = 4, TC_Print = 6, TC_Procura = 12, TC_Help = 13, TC_Limpar = 14, TC_Exit = 15
enum TypeAddRemove (namespace NeXT.LowCode.WinForms, em LowCodeAddRemove.cs)
Comandos da barra de itens. Add = 0, Remove = 1, Clear = 2, ClearAll = 3
interface IFormControl (IFormControl.cs)
Contrato que todo controle low-code implementa para participar do engine.
| Membro | Tipo | Acesso |
|---|---|---|
DataField | string | get/set — coluna da tabela (vazio = não persiste) |
DataTable | string | get/set — tabela alvo (informativo) |
TypeControl | TipoCaracter | get/set — tipo do valor (formatação/conversão) |
Text | string | get/set — representação textual (entrada/saída principal) |
Value | object | get — valor "bruto" (ex.: combo → chave selecionada) |
Visible | bool | get/set |
Enabled | bool | get/set |
interface IFormDetail (IFormDetail.cs)
Contrato de uma grade de detalhe (master-detail); encapsula a própria persistência e carga.
| Membro | Assinatura | Descrição |
|---|---|---|
DetailTable | string { get; } | tabela filha (ex.: tbemprestimoitem) |
DetailFK | string { get; } | coluna FK que aponta para o cabeçalho |
Changed | bool { get; } | true se a grade foi alterada desde a última carga |
ColunasDestino | string[] { get; } | colunas do BD gravadas |
TiposDestino | TipoCaracter[] { get; } | tipos das colunas destino |
GetRows() | DataTable GetRows() | linhas em memória (nomes == ColunasDestino) |
Load(...) | void Load(Database db, long valorFK) | recarrega a exibição do BD para o mestre dado |
static class StringHelper (StringHelper.cs)
Formatação/conversão de valores (pt-BR). Sem dependência de UI ou banco.
Propriedades estáticas: CasasDecimaisValor (int, default 2), CasasDecimaisQtde (int, default 3), CasasDecimaisPeso (int, default 3), GravarUpper (bool, default false).
Métodos estáticos:
| Assinatura | Propósito |
|---|---|
string FMoeda(object valor, int casasDecimais = 0, bool naoExibirCasasDecimais = false) | Formata moeda pt-BR (vírgula decimal, milhar) |
decimal DMoedaDbl(object valor, int casasDecimais = 0) | Converte para decimal com segurança |
string DMoedaP(object valor, int casasDecimais = 0) | Moeda com PONTO decimal (SQL/export, invariant) |
string FQtde(object valor, int casasDecimais = 0) | Formata quantidade pt-BR |
decimal DQtde(object valor, int casasDecimais = 0) | Quantidade → decimal |
string FPeso(object valor, int casasDecimais = 0) | Formata peso pt-BR |
decimal DPeso(object valor, int casasDecimais = 0) | Peso → decimal |
string FormataCPFCNPJ(string valor) | Formata CPF (11) ou CNPJ (14) |
string FormataCep(string valor) | Formata CEP (8 dígitos → nnnnn-nnn) |
string FormataTelefone(string valor) | Formata telefone (10/11 dígitos) |
string CNumerico(object valor) | Extrai apenas os dígitos |
string AllTrim(string valor) | Trim + colapsa espaços duplos |
string Rp(string texto) | Duplica aspas simples (prefira parâmetros SQL) |
string Zeros(string valor, int qtde = 2, bool preencherZerosEmpty = false, bool truncaSeMaior = false) | Preenche zeros à esquerda |
string DInscricaoEstadual(string valor) | Remove tudo que não é alfanumérico |
string FData(object valor, bool incluirHora = false) | Formata data dd/MM/yyyy (opc. com hora) |
DateTime? DData(string valor) | Parse de data (dd/MM/yyyy, yyyy-MM-dd, com/sem hora) |
string RetornarTimeStamp() | Timestamp de auditoria yyyyMMddHHmmss |
object ENulo(object valor, TipoCaracter tipo = TipoCaracter.Alfanumerico, bool convertNull = false, int tamMax = 0) | Converte valor do BD para exibição respeitando o tipo |
decimal ToDecimal(object valor) | Converte qualquer valor para decimal (pt-BR e invariant) |
interface IDbProvider (Data\IDbProvider.cs, namespace NeXT.LowCode.Core.Data)
Abstração do provedor de banco; concentra o que varia entre SGBDs.
| Membro | Assinatura | Propósito |
|---|---|---|
CreateConnection | DbConnection CreateConnection(string connectionString) | Cria (sem abrir) uma conexão |
ParameterPrefix | string { get; } | Prefixo de parâmetro nomeado (ex.: "@") |
NextPkSql | string NextPkSql(string tabela, string pk, string pkFK) | SQL do próximo PK (MAX+1), opc. filtrado por FK (@p0) |
ColunaExiste | bool ColunaExiste(DbConnection conn, DbTransaction trans, string tabela, string coluna) | Verifica existência de coluna via metadados nativos |
sealed class SqliteProvider : IDbProvider (Data\SqliteProvider.cs)
Provedor SQLite (Microsoft.Data.Sqlite). PK via COALESCE(MAX(pk),0)+1; metadados via PRAGMA table_info.
| Membro | Retorno |
|---|---|
ParameterPrefix | "@" |
CreateConnection(string) | new SqliteConnection(...) |
NextPkSql(tabela, pk, pkFK) | SELECT COALESCE(MAX(pk),0)+1 FROM tabela [WHERE pkFK = @p0] |
ColunaExiste(...) | via PRAGMA table_info(tabela) |
Outros bancos: implementeIDbProvider(ex.: MySQL, SQL Server) e passe aoDatabase. O restante do SDK não muda.
class Database (Data\Database.cs)
Camada de acesso a dados. Instância configurada com IDbProvider + connection string.
Anti-injeção: toda leitura/escrita usa parâmetros nomeados (@p0, @p1, …). Cada elemento de object[] parametros vira um DbParameter (@p{i} = parametros[i] ?? DBNull.Value). Input do usuário nunca é concatenado no SQL — apenas nomes de tabela/coluna (vindos do código do desenvolvedor) entram no texto.
Construtor: Database(IDbProvider provider, string connectionString) — lança ArgumentNullException se provider nulo; ArgumentException se connection string vazia.
Propriedades: Provider (IDbProvider get), ConnectionString (string get).
Métodos:
| Assinatura | Propósito |
|---|---|
DbConnection AbreConexao() | Cria e abre uma conexão |
int ExecutaComando(string sql, params object[] parametros) | INSERT/UPDATE/DELETE; retorna linhas afetadas |
int ExecutaComando(DbConnection conn, DbTransaction trans, string sql, params object[] parametros) | Idem, em conexão/transação existente |
DataTable RecuperaRegistros(string sql, params object[] parametros) | SELECT → DataTable |
DataTable RecuperaRegistros(DbConnection conn, DbTransaction trans, string sql, params object[] parametros) | Idem, em conexão/transação existente |
object RecuperaRegistroUnicoValor(string sql, params object[] parametros) | Scalar; null se DBNull/null |
object RecuperaRegistroUnicoValor(DbConnection conn, DbTransaction trans, string sql, params object[] parametros) | Idem, em conexão/transação existente |
long CodInicioPKMax(string tabela, string pk, string pkFK = null, long codPKFK = 0) | Próximo PK (MAX+1) via dialeto do provider |
long CodInicioPKMax(DbConnection conn, DbTransaction trans, string tabela, string pk, string pkFK = null, long codPKFK = 0) | Idem, dentro de conexão/transação (evita race no INSERT) |
double RetornarCodigoProximoAnterior(string tabela, string chave, double codAtual, TipoOperacao tipo = TipoOperacao.ProximoRegistro) | Próximo/anterior código (navegação) |
void ExecutaTransacao(Action<DbConnection, DbTransaction> acao) | Executa acao em transação (Commit/Rollback automático) |
bool ColunaExiste(string tabela, string coluna) | True se a coluna existe (cacheado); em falha assume false |
static class FormEngine (FormEngine.cs)
Engine de formulários dirigido por metadados — CRUD automático iterando sobre IList<IFormControl> e lendo DataField/TypeControl de cada controle. Desacoplado de qualquer UI.
| Assinatura | Propósito |
|---|---|
bool FormLerRegistro(Database db, IList<IFormControl> controles, string tabela, IFormControl ctrlPK, string nomePK, IFormControl ctrlPKFK = null, string nomePKFK = null, TipoOperacao operacao = TipoOperacao.LerRegistro, IList<IFormDetail> detalhes = null) | Lê registro pela PK (e opc. PK/FK composta), preenche os controles e recarrega grades de detalhe |
bool FormLerRegistro(Database db, IList<IFormControl> controles, string tabela, IFormControl ctrlPK, string nomePK, out FormAuditInfo auditInfo, IFormControl ctrlPKFK = null, string nomePKFK = null, TipoOperacao operacao = TipoOperacao.LerRegistro, IList<IFormDetail> detalhes = null) | Sobrecarga que também devolve auditoria (codusuario/time_stamp) |
bool FormSalvar(Database db, IList<IFormControl> controles, string tabela, IFormControl ctrlPK, string nomePK, IFormControl ctrlPKFK = null, string nomePKFK = null, long codUsuario = 0, IList<IFormDetail> detalhes = null) | INSERT ou UPDATE automático (decide por PK vazia/existência); gera PK; grava grades de detalhe na mesma transação |
void FormExcluir(Database db, string tabela, string nomePK, long valorPK) | DELETE do registro pela PK |
void FormExcluir(Database db, string tabela, string nomePK, long valorPK, IList<IFormDetail> detalhes) | Exclui cabeçalho + grades de detalhe (cada DetailTable pela FK) na mesma transação |
DataTable FormLerDetalhe(Database db, string tabela, string campoFK, long valorFK, string campos, string joins = "") | Lê itens de detalhe da tabela filha pela FK (alias i) |
void FormSalvarDetalhe(Database db, string tabela, string campoFK, long valorFK, DataTable dados, string[] colunasOrigem, string[] colunasDestino, TipoCaracter[] tiposDestino, long codUsuario = 0) | Regrava detalhe: DELETE da FK + INSERT de cada linha (transação própria). Lança ArgumentException se tamanhos divergirem |
void FormHabilitar(IList<IFormControl> controles, FormEstado estado) | Habilita se FEAlteracao/FEInclusao; senão desabilita |
void FormLimpar(IList<IFormControl> controles) | Zera o Text de todos os controles |
void PreencherControle(IFormControl fc, object dbValue) | Preenche o controle formatando pelo TypeControl |
object ExtrairValorParaSQL(IFormControl fc) | Retorna ConvValor(fc.Text, fc.TypeControl) |
object ConvValor(object valor, TipoCaracter tipo) | Conversão central valor → parâmetro SQL tipado (nunca concatena) |
sealed class FormAuditInfo
Dados de auditoria lidos junto com o registro. CodUsuario (long get/set), TimeStamp (string get/set). Construtor inicializa CodUsuario=0, TimeStamp="".
static class WinFormsFormHelper (WinFormsFormHelper.cs, namespace NeXT.LowCode.WinForms)
Wrapper fino WinForms sobre o FormEngine: percorre a árvore de Controls e coleta os que implementam IFormControl/IFormDetail. É a API que o form host chama.
| Assinatura | Propósito |
|---|---|
IList<IFormControl> GetFormControls(Control container) | Coleta recursivamente os IFormControl |
IList<IFormDetail> GetFormDetails(Control container) | Coleta recursivamente as grades IFormDetail |
bool FormLerRegistro(Database db, Control container, string tabela, IFormControl ctrlPK, string nomePK, IFormControl ctrlPKFK = null, string nomePKFK = null, TipoOperacao operacao = TipoOperacao.LerRegistro) | Delega ao FormEngine com controles/detalhes coletados |
bool FormSalvar(Database db, Control container, string tabela, IFormControl ctrlPK, string nomePK, IFormControl ctrlPKFK = null, string nomePKFK = null, long codUsuario = 0) | Delega ao FormEngine.FormSalvar |
void FormExcluir(Database db, string tabela, string nomePK, long valorPK) | Delega ao FormEngine.FormExcluir (só cabeçalho) |
void FormExcluir(Database db, Control container, string tabela, string nomePK, long valorPK) | Exclui cabeçalho + grades do form numa transação |
void FormHabilitar(Control container, FormEstado estado) | Delega ao FormEngine.FormHabilitar |
void FormLimpar(Control container) | Delega ao FormEngine.FormLimpar |
void CarregarCombos(Database db, Control container) | Chama Carregar(db) em cada LowCodeComboBox com Sql definido |
interface ICampoValidavel (ICampoValidavel.cs)
Controle que dispara evento ao ser validado (sair do campo). Usado pela toolbar para load-on-code quando é a PK.
| Membro | Assinatura |
|---|---|
CampoValidado | event EventHandler CampoValidado |
static class LowCodeTheme (LowCodeTheme.cs)
Tema visual (paleta menta/verde estilo forms VB6).
**Campos public static readonly Color:** Fundo (233,254,253), Painel (232,246,236), Verde (31,107,59), Rotulo (0,102,51), FocoCampo (255,250,205), CampoBg (White).
Método: void Apply(Control root) — aplica o tema recursivamente.
PARTE 2 — Controles (NeXT.LowCode.WinForms)
Todos marcados [ToolboxItem(true)]. Propriedades comuns de IFormControl: DataField (string), DataTable (string), TypeControl (TipoCaracter), Text (string), Value (object, read-only). Visible/Enabled vêm de Control.
LowCodeTextBox : UserControl, IFormControl, ICampoValidavel
Campo de texto low-code (Label + TextBox). Serve texto, numérico, valor e data conforme TypeControl. [DefaultProperty("Caption")].
| Propriedade | Tipo | Descrição |
|---|---|---|
Caption | string get/set | Rótulo exibido acima do campo |
MaxLength | int get/set | Tamanho máximo (default 0) |
DataField | string get/set | Coluna vinculada |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Tipo (default Alfanumerico) |
Text | override string get/set | Texto do TextBox interno (Browsable false) |
Value | object get | Retorna o texto interno |
Métodos: new void Focus(). Eventos: event EventHandler CampoValidado (load-on-code da PK).
LowCodeCodigo : UserControl, IFormControl, ICampoValidavel
Campo de código/PK (Label + TextBox numérico + botão "..." de busca). Só aceita dígitos. [DefaultProperty("Caption")].
| Propriedade | Tipo | Descrição |
|---|---|---|
Caption | string get/set | Rótulo |
DataField | string get/set | Coluna (PK numérica) |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Tipo (default Numerico) |
Text | override string get/set | Texto interno (Browsable false) |
Value | object get | Texto interno |
Métodos: new void Focus(). Eventos: event EventHandler CampoValidado (load-on-code); event EventHandler Procurar (clique no botão de busca → o form abre um lookup).
LowCodeComboBox : UserControl, IFormControl
Combo dirigido por SQL (Label + ComboBox + botão "..." de detalhe). Carrega itens de uma consulta (1ª coluna = chave/Value, 2ª = descrição). Text/Value mapeiam para a CHAVE selecionada (FK). [DefaultProperty("Caption")].
| Propriedade | Tipo | Descrição |
|---|---|---|
Caption | string get/set | Rótulo |
Sql | string get/set | SQL de carga (1ª col = chave, 2ª = descrição) |
DescricaoLayout | DescricaoLayout get/set | Como exibir o item (default DescricaoeCodigo) |
DetalheVisible | bool get/set | Exibe o botão "..." de detalhe (default false) |
DataField | string get/set | Coluna vinculada (FK) |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Tipo (default Numerico p/ FK) |
Text | override string get/set | Chave selecionada ("" ou "0" limpa) (Browsable false) |
Value | object get | SelectedValue do combo |
Descricao | string get | Texto de exibição do item selecionado (Browsable false) |
Métodos: void Carregar(Database db) — executa o Sql, aplica o layout e preserva a seleção (lança InvalidOperationException se o SQL retornar < 2 colunas); new void Focus(). Eventos: event EventHandler DetalheClick (clique no "..." → o form abre o cadastro e recarrega o combo).
LowCodeCheckBox : CheckBox, IFormControl
Checkbox que grava 0/1 em DataField. O caption visível é o Text normal do CheckBox; o Text do IFormControl (0/1) é implementação explícita. [DefaultProperty("Text")].
| Propriedade | Tipo | Descrição |
|---|---|---|
DataField | string get/set | Coluna (grava 0/1) |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Default NumericoNotNull (grava 0, não NULL) |
IFormControl.Text | string (explícito) | "1"/"0" conforme Checked |
Value | object get | 1 ou 0 |
LowCodeOption : RadioButton, IFormControl
Radio button que grava 0/1 em DataField. Opções no mesmo container são mutuamente exclusivas (agrupe em GroupBox/Panel). [DefaultProperty("Text")].
| Propriedade | Tipo | Descrição |
|---|---|---|
DataField | string get/set | Coluna (grava 0/1) |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Default NumericoNotNull |
IFormControl.Text | string (explícito) | "1"/"0" conforme Checked |
Value | object get | 1 ou 0 |
LowCodeData : UserControl, IFormControl
Campo de data (Label + DateTimePicker com checkbox p/ vazio). Text = "dd/MM/yyyy" ou "". [DefaultProperty("Caption")].
| Propriedade | Tipo | Descrição |
|---|---|---|
Caption | string get/set | Rótulo |
PermitirVazio | bool get/set | Permitir data vazia (default false) |
DataField | string get/set | Coluna (data) |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Default DataDMY |
Text | override string get/set | Data dd/MM/yyyy ("" ou "0" desmarca) (Browsable false) |
Value | object get | DateTime quando marcado, senão null |
Métodos: new void Focus().
LowCodeImagem : UserControl, IFormControl
Campo de imagem (PictureBox + botões Inserir/Remover). Persiste o caminho do arquivo na coluna (TEXT), sem BLOB. Text = caminho. [DefaultProperty("Caption")].
| Propriedade | Tipo | Descrição |
|---|---|---|
Caption | string get/set | Rótulo (default "Foto") |
DataField | string get/set | Coluna (caminho do arquivo) |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Default Alfanumerico (caminho) |
Text | override string get/set | Caminho; ao setar, carrega a imagem (Browsable false) |
Value | object get | Caminho armazenado |
LowCodeLabel : UserControl, IFormControl
Rótulo bindável read-only (Label título + Label valor). O engine preenche o valor pela coluna DataField; o usuário não edita. [DefaultProperty("Caption")].
| Propriedade | Tipo | Descrição |
|---|---|---|
Caption | string get/set | Rótulo acima do valor |
DataField | string get/set | Coluna a exibir |
DataTable | string get/set | Tabela (opcional) |
TypeControl | TipoCaracter get/set | Default Alfanumerico |
Text | override string get/set | Texto do label de valor (Browsable false) |
Value | object get | Texto exibido |
LowCodeGrid : DataGridView, IFormDetail
Grade de detalhe (master-detail). Encapsula própria persistência (DELETE+reinsert via engine) e carga (SELECT com join). O form só configura metadados; não escreve SQL.
| Propriedade | Tipo | Descrição |
|---|---|---|
DetailTable | string get/set | Tabela filha |
DetailFK | string get/set | Coluna FK do cabeçalho |
LoadSql | string get/set | SELECT de exibição (alias i; engine adiciona WHERE i.<FK> = @p0) |
Linhas | int get | Rows.Count (Browsable false) |
Changed | bool get | Alterada desde a carga (IFormDetail) |
ColunasDestino | string[] get | Campos persistidos (IFormDetail) |
TiposDestino | TipoCaracter[] get | Tipos persistidos (IFormDetail) |
Métodos:
| Assinatura | Propósito |
|---|---|
void AddPersistColumn(string field, string header, TipoCaracter tipo, bool checkBox = false, int fillWeight = 0, Control editor = null) | Coluna gravada no BD (opc. com editor vinculado) |
void AddDisplayColumn(string field, string header, int fillWeight = 0, Control editor = null) | Coluna só de exibição (ex.: descrição de join) |
void LimparGrade() | Limpa linhas; zera Changed |
int NovaLinha() | Adiciona linha vazia; retorna índice |
void DefinirCelula(int linha, string campo, object valor) | Define valor da célula (trata bool) |
object ObterCelula(int linha, string campo) | Retorna valor da célula |
void RemoverSelecionada() | Remove a linha atual (se não for a NewRow) |
bool ContemValor(string campo, object valor) | True se já existe linha com o valor |
int AddRow() | Adiciona linha lendo os editores vinculados; valida chave>0 e duplicidade; retorna índice ou -1 |
DataTable GetRows() | Linhas em memória só com colunas persistidas (IFormDetail) |
void Load(Database db, long valorFK) | Recarrega pela PK do mestre (IFormDetail) |
LowCodeAddRemove : ToolStrip
Barra Adicionar/Remover ligada a um LowCodeGrid. Com Grid setada, os botões chamam AddRow()/RemoverSelecionada()/LimparGrade() automaticamente.
| Propriedade | Tipo | Descrição |
|---|---|---|
Grid | LowCodeGrid get/set | Grade alvo (Browsable false) |
FocusControl | Control get/set | Controle que recebe foco após a ação (Browsable false) |
Eventos: event EventHandler<TypeAddRemove> AddRemoveClick (gancho opcional).
LowCodeToolbar : ToolStrip
Toolbar de CRUD low-code (Novo/Salvar/Excluir/Anterior/Próximo/Limpar/Sair). O form não escreve CRUD: informa Db + DataTable + DataField + PkControl e a toolbar opera via WinFormsFormHelper → FormEngine, incluindo grades de detalhe na mesma transação. Suporta load-on-code (validar a PK com código > 0 carrega o registro).
| Propriedade | Tipo | Descrição |
|---|---|---|
Db | Database get/set | Base de dados (Browsable false) |
DataTable | string get/set | Tabela alvo do CRUD |
DataField | string get/set | Coluna PK |
PkControl | IFormControl get/set | Controle da PK; ao definir, liga o load-on-code (Browsable false) |
CodUsuario | long get/set | Usuário para auditoria (Browsable false) |
FocusControl | Control get/set | Foco após a ação (Browsable false) |
ShowSaveMessage | bool get/set | Mensagem de sucesso ao salvar (default false) |
CanExecute | Func<TypeCommand, bool> get/set | Veto antes da ação; false cancela (Browsable false) |
Eventos: event EventHandler<TypeCommand> CommandClick (reação após a ação — ex.: limpar grade, aplicar defaults).