小弟在编写edit控件,想用timer控件控制edit输入错误时edit窗体颜色变化,但不知在控件中如何编写timer的触发事件,请各位大虾赐教,谢谢。

解决方案 »

  1.   

    >>小弟在编写edit控件,想用timer控件控制edit输入错误时edit窗体颜色变化
    應該在 edit 的onchange or onExit 事件中判斷!!你的思路應該不對
      

  2.   

    错误判断已经完成,我是想在控件中加入一个时钟控件,作用是控制颜色闪烁用来对用户提示,加入体timer是没问题,问题是如何在控件中编写ontimer触发事件
      

  3.   

    错误判断已经完成,我是想在控件中加入一个时钟控件,作用是控制颜色闪烁用来对用户提示,加入体timer是没问题,问题是如何在控件中编写ontimer触发事件
      

  4.   

    你声明的
    timer.ontime := 你定义的事件
      

  5.   

    http://community.csdn.net/Expert/topic/3140/3140493.xml?temp=.8310663
      

  6.   

    aiirii(ari-爱的眼睛) 请你说的详细点
      

  7.   

    代码如下:
    unit qry_edit;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Dialogs,ADODB,db,Graphics,QExtCtrls;
       
    type field_type=(tAll,tInt,tFloat);
    type
      TChangeEvent = procedure(Sender: TObject; Value: integer) of object;
    type
      Tqry_edit = class(TEdit)  private
        Fdata_field_type:field_type;
        Fdata_field: string;
        Fdata_field_empty: Boolean;
        Fdata_field_PRIMARY: Boolean;
        Fdata_qry: TADOQuery;
        FTimerEvent: TNotifyEvent;
        tmr1:TTimer;
       public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        procedure KeyPress(var Key: Char); override;
        procedure KeyDown(var Key: Word; Shift: TShiftState); override;
        { Private declarations }
      protected
        { Public declarations }
      published
        //procedure
        procedure getvalue;
        procedure setvalue;
        property data_field: string read Fdata_field write Fdata_field;
        property data_field_empty: Boolean read Fdata_field_empty write
                Fdata_field_empty;
        property data_field_PRIMARY: Boolean read Fdata_field_PRIMARY write
                Fdata_field_PRIMARY;
        property data_field_type:field_type read Fdata_field_type write
                Fdata_field_type default Tall;
        property data_qry: TADOQuery read Fdata_qry write Fdata_qry;
        property OnTimer: TNotifyEvent read FTimerEvent write FTimerEvent; { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('MYPRO', [Tqry_edit]);
    end;{ Tqry_edit }constructor Tqry_edit.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
     // tmr1:=TTimer.Create(aowner);
     // tmr1.Interval:=1000;
     // tmr1.Enabled:=False;
    end;destructor Tqry_edit.Destroy;
    begin
      inherited;
      tmr1.Destroy;
    end;procedure Tqry_edit.getvalue;
    begin
      Text:=Fdata_qry.FieldValues[Fdata_field];
    end;procedure Tqry_edit.KeyDown(var Key: Word; Shift: TShiftState);
    begin
      if Key = VK_DELETE then
        if Self.SelStart=pos('.',Self.Text)-1 then
          Key := 0;
      inherited KeyDown(Key,Shift);end;procedure Tqry_edit.KeyPress(var Key: Char);
    var
      kv: Integer;
    begin
      kv := Ord(Key);
      case Fdata_field_type of
        tInt:
          if (((kv>58) or (kv<48)) and (kv<>3) and (kv<>22) and (kv<>8) and (kv<>13)) then
             Key := chr(0);
        tFloat:
          begin
            if (((kv>58) or (kv<48)) and (kv<>3) and (kv<>22) and (kv<>46) and (kv<>8) and (kv<>13)) then
               Key := chr(0)
           else
             begin
              if (kv=46) and (Pos('.',self.Text)>0) then//已有小数点
                Key := chr(0)
             end;   
          end;
      end;  inherited KeyPress(Key);
    end;procedure Tqry_edit.setvalue;
    var
    i,state:integer;
    bj:Boolean;
    begin
      case fdata_qry.State of
       dsInsert:state:=1;
       dsEdit:state:=2;
       end;
       bj:=true;
       if Fdata_qry.State in [dsinsert,dsEdit] then
         begin
          if (text='') and (Fdata_field_empty) then
           begin
            showmessage('请添入数据');
            SetFocus;
            Color:=clRed;
            Fdata_qry.Cancel;
            bj:=False;
            exit;
          end else
           if Fdata_field_PRIMARY then
             begin
               Fdata_qry.First;
                while not Fdata_qry.Eof do
                  begin
                   if Text=Fdata_qry.FieldValues[Fdata_field] then
                     begin
                       showmessage('此数据不能重复输入!');
                       SetFocus;
                       Color:=clInfoBk;
                       Fdata_qry.Cancel;
                       bj:=False;
                       exit;
                     end;
                      Fdata_qry.Next;
                  end;
              end;
         if bj then
           begin
            if (Fdata_qry.State<>dsinsert) and (Fdata_qry.State<>dsinsert)then
              begin
                case state of
                 1:Fdata_qry.Insert;
                 2:Fdata_qry.Edit;
                 end;
              end;
              Fdata_qry.FieldValues[Fdata_field]:=Text;
              Color:=clWindow;
           end;
       end;
    end;end.
      

  8.   

    procedure test;
    begin
       //在这里进行你的操作
       ......
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        timer.ontimer :=test;
    end;
      

  9.   

    //自定义定时器事件
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TmyTimer = class
      private
        { Private declarations }
        procedure mTimer(Sender: TObject);
      public
        { Public declarations }
    end; type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TmyTimer.mTimer(Sender: TObject);
    begin
       form1.Label1.Caption :=datetimetostr(now);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var tm:TmyTimer;
    begin
       tm:=TmyTimer.Create ;
       Timer1.OnTimer :=tm.mTimer;//设置事件处理
       tm.Free ;
    end;end.
      

  10.   

    在这里先谢谢各位大虾给小弟这么多的提示,如何在控件中自动触发ontime事件让其循环,小弟还是不清楚