Delphi、C++ Builder 和 .NET sgcUI 套件成员

sgcEditors,适用于 Delphi、C++ Builder 和 .NET 的现代输入控件

十五款窗体输入控件,在每台显示器上外观一致,行为如同原生编辑框:带真实预订规则的日历、日期和时间选择器、范围滑块、颜色选择器、标签、星级评分、数值调节框、按钮、搜索、掩码和货币编辑框、多列查找和备注框,外加用于设置的开关、IP 地址编辑框、时间跨度编辑框、字体选择器、复选列表框、双列表框、用于触摸面板的 NumPad 和屏幕键盘。用您自己的语言输入日期,保存前检查整个窗体,一个属性即可切换到深色主题,还能将编辑器绑定到数据集。

十五款控件,支持 VCL、FireMonkey、WinForms、WPF、Avalonia每个版本都包含窗体验证原生文本输入,支持输入法和剪贴板免费的 .NET 社区版包含在 sgcUI Standard 中
Gallery 演示,包含月历、日期、时间和日期时间选择器、数值调节框、评分、范围滑块、标记编辑框和颜色选择器

您的窗体理应拥有的输入控件

十六项功能,让日期、金额、代码、选项和标签输入快捷又不易出错。

控件一览

十五款输入控件涵盖真实业务窗体的各类字段,每一款都提供 VCL、FireMonkey 和 .NET 版本。

带有 sgcEditors 控件的 Gallery 演示

控件一览

一个包中的十五款现代输入控件

预订窗体、设置页面和筛选器总是需要同样的输入:日历、日期或时间选择器、滑块、颜色、标签列表、星级评分、带单位的数字、掩码代码、价格、从长列表中选择、搜索框和备注。sgcEditors 将这十五款控件作为一个风格统一的系列提供给您。每款控件都有 VCL 和 FireMonkey 版本,发布的属性和事件相同,也有 WinForms、WPF 和 Avalonia 版本,名称相同,因此您在一款控件上学到的知识适用于其他所有控件。它们共用同一个主题、同一种强调色和同一套键盘模型。从工具面板的 SGC Editors 页拖放它们,第一次运行就外观正确。

  • TsgcVCLMonthCalendar、TsgcVCLDatePicker、TsgcVCLTimePicker、TsgcVCLDateTimePicker
  • TsgcVCLRangeSlider 和用于数字的 TsgcVCLSpinEdit
  • TsgcVCLColorPicker、TsgcVCLTokenEdit、TsgcVCLRating
  • TsgcVCLButtonEdit、TsgcVCLSearchEdit、TsgcVCLMaskEdit、TsgcVCLCurrencyEdit、TsgcVCLLookupEdit、TsgcVCLMemo
  • 全部派生自 TsgcVCLCustomEditor
阅读帮助主题
遵循真实预订规则的日历

控件一览

遵循真实预订规则的日历

酒店、诊所或租赁柜台从不会接受任意日期。月历可选择单个日期,或在 SelectionMode 设为 esmRange 时选择一段日期范围,并由 MaxRangeDays 限制范围的最大天数。超出 MinDate 和 MaxDate 的日期、DisabledDates 列出的日期、周末等 DisabledWeekDays,以及您的 OnIsDateDisabled 处理程序拒绝的任何日期,都会以删除线绘制且无法选择。ISO 8601 周数以及月、年和十年视图可帮助用户快速跳转到很远的日期。同一个日历也驱动日期选择器的下拉面板,因此凡是选择日期的地方,规则都同样适用。

  • SelectionMode:esmSingle 或 esmRange
  • MinDate、MaxDate 和 MaxRangeDays
  • DisabledDates、DisabledWeekDays、OnIsDateDisabled
  • ShowWeekNumbers 显示 ISO 周数
阅读帮助主题
带双滑块的价格和日期范围

控件一览 仅限注册版

带双滑块的价格和日期范围

价格、重量或距离的筛选器,用滑轨上的范围来表达最直观。范围滑块可用一个滑块在 Min 和 Max 之间选取一个值,或在 RangeMode 下用两个滑块选取一个范围,水平或垂直均可。它会绘制刻度、标签,并在被拖动的滑块上方显示数值提示,点击滑轨会把最近的滑块移到该处。两个滑块绝不会交叉,Step 使数值对齐步长,MinRange 保持最小间隔,因此筛选范围不会意外变空。数值和标签遵循控件的区域设置,包括小数点和千位分隔符。

  • RangeMode 配合 Value 和 EndValue
  • Min、Max、Step 和 MinRange
  • TickInterval、ShowLabels、ShowValueTip
  • LabelFormat 或 OnFormatLabel 用于货币

社区版:只绘制并编辑一个滑块;EndValue 会保留但不显示。

阅读帮助主题
带自动补全的标签和胶囊

控件一览 仅限注册版

带自动补全的标签和胶囊

标签、收件人和技能是列表,而不是一行文字。标记编辑框将每个条目绘制为带删除按钮的胶囊,胶囊会自动换行,放不下时可滚动。分隔符、Enter、Tab 或失去焦点都会把输入的文字变成胶囊,粘贴 a, b, c 会生成三个。OnValidateToken 可规范化或拒绝每个条目,AllowDuplicates、CaseSensitive 和 MaxTokens 设置规则。在注册版中,自动补全列表会在用户输入时给出建议。加载或保存记录时,可用 AddToken、RemoveToken 和 Clear 通过代码修改列表。

  • Tokens 保存胶囊;Delimiters 结束一个胶囊
  • OnValidateToken 和 InvalidTokens 检查每个条目
  • AutoCompleteItems 和 AutoCompleteMinChars 用于建议
  • OnTokenAdded 和 OnTokenRemoved 报告变化

社区版:胶囊、验证和限制可用;自动补全列表不会打开。

阅读帮助主题

控件一览 仅限注册版

选取任意颜色,含透明度

主题编辑器、图表设置和标签设计器需要的不只是固定调色板。颜色选择器将色板网格、饱和度与明度方块、色相条、透明度条,以及带预览和十六进制编辑框的一行叠放在一起,由 Parts 选择显示其中哪些部分。十六进制编辑框接受 #RGB、#RGBA、#RRGGBB 和 #RRGGBBAA。选择器将色相与颜色分开保存,因此灰色也保留其色相,用户拖动时方块不会跳动。您可以把品牌调色板定义为色板,用户仍可一键使用完整的选择器。

  • Parts 配合 ecpSwatches、ecpHSV、ecpAlpha、ecpHex
  • Swatches 和 SwatchColumns 用于您的调色板
  • SelectedColor 为 ARGB 值
  • 用户松开鼠标时触发 OnChangeComplete

社区版:仅有色板和十六进制;不绘制 HSV 方块和透明度条,透明度始终为 $FF。

阅读帮助主题

控件一览

风格统一的按钮、搜索和备注

许多字段需要在文本旁边放一个按钮:浏览文件、打开对话框、清除值。按钮编辑框可在原生编辑框的任意一侧放置浏览、下拉、搜索、清除、加号、减号、文本或自绘按钮,每个按钮都有自己的快捷键,屏幕阅读器会按名称列出每个按钮并可按下它。搜索编辑框在输入暂停后触发 OnSearch,按 Enter 则立即触发,并在下拉历史中再次提供之前的搜索。备注框是带主题的多行编辑器,支持占位符、带可选上限的字符计数器,以及在 MinLines 和 MaxLines 之间随行数变化的高度。

  • TsgcVCLButtonEdit,带有 Buttons 和 OnButtonClick
  • TsgcVCLSearchEdit,带有 SearchDelay、History 和 OnSearch
  • TsgcVCLMemo,带有 ShowCounter、MaxLength、AutoHeight
阅读帮助主题

控件一览

可与 .NET 共用的掩码和货币输入

电话号码、邮政编码、账号和价格都需要固定格式。掩码编辑框接受 Delphi EditMask 语法或 .NET MaskedTextBox 语法的输入掩码,因此同一个掩码在 Delphi 和 .NET 应用程序中的行为一致:固定字符保持不变,每个位置只接受对应类型的字符,Text 返回带或不带固定字符的值。货币编辑框存储精确的 Currency 值(.NET 中为 decimal),不使用浮点数。未获得焦点时,它显示区域设置的完整货币格式;用户输入时,显示带符号或 ISO 代码的分组数字。MinValue、MaxValue 和 AllowNegative 将金额限制在范围内。

  • EditMask 和 MaskSyntax:emxDelphi 或 emxDotNet
  • IsComplete、EditText 和 SaveLiterals
  • Value、Decimals、CurrencyCode、SymbolMode
  • PositivePattern 和 NegativePattern
阅读帮助主题

控件一览

从多列列表中选择一行

客户、产品和国家按名称选择,但按键值存储。查找编辑框打开带可选标题行的多列下拉列表,并随用户输入进行过滤。编辑框显示显示列,KeyValue 保存键值,例如国家名称背后的国家代码。行来自 Items(每行一条,单元格以 | 分隔),或来自用于服务器搜索的 OnGetItems,OnNotInList 决定输入的文本与任何行都不匹配时如何处理。在 .NET 中,行也可以通过 ItemsSource、DisplayMember 和 ValueMember 来自任意集合,适用于 WinForms、WPF 和 Avalonia。

  • Columns,带有 Title、Width 和 Alignment
  • KeyColumn、DisplayColumn 和 KeyValue
  • ShowHeader、MatchMode、DropDownRows
  • .NET:每个版本都有 ItemsSource、SelectedValue
阅读帮助主题

控件一览

用于设置和选项的开关

设置页和选项面板用来打开和关闭功能。开关是复选框的现代形式:一条圆角轨道,上面有一个圆形滑块滑向新状态,两侧都可以放可选的标题,需要时轨道内还可以显示“开”和“关”文字。它是自绘的,打开时采用主题的强调色,并随 DPI 缩放。用户的更改会先经过 OnChanging,因此窗体中的规则可以拒绝它,而 OnChange 在每次更改后运行,无论是用户还是代码所做的更改。

  • TsgcVCLToggleSwitch 和 TsgcFMXToggleSwitch,在 .NET 中为 TsgcWinFormsToggleSwitch、TsgcWpfToggleSwitch 和 TsgcAvaloniaToggleSwitch
  • Checked、Caption、CaptionPosition、带 OnText 和 OffText 的 ShowText、ReadOnly 和 Animated
  • TrackOnColor、TrackOffColor 和 ThumbColor,或使用主题的颜色,以及决定轨道大小的 SwitchWidth 和 SwitchHeight
  • OnChanging 通过 Allow 取消用户的更改,OnChange 在每次更改后触发,Toggle 像用户一样更改状态
  • 点击、拖动滑块、空格键、左右方向键、从右到左的窗体,以及带有面向屏幕阅读器的 Toggle 模式的复选框
  • 在 WPF 和 Avalonia 中 Checked 默认双向绑定,在 WinForms 中它会为数据绑定触发 CheckedChanged

开关包含在所有版本中,社区版也不例外。

阅读帮助主题

控件一览

适用于 IPv4 和 IPv6 的 IP 地址编辑框

网络设置、设备配置和防火墙规则都需要输入地址。在 IPv4 模式下,IP 地址编辑框显示四个以点分隔的八位组字段,并随用户输入自动跳到下一个字段,因此输入地址与普通编辑框一样快,而且格式始终正确:大于 255 的值会被限制,焦点离开时空字段变为 0。在 IPv6 模式下它是一个文本字段,接受十六进制数字、冒号和点,会验证文本,并在焦点离开时按 RFC 5952 规范格式写出,因此 2001:DB8:0:0:0:0:2:1 变成 2001:db8::2:1。

  • TsgcVCLIPAddressEdit 和 TsgcFMXIPAddressEdit,在 .NET 中为 TsgcWinFormsIPAddressEdit、TsgcWpfIPAddressEdit 和 TsgcAvaloniaIPAddressEdit
  • Mode 选择 IPv4 或 IPv6,Address 是值,Octets 读取或设置 IPv4 地址的一个字段
  • IsValid 表示地址是否完整,启用 Required 后,为空或不完整的地址会显示主题的错误边框
  • 输入点或第三位数字会跳到下一个字段,在字段开头按 Backspace 会返回上一个字段,左右方向键可跨越字段边界,粘贴的地址会填满所有字段
  • OnChange 在每次更改后触发,Clear 清空地址,屏幕阅读器会看到带有 Value 模式的编辑框
  • 在 WPF 和 Avalonia 中 Address 默认双向绑定,在 WinForms 中它会为数据绑定触发 AddressChanged

IP 地址编辑框包含在所有版本中,社区版也不例外。

阅读帮助主题

控件一览

用于时长的时间跨度编辑框

超时、间隔或运行时间是一段时长,而不是一天中的某个时刻。时间跨度编辑框按天、小时、分钟、秒和毫秒的分段显示它,用户通过输入、方向键、鼠标滚轮或微调按钮一次编辑一个分段。一次步进会进位到下一个分段,因此 59 秒加一是一分钟,而且显示的最高分段没有上限,所以不显示天时,50 小时显示为 50:00:00。

  • TsgcVCLTimeSpanEdit 和 TsgcFMXTimeSpanEdit,在 .NET 中为 TsgcWinFormsTimeSpanEdit、TsgcWpfTimeSpanEdit 和 TsgcAvaloniaTimeSpanEdit
  • Value 在 Delphi 中以毫秒表示,在 .NET 中是 TimeSpan,并提供 Days、Hours、Minutes、Seconds 和 Milliseconds 各部分
  • Segments 选择显示的分段,DisplayFormat 以时钟格式 1.02:30:05.250 或带单位的格式 1d 2h 30m 5s 250ms 写出值
  • MinValue 和 MaxValue 限制值,AllowNegative 接受前导负号,Increment 和 ShowButtons 设置步长和微调按钮
  • 上下方向键对当前分段步进,PageUp 和 PageDown 步进十,左右方向键和 Tab 在分段之间移动,屏幕阅读器会看到以秒为单位、带 RangeValue 模式的微调框
  • 在 WPF 和 Avalonia 中 Value 默认双向绑定,在 WinForms 中它会为数据绑定触发 ValueChanged

时间跨度编辑框包含在所有版本中,社区版也不例外。

阅读帮助主题

控件一览

可预览每个字体系列的字体选择器

报表设计器、标签编辑器和设置页都会让用户选择字体。字体选择器是一个带下拉按钮的编辑框,其列表用各自的字体绘制每个字体系列。输入可筛选字体系列,最近选择的系列列在分隔线上方的最前面,还有一个筛选器只保留等宽字体系列,适用于代码编辑器或终端。在应用程序填充列表之前,列表来自平台。

  • TsgcVCLFontPicker 和 TsgcFMXFontPicker,在 .NET 中为 TsgcWinFormsFontPicker、TsgcWpfFontPicker 和 TsgcAvaloniaFontPicker
  • FontName 是值,Fonts 是字体系列列表,RefreshFonts 在安装字体后重新加载列表
  • ShowPreview 用各自的字体绘制每个名称,PreviewText 在名称后添加示例文本
  • RecentCount 和 RecentFonts 保存最近选择的系列,供应用程序保存并重新加载
  • FontFilter 只保留等宽字体系列,Alt+向下键打开列表,回车键或单击选择系列,Esc 关闭列表
  • Delphi 的字体选择器在 Windows 上的 VCL 和 FireMonkey 中绘制预览字体;在其他 FireMonkey 平台上,名称以主题字体列出
  • 在 WPF 和 Avalonia 中 FontName 默认双向绑定

字体选择器包含在所有版本中,社区版也不例外。

阅读帮助主题

控件一览

用于长选项列表的复选列表框

网格的列、报表的筛选条件或许可的模块,都是很长的选项列表。复选列表框是一个可滚动的列表,每一行都有一个复选框,可以是未选中、选中或灰色,每个项目还有一个启用标志。可选的全选标题行会选中或取消选中所有已启用的项目,可选的筛选框会隐藏不包含所输入文本的行,但不改变它们的状态。只绘制可见的行,因此 10000 个项目的列表依然流畅。

  • TsgcVCLCheckListBox 和 TsgcFMXCheckListBox,在 .NET 中为 TsgcWinFormsCheckListBox、TsgcWpfCheckListBox 和 TsgcAvaloniaCheckListBox
  • Items 的每个项目带有 Checked、State 和 ItemEnabled,AllowGrayed 提供第三种状态
  • ShowCheckAll 显示三态的全选行,ShowFilter 显示筛选框
  • CheckAll、UncheckAll 和 CheckedCount,以及在用户更改时先于 OnChange 触发的 OnClickCheck
  • 空格键切换当前行,Ctrl+A 选中所有项目,按字母键跳到下一个以该字母开头的项目,屏幕阅读器会看到带有 Toggle 模式的列表项
  • 在 .NET 中,CheckedItems 和 CheckedIndices 是用于绑定的只读列表,ItemCheck 事件先于 Change 触发

复选列表框包含在所有版本中,社区版也不例外。

阅读帮助主题

控件一览

用于选择项目并排序的双列表框

选择报表的列、小组的成员或流程的步骤,意味着把项目从一个列表移到另一个列表。双列表框在左侧绘制可用列表,在右侧绘制已选列表,中间的按钮移动选中的行或所有行,外侧的上移和下移按钮对已选列表重新排序。双击或拖动会把项目移到另一个列表,在已选列表内拖动则会重新排序。

  • TsgcVCLDualListBox 和 TsgcFMXDualListBox,在 .NET 中为 TsgcWinFormsDualListBox、TsgcWpfDualListBox 和 TsgcAvaloniaDualListBox
  • AvailableItems 和 SelectedItems、AvailableCaption 和 SelectedCaption、ShowCaptions 和 ShowReorderButtons
  • SortAvailable 按顺序插入移回的项目,ShowFilter 在每个列表上方添加筛选框,ReadOnly 保留选择并拒绝移动
  • MoveToSelected、MoveAllToSelected、MoveToAvailable、MoveAllToAvailable、MoveUp 和 MoveDown 的作用与按钮相同
  • OnMoving 可以让某个项目留在原处,OnChange 每次操作只触发一次
  • 单击、Ctrl+单击、Shift+单击和 Ctrl+A 用于选择,Tab 在两个列表之间切换,Ctrl+向右和 Ctrl+向左用于移动,Ctrl+向上和 Ctrl+向下用于重新排序,在从右到左的窗体中视图会镜像显示
  • 在 WPF 和 Avalonia 中 SelectedItems 默认双向绑定,在 WinForms 中它会为数据绑定触发 SelectedItemsChanged

双列表框包含在所有版本中,社区版也不例外。

阅读帮助主题

输入、语言与数据

为键盘用户提供快速输入,保存前检查每个字段,为每位用户提供合适的语言,并可直接链接到您的数据集。

输入、语言与数据

真正的键入,而不只是点击

数据录入人员是键入日期的,而不是在日历里一路点击。sgcEditors 的每个文本字段都是平台的真实编辑控件,因此日语、中文和韩语的输入法组合、剪贴板、撤销、上下文菜单和屏幕阅读器都能正常工作。解析很宽松:斜杠、连字符、点、冒号、逗号或空格都可分隔各字段,区域设置中的月份和星期名称也能识别,两位数年份会按基准年处理。上下键可滚动光标所在的部分,无法解析的文本会触发 OnParseError。

  • DisplayFormat 使用 d、m、y、h、n、s 段
  • OnParseError 用于接受或拒绝异常输入
  • AllowEmpty 和 TextHint 用于可选字段
  • 数值调节框同时接受 . 和 , 作为小数点
阅读帮助主题

输入、语言与数据

用于触摸面板的 NumPad

车间里的触摸面板没有键盘,而系统键盘会遮住半个屏幕。NumPad 以足够用手指或戴手套操作的大按键输入数字。在窗体上放置一个停靠的键盘,它会写入获得焦点的控件;也可以给控件附加一个下拉键盘,点按控件即可在其下方打开键盘。目标无需任何改动:键盘读取其范围和小数位数,并把数值作为用户更改写入,因此目标的舍入、限值和 OnChange 的运行方式与用户亲自输入时完全相同。

  • 停靠的 TsgcVCLNumPad 和下拉形式的 TsgcVCLNumPadPopup,也提供 FireMonkey 版本和 .NET 版本
  • 可向微调编辑框、货币编辑框、标准编辑框以及 sgcGauges 的旋钮和滑块仪表中输入
  • Associate 选择目标,或让键盘跟随获得焦点的控件
  • 显示已输入数字的显示屏,以及像 Min 0 Max 120 这样的限值行

NumPad 包含在每个版本中,社区版也不例外。它是面向操作员画面的 sgcUI HMI 套件的一部分。

阅读帮助主题

输入、语言与数据

用于自助终端和触摸屏的屏幕键盘

自助终端、自助服务机或操作员面板除了数字,还需要输入姓名、编码和备注。屏幕键盘是建立在与 NumPad 相同输入路径上的完整键盘。把它停靠在窗体上,它会写入获得焦点的控件;也可以附加一个下拉键盘,在编辑框获得焦点时于其下方打开。键盘从不抢走焦点,因此目标的插入符和选区保持原位,标准编辑框、备注框和 sgcEditors 控件无需任何改动。

  • 停靠的 TsgcVCLKeyboard 和下拉形式的 TsgcVCLKeyboardPopup,也提供 FireMonkey 版本,以及 .NET 中的 WinForms、WPF 和 Avalonia 版本
  • Associate 选择目标,或让键盘跟随焦点。AutoPopup、AutoPopupAll、PopupPosition 和 CloseOnEnter 控制下拉行为
  • 字母、符号和数字页面,支持 Shift、Caps Lock、AltGr,以及用于带重音字母的死键
  • 十种内置布局(en-US, en-GB, es-ES, fr-FR, de-DE, it-IT, pt-BR, nl-NL, pl-PL, tr-TR),用 sgcKeyboardRegisterLayout 注册自己的布局,以及在 Layouts 中循环切换的布局键
  • OnKeyText 在文本写入之前更改或取消它,OnEnterKey 在回车之后运行
  • 主题、从右到左的窗体,以及屏幕阅读器可以朗读的按键

屏幕键盘包含在每个版本中,社区版也不例外。它是面向操作员画面和自助终端的 sgcUI HMI 套件的一部分。

阅读帮助主题
每个控件都说用户的语言

输入、语言与数据

每个控件都说用户的语言

国际化团队和多语言产品需要让每位用户读起来都自然的日期。每个控件都有自己的 FormatSettings,由用户区域设置填充,并可在运行时更改,因此同一窗体上的两个控件甚至可以使用两种区域设置。日历和选择器从中获取日名和月名、日期和时间格式、AM 和 PM 字符串以及分隔符。FirstDayOfWeek 和 WeekNumbering 遵循区域设置或您的选择,数字则使用正确的小数点和千位分隔符。单位、提示和无障碍名称仍是您自己的属性,因此可以和窗体的其余部分一起翻译。

  • 每个控件各自的 FormatSettings
  • FirstDayOfWeek:efdLocale 或强制 efdMonday
  • WeekNumbering:默认为 ewnISO8601
  • 用于无界面模型的 TsgcEditorLocale
  • 支持阿拉伯语和希伯来语的从右到左:微调、下拉和清除按钮移到另一侧,滑块、评分和日历从右侧开始,编辑框从右向左阅读
阅读帮助主题
适用于您窗体的数据感知版本

输入、语言与数据 仅限注册版

适用于您窗体的数据感知版本

大多数 Delphi 业务窗体都建立在 TDataSet 之上,而手动连接每个编辑器既重复又繁琐。十款数据感知控件通过 DataSource 和 DataField 直接绑定到字段:日期选择器、时间选择器、数值调节框、评分、第二个滑块绑定 EndDataField 的范围滑块、按钮编辑框、采用其字段 EditMask 的掩码编辑框、货币编辑框、备注框,以及通过 ListSource、KeyField 和 ListField 从第二个数据集填充多列列表的查找编辑框,类似 TDBLookupComboBox。AllowEmpty 开启时,空字段显示为空,必填字段会向验证器报告空值。它们通过 TsgcEditorFieldLink 绑定,该类只使用 DB 单元,因此 FireMonkey 版本无需 LiveBindings。在 .NET 中,WinForms 编辑器通过 DataSource、DataMember 和 DataField 绑定字段,数据源可以是 BindingSource、DataTable、DataView 或 List,WPF 和 Avalonia 的值属性支持双向绑定。把它们放到现有窗体上,您已有的数据集逻辑照常工作,无需改动。

  • TsgcVCLDBDatePicker、TsgcVCLDBTimePicker、TsgcVCLDBSpinEdit
  • TsgcVCLDBRating 和 TsgcVCLDBRangeSlider
  • TsgcVCLDBButtonEdit、TsgcVCLDBMaskEdit、TsgcVCLDBCurrencyEdit、TsgcVCLDBMemo、TsgcVCLDBLookupEdit
  • DataSource、DataField、EndDataField;查找列表通过 ListSource、KeyField、ListField
  • WinForms:DataSource、DataMember、DataField;WPF 和 Avalonia:值属性支持双向绑定

在 .NET 社区包中,WinForms 编辑器没有 DataSource、DataMember 和 DataField;WPF 和 Avalonia 绑定以及查找编辑框的 ItemsSource 在两个版本中都可使用。

阅读帮助主题

输入、语言与数据

保存前检查整个窗体

窗体只有在每个字段都正确时才算完成。sgcUICore 的验证器按规则检查窗体上的控件:必填、范围、长度、正则表达式、电子邮件、与另一个字段比较以及您自己的代码。它查找控件的方式与智能粘贴相同,因此无论是 sgcEditors 控件,还是标准的编辑框、备注框、组合框、复选框和选择器,都会被检查,适用于 VCL、FireMonkey、WinForms、WPF 和 Avalonia。掩码编辑框会报告不完整的值,查找编辑框会报告不在列表中的文本,无需任何规则。错误以主题错误颜色的边框、以消息作为工具提示的图标和可选的汇总列表显示,屏幕阅读器会连同字段一起读出消息。在 .NET 中,验证器还会显示数据层的错误:WinForms 和 WPF 上的 IDataErrorInfo 和 INotifyDataErrorInfo,Avalonia 上的数据验证错误。

  • TsgcVCLValidator、TsgcFMXValidator、TsgcWinFormsValidator、TsgcWpfValidator、TsgcAvaloniaValidator
  • 规则 uvrRequired、uvrRange、uvrLength、uvrRegex、uvrEmail、uvrCompare、uvrCustom
  • Trigger:默认为 uvtExit,也可为 uvtChange 或 uvtManual;保存前调用 Validate
  • TsgcVCLValidationSummary 列出错误,点击时聚焦到对应字段

每个版本都包含,社区版也不例外。正则表达式在 Delphi 7 到 13 和 .NET 上匹配相同的文本。

阅读帮助主题

输入、语言与数据

排布窗体,或根据您的数据生成它

布局控件排列窗体上的控件,sgcEditors 和标准控件均适用,支持分组、选项卡分组和多列,标题对齐到同一宽度,带有用户可拖动的分隔条和从右到左的布局,SaveLayout 把排布保存为 JSON。数据表单建立在它之上。把它指向一个 TDataSet,或绑定您自己类的对象,它就会为每个字段创建一个 sgcEditors 控件、每个字段的验证规则、错误汇总,以及用于浏览、添加、编辑、删除和提交记录的导航条。智能粘贴用粘贴的文本(例如电子邮件签名或地址块)填充整条记录,并标出它填充的字段。在 .NET 中,WinForms、WPF 和 Avalonia 的数据表单接受 DataTable、列表或对象。

  • TsgcVCLLayoutControl、TsgcFMXLayoutControl;SaveLayout 和 LoadLayout
  • TsgcVCLDataForm、TsgcFMXDataForm、TsgcWinFormsDataForm、TsgcWpfDataForm、TsgcAvaloniaDataForm
  • Fields:每个字段的标题、类型、必填、限制、分组、选项卡和顺序;类使用 BindObject
  • SmartPasteFromClipboard、SmartPasteUndo 和导航条上的智能粘贴按钮

布局控件包含在每个版本中,社区版也不例外;Delphi 社区版没有 sgcEditors 的设计时包,因此在那里需要用代码创建。数据表单、其验证规则及其智能粘贴仅限注册版。

阅读帮助主题

键盘、DPI 与主题

评审人员会检查的细节:无需鼠标,在每台显示器上都清晰,外观与您的应用程序匹配。

在每台显示器上都清晰

键盘、DPI 与主题

在每台显示器上都清晰

如今,150% 缩放的笔记本电脑旁边放着 100% 缩放的外接显示器是常态,而模糊的输入控件显得廉价。sgcEditors 以 96 DPI 的逻辑像素布局每个控件,并按屏幕的缩放比例绘制,您的代码无需做任何事。当 VCL 窗体移动到 DPI 不同的显示器时,内部编辑框及其字体会随控件缩放,下拉面板则按其打开所在显示器的 DPI 绘制。FireMonkey 的光栅化遵循场景缩放,适用于 Retina 和 Android。

  • 以逻辑像素布局,按屏幕缩放绘制
  • 内部编辑框在 WM_DPICHANGED 时重新缩放
  • 下拉面板使用其所在显示器的 DPI
  • SaveToPNG 接受缩放比例以生成清晰图像
阅读帮助主题
对键盘和屏幕阅读器友好

键盘、DPI 与主题

对键盘和屏幕阅读器友好

sgcEditors 的任何功能都不需要鼠标。绘制型控件自行获取焦点,文本控件则把焦点转交给其内部编辑框,获得焦点的控件会以强调色绘制 2 像素的焦点环。在日历中,方向键按一天或一周移动并跳过禁用日期,PageUp 和 PageDown 按月移动,Shift 可扩展范围。在选择器中,F4 或 Alt+Down 打开下拉面板,Escape 恢复原值。数值调节框可用 Up、Down、PageUp 和 PageDown 步进。

  • F4 或 Alt+Down 打开每一个下拉面板
  • Ctrl+Up 将日历缩小到年和十年视图
  • 数值调节框的 Increment 和 LargeIncrement
  • 原生编辑框确保屏幕阅读器持续可用
阅读帮助主题
一个属性切换浅色与深色

键盘、DPI 与主题

一个属性切换浅色与深色

当每个输入控件都遵循同一个主题时,窗体才显得完整。每个控件都有 Theme、AccentColor 和 TextStyle,边框、悬停、按下状态、选中和禁用状态的颜色都由它们推导而来,因此一个属性就能改变整体外观。这些令牌与每款 sgcUI 产品使用的相同,所以放在 sgcDashboard 磁贴中或 sgcToolbar 下方的编辑器无需额外工作即可匹配。禁用的控件会自动向背景色过渡。在运行时切换主题,每个编辑器都会重绘,方便您提供深色模式设置。

  • Theme:utDefault(默认,跟随应用程序主题)、utLight 或 utDark
  • AccentColor 用于选中、滑块、填充和焦点环
  • TextStyle 用于大小、粗体和颜色
  • 与整个 sgcUI 套件使用相同的主题令牌
阅读帮助主题

查看 sgcEditors 的实际效果

sgcUI 套件演示中的 sgcEditors:使用内置模拟数据、可离线运行的完整应用程序。

谁在用 sgcEditors 构建应用

预订和预约窗体

预订窗体需要一个遵守休息日的入住范围、客人数量、到达时间,也许还有对上次入住的评分。月历强制执行 MinDate、MaxRangeDays 和禁用日期,数值调节框统计客人数,时间选择器接受键入的时间,评分收集反馈,全都使用同一个主题。BookingForm 演示用七个编辑器搭建了一个酒店预订,并带有实时摘要。

  • 日历范围
  • 数值调节框
  • 评分
运行 BookingForm 演示

TDataSet 上的数据录入

业务线应用整天都在编辑记录。十款数据感知编辑器通过 DataSource 和 DataField 绑定到 TDataSet 字段,范围滑块绑定两端,空字段显示为空。结合真正的键盘输入和宽松解析,操作员可以快速键入数值,数据集接收到的是干净的数据。DataAware 演示把这十个编辑器放在 TClientDataSet 上,旁边是 TDBGrid 和 TDBNavigator。

  • 数据感知编辑器
  • 文本输入
  • 键盘
运行 DataAware 演示

国际化的日程安排应用

在多个国家使用的计划工具必须向每位用户显示正确的周起始日、周数和月份名称。每个控件都带有自己的 FormatSettings,因此同一窗体可以并排显示德语日历和英语日历,FirstDayOfWeek 和 WeekNumbering 遵循区域设置或您的规则。Calendar 演示可在英语、德语、西班牙语、法语和意大利语之间切换,并将范围限制为 14 天。

  • 本地化
  • 周数
  • 禁用日期
运行 Calendar 演示

几行代码实现反馈表单

Delphi、C++ Builder 和 C# 中使用相同的 API:一个评分、一个范围滑块和一个标记编辑框,全部通过 OnChange 报告。

uses
  SysUtils, Classes, Controls, Forms, StdCtrls,
  sgcEditors_Types, sgcEditors_VCL_Value, sgcEditors_VCL_Token;

type
  TFeedbackForm = class(TComponent)
  public
    Stars: TsgcVCLRating;
    Budget: TsgcVCLRangeSlider;
    Tags: TsgcVCLTokenEdit;
    Summary: TLabel;
    procedure EditorChange(Sender: TObject);
  end;

procedure TFeedbackForm.EditorChange(Sender: TObject);
begin
  // OnChange fires for every new value: clicked, dragged or typed
  Summary.Caption := Format('%.1f stars, budget %.0f to %.0f, %d tags',
    [Stars.Value, Budget.Value, Budget.EndValue, Tags.Tokens.Count]);
end;

function CreateFeedbackForm(aForm: TForm): TFeedbackForm;
begin
  Result := TFeedbackForm.Create(aForm);
  Result.Stars := TsgcVCLRating.Create(aForm);
  Result.Stars.Parent := aForm;
  Result.Stars.SetBounds(16, 16, 200, 32);
  Result.Stars.Glyph := ergHeart;
  Result.Stars.Precision := erpHalf;
  Result.Stars.Value := 3.5;
  Result.Stars.OnChange := Result.EditorChange;
  Result.Budget := TsgcVCLRangeSlider.Create(aForm);
  Result.Budget.Parent := aForm;
  Result.Budget.SetBounds(16, 60, 320, 48);
  Result.Budget.Max := 500;
  Result.Budget.Step := 10;
  Result.Budget.RangeMode := True;
  Result.Budget.Value := 80;
  Result.Budget.EndValue := 240;
  Result.Budget.ShowLabels := True;
  Result.Budget.OnChange := Result.EditorChange;
  Result.Tags := TsgcVCLTokenEdit.Create(aForm);
  Result.Tags.Parent := aForm;
  Result.Tags.SetBounds(16, 120, 320, 64);
  Result.Tags.TextHint := 'Add a tag';
  Result.Tags.AutoCompleteItems.CommaText := 'Breakfast,Parking,Pool';
  Result.Tags.AddToken('Breakfast');
  Result.Tags.OnChange := Result.EditorChange;
  Result.Summary := TLabel.Create(aForm);
  Result.Summary.Parent := aForm;
  Result.Summary.SetBounds(16, 196, 320, 20);
  Result.EditorChange(nil);
end;
#include <vcl.h>
#include "sgcEditors_Types.hpp"
#include "sgcEditors_VCL_Value.hpp"
#include "sgcEditors_VCL_Token.hpp"

class TFeedbackHandler : public TObject
{
public:
  TsgcVCLRating *Stars;
  TsgcVCLRangeSlider *Budget;
  TsgcVCLTokenEdit *Tags;
  TLabel *Summary;
  void __fastcall EditorChange(TObject *Sender);
};

void __fastcall TFeedbackHandler::EditorChange(TObject *Sender)
{
  // OnChange fires for every new value: clicked, dragged or typed
  Summary->Caption = FormatFloat("0.0", Stars->Value) + " stars, budget " +
    FormatFloat("0", Budget->Value) + " to " + FormatFloat("0", Budget->EndValue) +
    ", " + IntToStr(Tags->Tokens->Count) + " tags";
}

TFeedbackHandler * __fastcall CreateFeedbackForm(TForm *Form)
{
  TFeedbackHandler *H = new TFeedbackHandler();
  H->Stars = new TsgcVCLRating(Form);
  H->Stars->Parent = Form;
  H->Stars->SetBounds(16, 16, 200, 32);
  H->Stars->Glyph = ergHeart;
  H->Stars->Precision = erpHalf;
  H->Stars->Value = 3.5;
  H->Stars->OnChange = H->EditorChange;
  H->Budget = new TsgcVCLRangeSlider(Form);
  H->Budget->Parent = Form;
  H->Budget->SetBounds(16, 60, 320, 48);
  H->Budget->Max = 500;
  H->Budget->Step = 10;
  H->Budget->RangeMode = true;
  H->Budget->Value = 80;
  H->Budget->EndValue = 240;
  H->Budget->ShowLabels = true;
  H->Budget->OnChange = H->EditorChange;
  H->Tags = new TsgcVCLTokenEdit(Form);
  H->Tags->Parent = Form;
  H->Tags->SetBounds(16, 120, 320, 64);
  H->Tags->TextHint = "Add a tag";
  H->Tags->AutoCompleteItems->CommaText = "Breakfast,Parking,Pool";
  H->Tags->AddToken("Breakfast");
  H->Tags->OnChange = H->EditorChange;
  H->Summary = new TLabel(Form);
  H->Summary->Parent = Form;
  H->Summary->SetBounds(16, 196, 320, 20);
  H->EditorChange(NULL);
  return H;
}
using System;
using System.Drawing;
using System.Windows.Forms;
using esegece.sgcUICore;
using esegece.sgcEditors;

public class FeedbackForm : Form
{
    private readonly TsgcWinFormsRating stars;
    private readonly TsgcWinFormsRangeSlider budget;
    private readonly TsgcWinFormsTokenEdit tags;
    private readonly Label summary = new Label { Location = new Point(12, 196), Size = new Size(320, 20) };

    public FeedbackForm()
    {
        ClientSize = new Size(360, 230);
        stars = new TsgcWinFormsRating { Location = new Point(12, 12), Size = new Size(200, 32) };
        stars.Glyph = TsgcEditorRatingGlyph.ergHeart;
        stars.Precision = TsgcEditorRatingPrecision.erpHalf;
        stars.Value = 3.5;

        budget = new TsgcWinFormsRangeSlider { Location = new Point(12, 56), Size = new Size(320, 48) };
        budget.BeginInit();
        budget.Max = 500;
        budget.Step = 10;
        budget.RangeMode = true;
        budget.Value = 80;
        budget.EndValue = 240;
        budget.EndInit();
        budget.ShowLabels = true;

        tags = new TsgcWinFormsTokenEdit { Location = new Point(12, 116), Size = new Size(320, 64) };
        tags.TextHint = "Add a tag";
        foreach (string s in new[] { "Breakfast", "Parking", "Pool" })
            tags.AutoCompleteItems.Add(s);
        tags.Tokens.Add("Breakfast");

        // OnChange fires for every new value: clicked, dragged or typed
        foreach (TsgcWinFormsCustomEditor e in new TsgcWinFormsCustomEditor[] { stars, budget, tags })
        {
            e.OnChange = s => ShowSummary();
            Controls.Add(e);
        }
        Controls.Add(summary);
        ShowSummary();
    }

    private void ShowSummary() =>
        summary.Text = $"{stars.Value:0.0} stars, budget {budget.Value:0} to {budget.EndValue:0}, {tags.Tokens.Count} tags";
}
dotnet add package esegece.sgcEditors.WinForms

验证订单窗体

由 sgcUICore 的验证器检查的查找编辑框、掩码编辑框和货币编辑框。用户保存时调用 Validate:它显示每个错误并聚焦到第一个无效字段。

function CreateOrderValidator(aForm: TForm; aCountry: TsgcVCLLookupEdit;
  aPhone: TsgcVCLMaskEdit; aPrice: TsgcVCLCurrencyEdit): TsgcVCLValidator;
var
  oRule: TsgcVCLValidationRule;
begin
  // cells: key | name, the edit shows the name and KeyValue keeps the code
  aCountry.Items.Add('ES|Spain');
  aCountry.Items.Add('FR|France');
  aCountry.Items.Add('DE|Germany');
  aCountry.KeyColumn := 0;
  aCountry.DisplayColumn := 1;
  // Delphi EditMask syntax: the user types the digits, the literals stay
  aPhone.EditMask := '(000) 000-0000;0;_';
  aPrice.CurrencyCode := 'EUR';

  Result := TsgcVCLValidator.Create(aForm);
  Result.Container := aForm;
  Result.Display := [uvdBorder, uvdIcon];
  oRule := TsgcVCLValidationRule(Result.Rules.Add);
  oRule.Control := aCountry;
  oRule.Kind := uvrRequired;
  oRule := TsgcVCLValidationRule(Result.Rules.Add);
  oRule.Control := aPrice;
  oRule.Kind := uvrRange;
  oRule.MinValue := '1';
  oRule.MaxValue := '10000';
end;
public class Country
{
    public string Code { get; set; }
    public string Name { get; set; }
}

public class OrderForm : Form
{
    private readonly TsgcWinFormsLookupEdit country = new TsgcWinFormsLookupEdit();
    private readonly TsgcWinFormsMaskEdit phone = new TsgcWinFormsMaskEdit();
    private readonly TsgcWinFormsCurrencyEdit price = new TsgcWinFormsCurrencyEdit();
    private readonly TsgcWinFormsValidator validator = new TsgcWinFormsValidator();

    public OrderForm()
    {
        country.SetBounds(16, 16, 240, 28);
        phone.SetBounds(16, 56, 240, 28);
        price.SetBounds(16, 96, 240, 28);
        Controls.AddRange(new Control[] { country, phone, price });

        // any list: the edit shows Name, SelectedValue returns Code
        country.ItemsSource = new List<Country>
        {
            new Country { Code = "ES", Name = "Spain" },
            new Country { Code = "FR", Name = "France" }
        };
        country.DisplayMember = "Name";
        country.ValueMember = "Code";
        phone.EditMask = "(000) 000-0000"; // MaskedTextBox syntax by default
        price.Decimals = 2;

        validator.Container = this;
        validator.Rules.Add(new TsgcWinFormsValidationRule
            { Control = country, Kind = TsgcUIValidationRuleKind.uvrRequired });
        validator.Rules.Add(new TsgcWinFormsValidationRule
            { Control = price, Kind = TsgcUIValidationRuleKind.uvrRange, MinValue = "1" });
    }

    public bool Save() => validator.Validate();

根据数据集生成客户窗体

打开的数据集上的 TsgcVCLDataForm 会创建编辑器、验证规则和导航条。设置字段的类型和分组,重建后,导航条上的智能粘贴按钮即可从剪贴板填充记录。

uses
  Forms, Controls, DB,
  sgcUICore_AI, sgcEditors_DataForm, sgcEditors_VCL_DataForm;

function CreateCustomerForm(aOwner: TForm; aSource: TDataSource;
  aProvider: TsgcUIAIProvider): TsgcVCLDataForm;
var
  oField: TsgcDataFormField;
begin
  Result := TsgcVCLDataForm.Create(aOwner);
  Result.Parent := aOwner;
  Result.Align := alClient;
  // an open dataset: one field, one editor and one rule per TField
  Result.DataSource := aSource;
  oField := Result.Fields.FindField('EMAIL');
  oField.Kind := edfEmail;
  oField.Required := True;
  oField.Group := 'Contact';
  Result.Fields.FindField('PHONE').Group := 'Contact';
  Result.RebuildEditors;
  // the Smart Paste button of the navigator fills every field from the
  // clipboard; without a provider a local parser reads "Name: value" lines
  Result.Provider := aProvider;
end;

运行 sgcEditors 演示

Gallery、Calendar、BookingForm、Validation 和 DataAware 提供 VCL 和 C++ Builder 版本,另有适用于 FireMonkey 的 GalleryFMX 和 ValidationFMX;.NET 版本提供适用于 WinForms、WPF 和 Avalonia 的 Gallery 和 Validation,以及 BookingForm、BindingWpf 和 DataAwareWinForms。

Calendar

Calendar

最长 14 天的范围、周数、禁用的周末和节假日,以及在英语、德语、西班牙语、法语和意大利语之间切换的区域设置。

BookingForm

酒店预订,带有入住、客人和到达时间的实时摘要、国家查找、掩码电话号码,以及在预订前检查客人字段的验证器。它展示了这些控件如何在真实窗体上协同工作。

DataAware

仅限注册版 DataAware

十款数据感知编辑器位于 TClientDataSet 上,并配有 TDBGrid 和 TDBNavigator,另有从第二个数据集填充的查找编辑框和检查必填字段的验证器。数据感知控件需要注册版或试用版。

GalleryFMX

使用 FireMonkey 编辑器构建的 Gallery,适用于 Windows 和 Android,属性和事件与 VCL 控件相同。

Validation

标准控件和 sgcEditors 控件上的每种规则类型、三种触发方式、边框和图标显示以及汇总列表。ValidationFMX 在 FireMonkey 中实现相同功能,.NET 版本提供 Validation、ValidationWpf 和 ValidationAvalonia。

预编译演示

每款 sgcUI 产品的可直接运行的可执行文件,无需安装。

下载 sgcUI_bin.zip →

入门指南

适用于 Delphi (VCL) 的五个 QuickStart 演示位于 Demos\Editors\Delphi\00.QuickStart。PDF 指南逐步讲解这些演示:窗体上的第一批编辑器、读取和写入值、主题、验证,以及基于数据表单构建的联系人应用程序。

下载指南(PDF,英文) →

sgcEditors 包含在哪些版本中

sgcEditors 包含在每个 sgcUI 版本中,也可单独购买。sgcEditors 同时包含在 All-Access 捆绑包中。

sgcEditors 单品包

€199 / 开发者,含完整源代码,1 年更新。

购买 sgcEditors → 查看价格 →

sgcUI Standard

sgcEditors、sgcGrid、sgcNavigation和sgcToolbar,起价 €380。

查看 Standard →

sgcUI Professional

Standard 加 sgcCharts、sgcDashboard和sgcGauges,起价 €529。

查看 Professional →

sgcUI Enterprise

全部 17 款 sgcUI 产品,起价 €699。

查看 Enterprise →

免费的社区版(NuGet 上的 esegece.sgcEditors.Community)包含全部十五款控件、布局控件和验证框架,但颜色选择器没有 HSV 方块和透明度条,标记编辑框没有自动补全列表,范围滑块只有一个滑块,并且没有数据感知编辑器,没有数据表单,也没有 WinForms DataSource 绑定。

功能社区版(免费)注册版
全部十五款控件,支持 VCL、FireMonkey 和 .NET✓✓
验证:规则、错误显示、汇总(sgcUICore)✓✓
WinForms、WPF 和 Avalonia 中来自 ItemsSource 的查找列表✓✓
Native text entry, lenient parsing, localisation✓✓
Calendar ranges, limits and disabled days✓✓
Keyboard, DPI, themes and headless output✓✓
触摸面板用 NumPad✓✓
带十种布局的屏幕键盘✓✓
用于设置的开关✓✓
适用于 IPv4 和 IPv6 的 IP 地址编辑框✓✓
用于时长的时间跨度编辑框✓✓
可预览每个字体系列的字体选择器✓✓
带全选和筛选框的复选列表框✓✓
带移动和排序按钮的双列表框✓✓
布局控件及保存为 JSON 的布局(Delphi 社区版中用代码创建)✓✓
Two thumb range slider−✓
HSV square and alpha bar of the colour picker−✓
Auto complete list of the token edit−✓
Data aware editors (Delphi and C++ Builder)−✓
WinForms DataSource、DataMember 和 DataField−✓
来自 TDataSet、类、DataTable 或对象的数据表单,含验证和智能粘贴−✓

支持的框架与平台

sgcEditors 中的组件

每款控件都提供 VCL、FireMonkey、WinForms、WPF 和 Avalonia 版本,属性和事件相同。

控件VCL 和 C++ BuilderFireMonkey.NET
月历TsgcVCLMonthCalendarTsgcFMXMonthCalendarTsgcWinFormsMonthCalendar
日期选择器TsgcVCLDatePickerTsgcFMXDatePickerTsgcWinFormsDatePicker
时间选择器TsgcVCLTimePickerTsgcFMXTimePickerTsgcWinFormsTimePicker
日期时间选择器TsgcVCLDateTimePickerTsgcFMXDateTimePickerTsgcWinFormsDateTimePicker
范围滑块TsgcVCLRangeSliderTsgcFMXRangeSliderTsgcWinFormsRangeSlider
颜色选择器TsgcVCLColorPickerTsgcFMXColorPickerTsgcWinFormsColorPicker
标记编辑框TsgcVCLTokenEditTsgcFMXTokenEditTsgcWinFormsTokenEdit
评分TsgcVCLRatingTsgcFMXRatingTsgcWinFormsRating
数值调节框TsgcVCLSpinEditTsgcFMXSpinEditTsgcWinFormsSpinEdit
按钮编辑框TsgcVCLButtonEditTsgcFMXButtonEditTsgcWinFormsButtonEdit
搜索编辑框TsgcVCLSearchEditTsgcFMXSearchEditTsgcWinFormsSearchEdit
掩码编辑框TsgcVCLMaskEditTsgcFMXMaskEditTsgcWinFormsMaskEdit
货币编辑框TsgcVCLCurrencyEditTsgcFMXCurrencyEditTsgcWinFormsCurrencyEdit
查找编辑框TsgcVCLLookupEditTsgcFMXLookupEditTsgcWinFormsLookupEdit
备注框TsgcVCLMemoTsgcFMXMemoTsgcWinFormsMemo
开关TsgcVCLToggleSwitchTsgcFMXToggleSwitchTsgcWinFormsToggleSwitch
IP 地址编辑框TsgcVCLIPAddressEditTsgcFMXIPAddressEditTsgcWinFormsIPAddressEdit
时间跨度编辑框TsgcVCLTimeSpanEditTsgcFMXTimeSpanEditTsgcWinFormsTimeSpanEdit
字体选择器TsgcVCLFontPickerTsgcFMXFontPickerTsgcWinFormsFontPicker
复选列表框TsgcVCLCheckListBoxTsgcFMXCheckListBoxTsgcWinFormsCheckListBox
双列表框TsgcVCLDualListBoxTsgcFMXDualListBoxTsgcWinFormsDualListBox
NumPadTsgcVCLNumPad, TsgcVCLNumPadPopupTsgcFMXNumPad, TsgcFMXNumPadPopupTsgcWinFormsNumPad, TsgcWinFormsNumPadPopup
屏幕键盘TsgcVCLKeyboard, TsgcVCLKeyboardPopupTsgcFMXKeyboard, TsgcFMXKeyboardPopupTsgcWinFormsKeyboard, TsgcWinFormsKeyboardPopup
布局控件TsgcVCLLayoutControlTsgcFMXLayoutControlTsgcWinFormsLayoutControl
数据表单TsgcVCLDataFormTsgcFMXDataFormTsgcWinFormsDataForm

.NET 列显示的是 WinForms 的名称,WPF 和 Avalonia 也有相同的控件,前缀分别为 TsgcWpf 和 TsgcAvalonia。非可视辅助类:TsgcEditorModel、TsgcEditorLocale 和 TsgcEditorFieldLink。十款数据感知编辑器(TsgcVCLDBDatePicker、TsgcVCLDBTimePicker、TsgcVCLDBSpinEdit、TsgcVCLDBRating、TsgcVCLDBRangeSlider、TsgcVCLDBButtonEdit、TsgcVCLDBMaskEdit、TsgcVCLDBCurrencyEdit、TsgcVCLDBMemo 和 TsgcVCLDBLookupEdit,以及对应的 FireMonkey 版本)仅限注册版,适用于 Delphi 和 C++ Builder;在 .NET 中,注册版的 WinForms 编辑器通过 DataSource、DataMember 和 DataField 绑定。布局控件包含在每个版本中,数据表单仅限注册版。验证器和验证汇总属于 sgcUICore:TsgcVCLValidator、TsgcFMXValidator、TsgcWinFormsValidator、TsgcWpfValidator 和 TsgcAvaloniaValidator。

目标组件平台
Delphi 7 至 13,VCLTsgcVCL 编辑器Win32,XE2 起支持 Win64
Delphi XE6 至 13,FireMonkeyTsgcFMX 编辑器Windows、macOS、iOS 和 Android
C++ Builder 2007 至 13TsgcVCL 和 TsgcFMX 编辑器生成的 .hpp 头文件和静态库
Delphi 10.2 至 13,框架无关模型、布局模型及其 JSON,无界面 PNG 与 SVG 输出Linux64(无 Linux 控件)
.NET Framework 4.7.2、.NET 8、9 和 10WinForms、WPF 和 Avalonia 编辑器Windows 桌面和 Avalonia 目标平台

常见问题解答

支持。每个文本字段都是平台的真实编辑控件,VCL 中是无边框 TEdit,FireMonkey 中是 FMX TEdit,因此日语、中文和韩语的输入法组合、剪贴板、撤销、上下文菜单和屏幕阅读器无需特殊代码即可工作。请参阅文本输入与输入法。

可以。MinDate 和 MaxDate 设置范围,DisabledDates 列出节假日,DisabledWeekDays 屏蔽周末,OnIsDateDisabled 决定任何其他规则。禁用的日期以删除线绘制,键盘会跳过它们,在选择器中键入时也会被拒绝。Calendar 演示屏蔽了周末和两个节假日,以展示规则的实际效果。

在 Delphi 和 C++ Builder 中有十款:日期选择器、时间选择器、数值调节框、评分、范围滑块、按钮编辑框、掩码编辑框、货币编辑框、备注框和查找编辑框,每款都有 VCL 和 FireMonkey 版本。它们需要注册版或试用版。在 .NET 中,注册版的 WinForms 编辑器通过 DataSource、DataMember 和 DataField 绑定字段,在两个版本中,控件都使用 WinForms、WPF 和 Avalonia 的数据绑定,查找编辑框从 ItemsSource 获取其行。

全部十五款控件和验证框架都包含在内。社区版不含颜色选择器的 HSV 方块和透明度条、标记编辑框的自动补全列表、范围滑块的第二个滑块,以及 WinForms 编辑器的 DataSource、DataMember 和 DataField 成员。Delphi 数据感知编辑器仅限注册版。请参阅版本。

可以。把 sgcUICore 的验证器放到窗体上,设置其 Container 并添加规则:必填、范围、长度、正则表达式、电子邮件、比较和自定义。它会检查 sgcEditors 控件以及标准的编辑框、备注框、组合框、复选框和选择器,显示边框、图标和可选的汇总,屏幕阅读器会读出消息。保存前调用 Validate。每个版本都包含,适用于 VCL、FireMonkey、WinForms、WPF 和 Avalonia。请参阅验证。

可以。每个控件都保留自己的 FormatSettings 副本,因此日名和月名、格式、分隔符以及每周的第一天可以因控件而异。Calendar 演示可在运行时在英语、德语、西班牙语、法语和意大利语之间切换,除非您另行选择,否则周数遵循 ISO 8601。

对于日期和时间,可以:TsgcVCLDatePicker、TsgcVCLTimePicker 和 TsgcVCLDateTimePicker 是带下拉日历或时间列表的键入式编辑框。此外,它们还能宽松地解析月份名称,遵守限制和禁用日期,遵循 sgcUI 主题,并按每台显示器的 DPI 绘制。

可以。C++ Builder 2007 以及 2010 至 13 通过生成的头文件和库使用相同的 VCL 和 FireMonkey 控件,每个 Delphi 演示(包括 DataAware)也都提供 C++ Builder 工程。本页的代码标签页展示了 Delphi、C++ Builder 和 C# 中的同一个窗体,每个示例在发布前都已编译通过。

sgcEditors 帮助

3,000+开发者
20+年
761+组件
30+API 集成
5平台
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

立即试用 sgcEditors

sgcUI 试用版包含 sgcEditors 和其他所有 sgcUI 产品。