function GetDBGridEdit(mDBGrid: TDBGrid): TEdit; var I: Integer; begin Result := nil; with mDBGrid do for I := 0 to Pred(ComponentCount) do if Components[I] is TCustomEdit then begin Result := TEdit(Components[I]); Break; end; end; { GetDBGridEdit }function GetDBGridEditText(mDBGrid: TDBGrid): string; var vEdit: TEdit; begin vEdit := GetDBGridEdit(mDBGrid); if Assigned(vEdit) then Result := vEdit.Text else Result := ''; end; { GetDBGridEditText }procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if (Key = '.') and TDBGrid(Sender).EditorMode and (Pos('.', GetDBGridEditText(TDBGrid(Sender))) > 0) then Key := #0; end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); var vNumber: Extended; begin if TDBGrid(Sender).EditorMode and (TryStrToFloat(GetDBGridEditText(TDBGrid(Sender)) + Key, vNumber)) then Key := #0; end;
//发挥点想象吧 procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); var vNumber: Extended; begin if TDBGrid(Sender).EditorMode then if (TryStrToFloat(GetDBGridEditText(TDBGrid(Sender)) + Key, vNumber)) then Key := #0 else if Int(vNumber * 100) <> vNumber * 100 then Key := #0; end;
//it's for Delphi6function TryStrToFloat(mStr: string; var mNumber: Extended): Boolean; var vCode: Integer; begin Val(mStr, mNumber, vCode); Result := vCode = 0; end;
i:=Strtoint(EdtNum.text);
Except
showmessage('请输入正确的数字');
Abort; ---------------------再加个Abort;
end;
var
I: Integer;
begin
Result := nil;
with mDBGrid do for I := 0 to Pred(ComponentCount) do
if Components[I] is TCustomEdit then begin
Result := TEdit(Components[I]);
Break;
end;
end; { GetDBGridEdit }function GetDBGridEditText(mDBGrid: TDBGrid): string;
var
vEdit: TEdit;
begin
vEdit := GetDBGridEdit(mDBGrid);
if Assigned(vEdit) then
Result := vEdit.Text
else Result := '';
end; { GetDBGridEditText }procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = '.') and TDBGrid(Sender).EditorMode and
(Pos('.', GetDBGridEditText(TDBGrid(Sender))) > 0) then
Key := #0;
end;
的FIELD就可以了双击TDATSET(query table proc ETC)
后加入FIELD
选中某个FIELD后设置其属性
EDITFORMAT和DISPFORMAT
好象是 #######.00 or 00000.00
自己试下吧!
var
vNumber: Extended;
begin
if TDBGrid(Sender).EditorMode and
(TryStrToFloat(GetDBGridEditText(TDBGrid(Sender)) + Key, vNumber)) then
Key := #0;
end;
另外还有一个问题请教大家,在dbgrid中的数值字段怎么控制只能输入2位小数,如123.36,因为如果不控制,可以输入好多位小数位数。
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
vNumber: Extended;
begin
if TDBGrid(Sender).EditorMode then
if (TryStrToFloat(GetDBGridEditText(TDBGrid(Sender)) + Key, vNumber)) then
Key := #0
else if Int(vNumber * 100) <> vNumber * 100 then
Key := #0;
end;
按你给的语句我运行了,可有一句出钷,再次请教,深表谢意!
[Error] czblr1_1.pas(180): Undeclared identifier: 'TryStrToFloat'
您说我应该怎么解决
var
vCode: Integer;
begin
Val(mStr, mNumber, vCode);
Result := vCode = 0;
end;
还有一个问题再请教您:
按您说的我是实现了只能输入2位小数的目的,现在问题是:当光标走到一栏时(当然这档假如有数字是123.36)这时只有删除后才能输入数字,请问能否在有数据时不用删除而直接重新输入数字呢?要不然每次都要删除数字是比较麻烦的。
你再碰到问题的时候不要先发帖子问
先搜索相关主题
比如你搜“DBGrid”就可以得到答案
又可以节约分数
不但如此还可以找到最佳的决绝方案
最好自己找到决绝办法,再找最佳方案
还有什么意见欢迎交流,晚了我要睡罗