如何设置带有红色边框的 DBCombobox 字段以作为必填字段显示给用户?
How to set DBCombobox fields with a red border to show to user as a mandatory field?
与已发布的问题类似
How to set required Edit fields with a red border? 由 Bummi 先生回答
我想知道,是否可以对 DBCombobox 使用相同的实现?
您可以使用以下内容(已在 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;
这与您链接的 post 的想法相同,您使用 hack 向标准组件添加功能。
如果值得,那么你应该像@kobik 说的那样创建一个后代。
如果标准组件需要新功能,那么它就不再是标准了。
与已发布的问题类似 How to set required Edit fields with a red border? 由 Bummi 先生回答
我想知道,是否可以对 DBCombobox 使用相同的实现?
您可以使用以下内容(已在 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;
这与您链接的 post 的想法相同,您使用 hack 向标准组件添加功能。
如果值得,那么你应该像@kobik 说的那样创建一个后代。
如果标准组件需要新功能,那么它就不再是标准了。