想用edit做个日期框,中间那一横怎么搞?
比如点击某edit,则会出现"    -  " 这样可以输入2008-03这个样子.也就是中间那一横是一直都有的.前面四个空格,后面2个空格.中间的这一横永远不能删除掉.比如我输入2008,则光标会自动跳过中间的一横,这样就直接输入月份.
这个怎么作?不要用maskedit的.

解决方案 »

  1.   

    麻烦了点,你可以试一下
    在KeyPress事件中写判断,
    简单的方法是,当输入了4个字符后
    自动给加上-,例如输入2008
    当输入8后,在代码中自动给加上-变
    成了2008-
    在月的时候,只要输入3或以上就变成了
    2008-03-
    日期也一样
      

  2.   

    procedure TBillForm.edCashDateKeyPress(Sender: TObject; var Key: Char);
    begin
      case key of
        #48..#57:
          try
            if length(edCashDate.text) = 3 then
            begin
              if (StrToInt(edCashDate.Text + key) < 1995) or (StrToInt(edCashDate.Text + key) > 2050) then
              begin
                Abort;
              end
              else
                PostMessage((sender as Tedit).handle, wm_char, ord('-'), 0);
            end
            else if length(edCashDate.text) = 5 then
            begin
              if key >= '2' then
              begin
                edCashDate.Text := edCashDate.Text + '0';
                edCashDate.selstart := length(edCashDate.Text);
                PostMessage((sender as Tedit).handle, wm_char, ord('-'), 0);
              end;
            end
            else if length(edCashDate.text) = 6 then
            begin
              if copy((edCashDate.Text + key), 6, 2) > '12' then
              begin
                Abort;
              end
              else
                PostMessage((sender as Tedit).handle, wm_char, ord('-'), 0);
            end
            else if length(edCashDate.text) = 8 then
            begin
              if key > '3' then
              begin
                edCashDate.Text := edCashDate.Text + '0';
                edCashDate.selstart := length(edCashDate.Text);
              end
            end
            else if length(edCashDate.text) = 9 then
            begin
              if copy((edCashDate.Text + key), 9, 2) > '31' then
              begin
                Abort;
              end
            end
          except
            ErrorShow('请输入正确的日期');
          end;
        #13:
          begin
            try
              if (strtoDate(Trim(edCashDate.Text))>strtoDate('2000-01-01')) then
              begin
                CashNo := Trim(edCashNo.Text);
                BuyDate := strtoDate(Trim(edCashDate.Text));
                ModalResult := mrOK;
                if POSClass.WinType then
                  close;
              end
              else
                ErrorShow('请输入正确日期.');
            except
              ErrorShow('请输入正确日期.');
            end;
          end;
        #27:
          begin
            modalResult := mrCancel;
            close;
          end;
      end;
    end;
      

  3.   

    自己继承一个TcustomEdit修改一下就可以了
      

  4.   

    chenzhuo 方法对一般处理可以,但是不能达到日期的效果吧.