国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

D7下的只能輸入數(shù)字的控件(類(lèi)似PB的MaskEdit)

2019-11-18 18:21:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我發(fā)現(xiàn)Delphi下沒(méi)有很好用的只能輸入數(shù)字的控件。所以自己寫(xiě)了一個(gè)(D7)。

菜鳥(niǎo)一個(gè),希望大家多多指點(diǎn)。呵呵。。。

unit ComerMaskEdit;

interface

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

type
  TComerMaskEdit = class(TEdit)
  PRivate
    FMdNumber: string;
    Fipo : Integer;
    FLen : Integer;
    procedure SetMdNumber(const Value: string);
    procedure WMPaste(var Message: TMessage); message WM_PASTE;
    { Private declarations }
  protected
    procedure CreateWnd;override;
    { Protected declarations }
  public
    constructor Create(AOwner:TComponent);override;
    procedure DoEnter(); override;
    procedure DoExit(); override;
    procedure KeyPress(var Key: Char); override;
    procedure KeyDown (var Key: Word; Shift: TShiftState);override;
    { Public declarations }
  published
    property MdNumber:string read FMdNumber write SetMdNumber;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TComerMaskEdit]);
end;

{TComerMaskEdit}

constructor TComerMaskEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
    Font.Size :=12;
    Font.Name:='宋體';
    Font.Charset:=GB2312_CHARSET;
    FMdNumber := '';
end;

procedure TComerMaskEdit.CreateWnd;
var
  I, k : Integer;
  S, Str : string;
begin
  inherited;
    if not Enabled then
        Font.Color := clNavy;
    Font.Size :=12;
    Font.Name :='宋體';
    Font.Charset :=GB2312_CHARSET;
    if FMdNumber <> '' then
    begin
        I := Pos(',',FMdNumber);
        if I > 0 then
        begin
            S := Copy(FMdNumber,1,I-1);
            FIpo := StrToInt(Copy(FMdNumber,I+1,Length(FMdNumber)-I));
            for k:=1 to FIpo do
                Str := Str + '0';
            Text := '.' + Str;
        end
        else
        begin
            S := FMdNumber;
            FIpo := 0;
            Text := '';
        end;
        MaxLength := StrToInt(S);
        FLen := MaxLength;
        imeMode := imClose;
    end;
end;

procedure TComerMaskEdit.SetMdNumber(const Value: string);
var
  S : string;
begin
    if Value <> '' then
    begin
        S := StringReplace(Value,',','',[rfIgnoreCase]);
        try
            StrToInt(S);
        except
            application.MessageBox('屬性值設(shè)置不對(duì)!','錯(cuò)誤',MB_OK+MB_ICONError);
            FMdNumber := '';
            Exit;
        end;
    end;
    FMdNumber := Value;
end;

procedure TComerMaskEdit.DoEnter();
begin
    inherited;
    SelStart := 0;
end;

procedure TComerMaskEdit.DoExit();
begin
    if (FIpo>0) and (Pos('.',Text)=0) then
        Text := Text + '.' + StringOfChar('0',FIpo)
    else
        inherited;
end;

procedure TComerMaskEdit.KeyPress(var Key: Char);
var
    I, k : Integer;
    AfterDot, BeforSelStart : string;
    //, AfterSelStart,
    Str : string;
    TmpText : string;
    iSelStart: Integer;
    //BeforComma, AfterComma : String;
begin
    //如果有多個(gè)字符被選中
    if SelLength > 0 then
        SelStart := 0
    else
    begin
        if FMdNumber <> '' then
        begin
            if (Length(Text)=0) and (FIpo>0) then
            begin
                for k:=1 to FIpo do
                    Str := Str + '0';
                Text := '.' + Str;
            end;
            case Key of
                #13:
                    inherited;
                '-':
                begin
                    if (SelStart<>0) or (Pos('-',Text)>0) then
                        Key := #0
                    else
                        //MaxLength := MaxLength + 1;
                        inherited;
                end;
                #8:
                begin
                    I := Pos('.',Text);
                    if (I > 0) and (SelStart>I) then
                    begin
                        key := #0;
                        iSelStart := SelStart;
                        TmpText := Text;
                        BeforSelStart := Copy(TmpText,1,iSelStart-1);
                        Text := BeforSelStart + Copy(TmpText,iSelStart+1,Length(TmpText)-iSelStart) + '0';
                        SelStart := iSelStart - 1;
                    end
                    else if (I > 0) and (SelStart=I) then
                    begin
                        key := #0;
                        iSelStart := SelStart;
                        SelStart := iSelStart - 1;
                    end
                    else
                        inherited;
                end;
                '0'..'9':
                begin
                    I := Pos('.',Text);
                    //限制位數(shù)
                    if I > 0 then
                    begin
                        if SelStart = Length(Text) then
                            key := #0
                        else
                        begin
                            AfterDot := Copy(Text,I+1,Length(Text)-FIpo);
                            if Length(AfterDot) > FIpo then
                                key := #0
                            else if SelStart >= I then
                            begin
                                iSelStart := SelStart;
                                TmpText := Text;
                                BeforSelStart := Copy(TmpText,1,iSelStart);
                                Text := BeforSelStart + Copy(TmpText,iSelStart+2,Length(TmpText)-iSelStart-1);
                                SelStart := iSelStart;
                            end
                            else
                                inherited;
                        end;
                    end
                    else if (I<=0) and (FIpo>0) then  //這種情況基本不存在
                    begin
                        if Length(Text) >= FLen-FIpo-1 then
                            key := #0
                        else
                            inherited;
                    end
                    else  //FIpo=0
                        inherited;
                end;
                '.':
                begin
                    Key := #0;
                    if FIpo>0 then
                        SelStart := Pos('.',Text);
                end;
                else
                    Key := #0;
            end;
        end
        else
            //Key := #0;
            inherited;
    end;
end;

procedure TComerMaskEdit.KeyDown(var Key: Word; Shift: TShiftState);
var
    I : Integer;
    BeforSelStart : string;
    TmpText : string;
    iSelStart: Integer;
begin
    //如果有多個(gè)字符被選中
    if SelLength > 0 then
    begin
        Key := 0;
        SelStart := 0;
    end
    else
    begin
        if FMdNumber <> '' then
        begin
            if Key=VK_DELETE then
            begin
                I := Pos('.',Text);
                if (I > 0) and (SelStart>=I) then
                begin
                    key := 0;
                    iSelStart := SelStart;
                    TmpText := Text;
                    BeforSelStart := Copy(TmpText,1,iSelStart);
                    if (SelStart=Length(Text)) then
                        Text := BeforSelStart + Copy(TmpText,iSelStart+2,Length(TmpText)-iSelStart-1)
                    else
                        Text := BeforSelStart + Copy(TmpText,iSelStart+2,Length(TmpText)-iSelStart-1) + '0';
                    SelStart := iSelStart;
                end
                else if (I > 0) and (SelStart=I-1) then
                begin
                    key := 0;
                    iSelStart := SelStart;
                    SelStart := iSelStart + 1;
                end;
            end
            else if (Key=VK_TAB) or (Key=VK_LEFT) or (Key=VK_UP) or (Key=VK_RIGHT) or (Key=VK_DOWN) or (Key=VK_END) or (Key=VK_HOME) then
                inherited
            else
                Key := 0;

        end
        else
            inherited;
    end;
end;

procedure TComerMaskEdit.WMPaste(var Message: TMessage);
begin
    if FMdNumber='' then
        inherited;
end;

end.

 


上一篇:自動(dòng)化每日構(gòu)建(二)用Ant來(lái)完成java工程的每日構(gòu)建

下一篇:數(shù)據(jù)完整性(數(shù)據(jù)的似真性而非正確或者錯(cuò)誤)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門(mén)圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 河曲县| 辽宁省| 云南省| 柳江县| 石林| 乐都县| 罗山县| 铁岭县| 山西省| 宜君县| 衢州市| 敖汉旗| 琼结县| 资中县| 来宾市| 博野县| 桐城市| 嘉祥县| 宣恩县| 油尖旺区| 建宁县| 安顺市| 林芝县| 宁强县| 海南省| 海城市| 工布江达县| 鄱阳县| 深州市| 虞城县| 阿城市| 黄大仙区| 开封县| 余庆县| 高雄市| 庆元县| 潍坊市| 通辽市| 皋兰县| 巴彦县| 东莞市|