Delphi 如何设置红色边框的必需编辑字段?

Delphi 如何设置红色边框的必需编辑字段?,delphi,Delphi,我需要一些字段。当他们没有被填写时,他们将是红色的,需要填写。 在这篇文章完成之前 以下是我想要实现的目标的屏幕截图: 我想添加一个t形状,它可以在编辑框周围画一条红线。如果希望红色边框替换普通TEdit边框,可以修改编辑控件的属性,使其没有边框 如果要取消填充形状,请将画笔样式更改为“清除”,如果需要,可以挂起WM_Paint消息并在ControlCanvas上绘制一个矩形。其中一种方法如下所示: unit Edit_WithFrame_If_Needed_But_Empty; interf

我需要一些字段。当他们没有被填写时,他们将是红色的,需要填写。 在这篇文章完成之前

以下是我想要实现的目标的屏幕截图:


我想添加一个
t形状
,它可以在编辑框周围画一条红线。如果希望红色边框替换普通TEdit边框,可以修改编辑控件的属性,使其没有边框


如果要取消填充形状,请将画笔样式更改为“清除”

,如果需要,可以挂起WM_Paint消息并在ControlCanvas上绘制一个矩形。其中一种方法如下所示:

unit Edit_WithFrame_If_Needed_But_Empty;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TEdit = Class(StdCtrls.TEdit)
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
    procedure WMKEYUP(var Message: TWMPaint); message WM_KEYUP;
  private
    FPaintedRed: Boolean;
    FRequired: Boolean;
    procedure CheckForInvalidate;
  published
  public
    Property Required: Boolean read FRequired Write FRequired;
  End;

  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TEdit }
procedure TEdit.CheckForInvalidate;
begin
  if Required and (Length(Trim(Text)) = 0) then
  begin
    if not FPaintedRed then
      Invalidate;
  end
  else if FPaintedRed then
    Invalidate;
end;

procedure TEdit.CMTextChanged(var Message: TMessage);
begin
  inherited;
  CheckForInvalidate;
end;

procedure TEdit.WMKEYUP(var Message: TWMPaint);
begin
  CheckForInvalidate;
end;

procedure TEdit.WMPaint(var Message: TWMPaint);
var
  CC: TControlCanvas;
begin
  inherited;
  if Required and (Length(Trim(Text)) = 0) then
  begin
    FPaintedRed := true;
    CC := TControlCanvas.Create;
    try
      CC.Control := Self;
      CC.Pen.Color := clRed;
      CC.Pen.Width := 3;
      CC.Rectangle(ClientRect);
    finally
      CC.Free;
    end;
  end
  else
    FPaintedRed := false;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Edit1.Required := true;
  Edit3.Required := true;
end;

end.

谢谢分享这个故事。你的问题是什么?问题是如何标记这些字段是必需的。你可以根据需要标记它们。您建议使用彩色边框,这很好。其他程序在字段旁边放一个星号。其他人则以某种方式突出了标签。其他控件使控件具有不同的颜色。做你想做的。好的,谢谢,但是你能告诉我如何在德尔福做到这一点吗。我已经知道如何在其他程序中实现这一点,但delphi对我来说是新手,我只需编写
Edit1.Color:=clRed
是否可以用形状绘制未填充的矩形?我的意思是,我认为可以用形状绘制填充矩形。@Erik是的,使用
Pen
属性,设置
Brush.Style=bsClear
。但这在这里是不必要的:形状是一个TGraphic控件,它始终位于编辑控件之后,因此不显示内部@bummi:你能告诉我如何使用DBEdit吗?@kirankumar只需声明TDBEdit=Class(VCL.DBCtrls.TDBEdit)而不是TEdit=Class(StdCtrls.TEdit),实现时也是如此,例如过程TDBEdit.WMPaint(var消息:TWMPaint),代码保持不变。谢谢,它使用DBEdit工作。但是如果我使用与TDBCombobox=Class(VCL.DBCtrls.TDBCombobox)相同的逻辑,它会抛出一个错误,表示无法识别的字段“Required”。