【问题标题】:How to set DBCombobox fields with a red border to show to user as a mandatory field?如何设置带有红色边框的 DBCombobox 字段以向用户显示为必填字段?
【发布时间】:2017-09-27 11:04:02
【问题描述】:

与已发布的问题类似 How to set required Edit fields with a red border?Bummi 先生回答

我想知道,是否可以对 DBCombobox 使用相同的实现?

【问题讨论】:

  • 是的,接受的答案。它实际上并不取决于周围有红色框的组件的类型。
  • 但有人提到它在用于 DBcombobox 时会抛出一个错误,提示“无法识别的字段必填”
  • “但有人提到它会抛出一个错误,说...” - 你为什么不自己尝试呢?
  • @kobik:我尝试过使用相同的代码,但我也遇到了同样的错误
  • 您可能没有正确使用代码。由于它使用插入器类,因此单元(如果您使用一个)必须是使用子句中的最后一个(after VCL.DBCtrls)。或者从TDBCombobox 派生一个新的后代类并使用它。

标签: delphi delphi-xe8


【解决方案1】:

您可以使用以下内容(已在 Delphi 10 Seattle 上验证)。

  TDBCombobox = Class(VCL.DBCtrls.TDBCombobox)
  private
    FBordercolor: TColor;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure SetBorderColor(AColor: TColor);
  published
    property BorderColor: TColor read FBorderColor write SetBorderColor default clBlack;
  end;


    ....
    
Implementation

procedure TDBCombobox.WMPaint(var Message: TWMPaint);
begin
  inherited;
  Self.Canvas.Pen.Color := FBorderColor;
  Self.Canvas.Pen.Width := 1;
  Self.Canvas.Polyline([Point(0, 0), Point(Width-1, 0), Point(Width - 1, Height - 1),
                        Point(0, Height - 1),Point(0, 0)]);
end;

procedure TDBCombobox.SetBorderColor(AColor: TColor);
begin
  FBorderColor := AColor;
  invalidate;
end;

这与您链接的帖子的想法相同,您使用 hack 向标准组件添加功能。

如果值得,那么你应该像@kobik 所说的那样创建一个后代。

如果标准组件需要新功能,那么它就不再是标准了。

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 2014-11-17
    • 2014-10-21
    • 2019-05-16
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多