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

stringgrid栏位输入money型数据

答題得分者是:gyl
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-22 16:46:57 IP:219.140.xxx.xxx 未訂閱
stringgrid1.cells[2,i]中 1.如何实现USER在stringgrid1.cells[2,i]输入字母或非money型时 将其强制转换为0显示?不知在StringGrid1MouseDown中如何写 2.在stringgrid1.cells[2,i]输入的数据 如何隔三位就加上逗号分割? 3.小数点后如何保留小数点后两位和 小数点后第两位 根据USER在小数点后输入的第三位四舍五入? 对于四舍五入 不知道是不是与 Trunc(stringgrid1.cells[2,i] * 100 0.5) / 100; 有关 但具体应如何写呢? 看到有朋友这样写 double d = 1234567.01; DecimalFormat df = new DecimalFormat("#,###,###.##"); String str1 = df.format(d); System.out.println(str1); 但不知这如何和stringgrid[2,i]的输入确认结合起来 谢谢大家
gyl
一般會員


發表:0
回覆:15
積分:13
註冊:2005-01-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-22 21:25:13 IP:211.76.xxx.xxx 未訂閱
第一個我不曉得,但是第2和第3應該都可以使用
// BCB 改寫的,Cells那部份我不知道要怎麼改,改成[i,j]嗎
FormatFloat('##,###,##0.##', StrToFloat(StringGrid1.Cells[i][j]));
發表人 - gyl 於 2005/11/22 21:40:07
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-22 21:51:08 IP:219.140.xxx.xxx 未訂閱
我想这些应该是在stringgrid1KeyPress下体现 我写了个  
procedure tform1.stringgrid1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if (not (key in ['0'..'9'])) then
    key:=#0;
end; 
可以不响应字母键 但回车键也响应不了 在stringgrid1KeyPress中加入 FormatFloat('##,###,##0.##', StrToFloat(StringGrid1.Cells[2,j]));提示无法通过 另 问题一是不是涉及要使用F1book控件来实现? 不会用F1book 發表人 -
gyl
一般會員


發表:0
回覆:15
積分:13
註冊:2005-01-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-23 17:28:09 IP:211.76.xxx.xxx 未訂閱
引言: 我想这些应该是在stringgrid1KeyPress下体现 我写了个
procedure tform1.stringgrid1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if (not (key in ['0'..'9'])) then
    key:=#0;
end; 
可以不响应字母键 但回车键也响应不了 在stringgrid1KeyPress中加入 FormatFloat('##,###,##0.##', StrToFloat(StringGrid1.Cells[2,j]));提示无法通过 另 问题一是不是涉及要使用F1book控件来实现? 不会用F1book 發表人 - >< face="Verdana, Arial, Helvetica"> 我沒有DELPHI測試不了,問題是什麼,過不了是肯定的,StringGrid1的名字改成跟你的stringgrid1一樣,Cells[2,j]似乎也要小寫 如果還不能,把錯誤訊息說一下吧 key的問題我還是不會解,要想想
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-23 18:13:25 IP:219.140.xxx.xxx 未訂閱
......  
procedure TInput.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
i:integer;//以前这里加了 但把StringGrid1.cells[2,i] 写成 StringGrid1.cells[2,j] 所以以前通过不了
begin
  FormatFloat('##,###,##0.##', StrToFloat(StringGrid1.cells[2,i]));
  if (not (key in ['0'..'9'])) then
    key:=#0;
end;
 
这样 以上代码是通过的 但 运行F9后 我在StringGrid1.cells[2,i]上只要一写数字 就提示: Project xxx.exe raised exception class ECnvertError with message ''' is not a valid floating point value'.Process stopped.Use Step or Run to continue. 也就是 not a valid floating point value错误 怎么回事?
gyl
一般會員


發表:0
回覆:15
積分:13
註冊:2005-01-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-23 20:41:13 IP:211.76.xxx.xxx 未訂閱
現在的做法是輸入的同時檢查該KEY是否合理,但是改變型態是在ENTER之後發生,也就是說輸入完畢用滑鼠點其他地方... FormatFloat就不會被執行,有甚麼好意見嗎? (在輸入的時候不斷改變型態似乎不太好,如果有"離開輸入欄位"類似的EVENT就好辦了) 不小心按多了一次...怎麼刪除? 發表人 - gyl 於 2005/11/23 20:47:15
gyl
一般會員


發表:0
回覆:15
積分:13
註冊:2005-01-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-23 20:43:46 IP:211.76.xxx.xxx 未訂閱
現在的做法是輸入的同時檢查該KEY是否合理,但是改變型態是在ENTER之後發生,也就是說輸入完畢用滑鼠點其他地方... FormatFloat就不會被執行,有甚麼好意見嗎? (在輸入的時候不斷改變型態似乎不太好,如果有"離開輸入欄位"類似的EVENT就好辦了) 
// ======== stringgrid1keypress ========
if ( Key == 13 )  //Enter
    {
        // 我從SetEditText Event那裡取得ACol, ARow - 目前編輯的欄位
        int a = StrToInt(str_currency[0]); 
        int b = StrToInt(str_currency[1]);                    // ******** METHOD *********
        if (str_currency[2] != "") //避免沒有修改的情況下按ENTER
        {
            double result;
            result = StrToFloat(str_currency[2]);
            StringGrid1->Cells[a][b] = FormatFloat("#,##0.##", result);
        }
        str_currency[2] = "";
    }
    else if ( !((Key >= 48 && Key <= 57) || Key == 46) )  // 48-57 for 0-9; 46 for Period
    {
        Key = 0; //Neglect keys
    }
    else
    {
        str_currency[2]  = (AnsiString)Key;
    }
發表人 - gyl 於 2005/11/23 20:45:05
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-24 17:50:45 IP:219.140.xxx.xxx 未訂閱
我在对stringgrid[2,i]中输入数据时 写了个函数 主要是实现输入的时候是string型 在执行adocommand时将string型cast成money 型  
 
procedure TInput.insert(opname: string);
var
 i:integer;
 input:string;
begin   
  for i:=1 to 100 do//这里我设定是100行
      begin
        if stringgrid1.Cells[0,i]='' then continue;
       input:=stringgrid1.cells[2,i];
       adocommand1.CommandText:='insert into 表(...[收入],...) values(...cast(''' input ''' as money),...)';
       adocommand1.Execute;
      end;
end;    procedure TInput.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
i:integer;
begin
  FormatFloat('##,###,##0.##', StrToFloat(StringGrid1.cells[2,i]));
  if (not (key in ['0'..'9','.'])) then
    key:=#0;
end;    
我想是不是
 
 FormatFloat('##,###,##0.##', StrToFloat(StringGrid1.cells[2,i]));
  if (not (key in ['0'..'9','.'])) then
    key:=#0;
我写的不是地方 不知道这里怎么统一起来 还有...就是...{...}SORRY...看不太明白... 發表人 - baby2321 於 2005/11/24 17:57:50 看到有朋友对类似的问题 for i:=0 to query1.fields.count-1 do begin if query1.fields[i].name='需要格式化的字段' then query1.fields[i].displayformat := ¥,#.00; end; 这样处理 如果这样有效 不知这里具体如何结合? 發表人 - baby2321 於 2005/11/24 18:34:44
系統時間:2024-04-20 21:51:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!