该控件是在procedure Change(); override; 事件里写的控制颜色代码。 把控件装上delphi后,在实际应用中却遇到这个问题

解决方案 »

  1.   

    干吗非得自己做控件呢,直接在DBEdit的OnChange事件中写点代码不就行了么:
    procedure TForm1.DBEdit1Change(Sender: TObject);
    begin
      if (DBEdit1.Field.AsFloat>100) then 
        DBEdit1.Font.Color := clRed
      else if (DBEdit1.Field.AsFloat>200) then
        DBEdti1.Font.Color := clBlue
      else if ...
    end;
      

  2.   

    我试了一下,应该可以啊,代码如下。有可能是数据源的问题吧
    procedure TForm1.DBEdit1Change(Sender: TObject);
    begin
      if Length(DBEdit1.Text) > 5 then DBEdit1.Font.Color := clRed
      else DBEdit1.Font.Color := clBlue
    end;
      

  3.   

    不是,用DBEdit1当然可以, 是用我自己做的控件时不行
      

  4.   

    或者说,简单一点。 要做一个继承TDBEdit的控件, 提供两个属性Maxvalues,Minvalues
    让用户输入数值, 当控件的text值变化时,和Maxvalues,Minvalues比较,并用不同的颜色表示, 当然,还要象TDBEdit一样能保存数据!
      

  5.   

    gz,你的控件我能试一下吗?[email protected]
      

  6.   

    to zenartus(投入者) 昨天已经发到你邮箱了, 忘了在这告诉你,不知道你看了没,还请指点指点。 谢谢!下面把控件的源代码贴出来,请各位大虾们指点一下!! 谢谢!! 急急急急!!!!!原来在控件中的输入数据的范围定义是从某个表中取得, 一切都可以,当光标离开该控件时,数据却没了
    控件的源程序如下:unit WarnDBEdit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ADODB,
      StdCtrls, Mask, DBCtrls;type
      TWarnDBEdit = class(TDBEdit)
      private
        { Private declarations }
        FMYTableName: string;
        FMYDataset: TADODataset;  //数据集
        FMYConnection: TADOConnection;
      protected
        { Protected declarations }
        constructor create(AOwer: TComponent);override;
        procedure Change(); override;
      public
        { Public declarations }
      published
        { Published declarations }
    //TableName是指与其datasource指向的表是同一个表
        property TableName: string read FMYTableName write FMYTableName; 
        property Connection: TADOConnection read FMYConnection write FMYConnection;  end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TWarnDBEdit]);
    end;constructor TWarnDBEdit.create(AOwer: TComponent);
    begin
       inherited;
    end;procedure TWarnDBEdit.Change();
    var
       strsql:string;
       values:real;
    begin
      self.Font.Color:=clWindowText;if trim(self.TableName)<>'' then
       begin
       strsql:='select max,min from syxm where upper(tablename)='''+UpperCase(self.TableName)+''''+
               ' and upper(fieldname)='''+uppercase(self.datafield)+'''';
       FMYDataset:=TADODataset.Create(self);
       FMYDataset.Connection:=FMYConnection;
       FMYDataset.LockType:=ltReadOnly;//将数据集设为只读
       FMYDataset.CommandText:=strsql;
       FMYDataset.Open;
       if self.text='' then
          values:=0
       else
          values:=strtofloat(self.text);
       if values > FMYDataset.fieldbyname('max').AsFloat then
          self.Font.Color:=  clRed;   if values = FMYDataset.fieldbyname('max').AsFloat then
          self.Font.Color:=  clMaroon;   if values < FMYDataset.fieldbyname('min').AsFloat then
          self.Font.Color:=  clBlue;   if values = FMYDataset.fieldbyname('min').AsFloat then
          self.Font.Color:=  clNavy;
       FMYDataset.Close;
       FMYDataset.Free;
       end;
    end;end.
    发现那个问题后,后来为了测试方便,就改成在控件里提供两个属性Maxvalues,Minvalues
    让用户输入数值, 当控件的text值变化时,和Maxvalues,Minvalues比较,并用不同的颜色表示,但做出来后控件却放不上Form,提示该控件 is not a valid floating point values,unit WarnDBEdit2;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ADODB,
      StdCtrls, Mask, DBCtrls;type
      TWarnDBE = class(TDBEdit)
      private
        { Private declarations }
        FMYMax:real;
        FMYMin:real;
      protected
        { Protected declarations }
        constructor create(AOwer: TComponent);override;
        procedure Change(); override;
      public
        { Public declarations }
      published
        { Published declarations }
        property MaxValues: real read FMYMax write FMYMax ;
        property MinValues: real read FMYMin write FMYMin ;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TWarnDBE]);
    end;constructor TWarnDBE.create(AOwer: TComponent);
    begin
       inherited;
    end;procedure TWarnDBE.Change();
    var
       values,max,min:real;
    begin
      self.Font.Color:=clWindowText;   if self.text='' then
          values:=0
       else
          values:=strtofloat(self.text);   max:=self.MaxValues;
       min:=self.MinValues;   if values > Max then
          self.Font.Color:=  clRed;   if values = Max then
          self.Font.Color:=  clMaroon;   if values < Min then
          self.Font.Color:=  clBlue;   if values = Min then
          self.Font.Color:=  clNavy;
    end;
    end.
      

  7.   

    程序修如下:可以放上Form, 颜色也变对, 但是还是那个问题, 光标一离开数据就还原,刚输入的数据掉了,!!!  那位大虾能帮忙解决?! 只能给这么多分了, 要的话我可以在开一个贴子给分的!!unit WarnDBEdit2;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ADODB,
      StdCtrls, Mask, DBCtrls;type
      TWarnDBE = class(TDBEdit)
      private
        { Private declarations }
        FMYMax:real;
        FMYMin:real;
      protected
        { Protected declarations }
        constructor create(AOwer: TComponent);override;
        procedure Change(); override;
      public
        { Public declarations }
      published
        { Published declarations }
        property MaxValues: real read FMYMax write FMYMax ;
        property MinValues: real read FMYMin write FMYMin ;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TWarnDBE]);
    end;constructor TWarnDBE.create(AOwer: TComponent);
    begin
       inherited;
    end;procedure TWarnDBE.Change();
    var
       values,max,min:real;
    begin
      self.Font.Color:=clWindowText;
      try
        if self.text='' then
           values:=0
        else
           values:=strtofloat(self.text);    max:=self.MaxValues;
        min:=self.MinValues;    if values > Max then
           self.Font.Color:=  clRed;    if values = Max then
           self.Font.Color:=  clMaroon;    if values < Min then
           self.Font.Color:=  clBlue;    if values = Min then
           self.Font.Color:=  clNavy;
       except
       end;
    end;end.