線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2808
推到 Plurk!
推到 Facebook!

請問要如何限制"InputBox"輸入資料類型??

尚未結案
hango
一般會員


發表:5
回覆:10
積分:3
註冊:2004-04-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-17 07:16:43 IP:140.127.xxx.xxx 未訂閱
我想把InputBox中輸入資料類型限制為數字!! 請問各位大大有辦法辦到嗎??
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-17 10:50:24 IP:218.170.xxx.xxx 未訂閱
可以使用TryStrToInt()來檢查傳入的字串是否為數值!
AnsiString Num = "123456";
int Value;
if (!TryStrToInt(Num,Value))
{
    ShowMessage("錯誤!非數值");
}
else
{
    ShowMessage("數值:"   IntToStr(Value));
}
hjj1103
一般會員


發表:3
回覆:26
積分:5
註冊:2002-11-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-17 12:23:26 IP:61.60.xxx.xxx 未訂閱
對不起,請問一下,InputBox元件在哪裡?
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-15 17:02:46 IP:61.66.xxx.xxx 未訂閱
直接輸入InputBox就可以了(和ShowMessage一樣)
macrojackson
一般會員


發表:1
回覆:2
積分:0
註冊:2004-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-15 17:12:37 IP:218.14.xxx.xxx 未訂閱
在BCB中是沒有InputBox元件的,可以使用以下方法: AnsiString InputStr; InputStr=InputBox("輸入框","請輸入數據","默認值");     ShowMessage(InputStr); 但是,好像InputBox是不能取消的,就是説按取消鍵和按確定鍵是一樣的,不明白< >< >
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-15 18:05:57 IP:221.169.xxx.xxx 未訂閱
hango:
InputBox 可以做到應用面看你自己處理,
原Vcl\Source\dialogs.pas 不要動,也不要改
將dialogs.pas copy回你BCB專案檔案下
開啟你的BCB專案目錄下dialogs.pas
找到function InputQuery裡的注意紅字部分是你要加入或修改的部分!
function InputQuery(const ACaption, APrompt: string;
  var Value: string): Boolean;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  fstyle: dWord;  //
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  Result := False;
  Form := TForm.Create(Application);
  with Form do
    try
      Canvas.Font := Font;
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      ClientHeight := MulDiv(63, DialogUnits.Y, 8);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      with Prompt do
      begin
        Parent := Form;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(8, DialogUnits.Y, 8);
        Width := 160; // 保證中文顯示沒問題
        AutoSize := False;
        Caption := APrompt;
      end;
      Edit := TEdit.Create(Form);
      with Edit do
      begin
        Parent := Form;
        Left := Prompt.Left;
        Top := MulDiv(19, DialogUnits.Y, 8);
        Width := MulDiv(164, DialogUnits.X, 4);
        MaxLength := 255;
//        PasswordChar:='*'; // 密碼方式輸入
        Text := Value;
        SelectAll;
      end;
      fstyle := GetWindowLong(Edit.Handle, GWL_STYLE);   //
      SetWindowLong(Edit.Handle, GWL_STYLE, fstyle or ES_NUMBER);  //
      ButtonTop := MulDiv(41, DialogUnits.Y, 8);
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := '確定'; // SMsgDlgOK; // 改成中文
        ModalResult := mrOk;
        Default := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := '取消'; SMsgDlgCancel; // 改成中文
        ModalResult := mrCancel;
        Cancel := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      if ShowModal = mrOk then
      begin
        Value := Edit.Text;
        Result := True;
      end;
    finally
      Form.Free;
    end;
end;
這是以用API實現數值型Edit!
只要你的這隻同目錄下的dialogs.pas 加入你的project即可
記著你的專案檔案只要
project-> add BCB專案目錄下dialogs.pas
程式裡不要Include dialogs.pas
請參考!
Andy Chang 發表人 - andychang1690 於 2004/09/15 18:11:12
------
Andy Chang
系統時間:2024-05-19 2:36:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!