unit keyPro;interface
uses
Controls, Forms, DBGrids, Messages, SysUtils, Grids, DBCtrls,
StdCtrls, ComCtrls, Dialogs;type
TInteger = set of Char;procedure pKeyPress(var pForm: TForm; var Key: Char);
procedure pInputMode(var Key: Char; InputMode: string; Sender: TObject; IntNum: integer = 0; DecimalNum: integer = 0);
//Key 输入的键值 InputText 输入的所有字符 IntNum 整数个数或英文整个个数 DecimaNum 数值中小数个数
function pJudgeValue(pStr: string): Boolean;implementationprocedure pKeyPress(var pForm: TForm; var Key: Char);
begin
//回车自动移动
//调用方式 pKeyPress(Tform(form1), key);
if key = #13 then { 判断是按执行键}
begin
if pForm.ActiveControl is TDBGrid then {是在Tdbgrid控件内}
begin
with TDBGrid(pForm.ActiveControl) do
if SelectedIndex < (FieldCount - 1) then
SelectedIndex := SelectedIndex + 1 { 移动到下一字段}
else
SelectedIndex := 0;
Exit;
end;
if pForm.ActiveControl is TMemo then {是在TMemo控件内}
Exit;
if pForm.ActiveControl is TDBMemo then {是在TDBMemo控件内}
Exit;
if pForm.ActiveControl is TStringGrid then {是在TStringGrid控件内}
begin
with TStringGrid(pForm.ActiveControl) do
begin
if Col < (ColCount - 1) then
Col := Col + 1 { 移动到下一字段}
else if Row < (RowCount - 1) then
begin
Row := Row + 1;
Col := 0;
end
else
begin
Row := FixedRows;
Col := FixedCols;
end;
Exit;
end;
end; if pForm.ActiveControl is TListView then {是在TListView控件内}
begin
with TListView(pForm.ActiveControl) do
begin
if Selected.Index < (Items.Count - 1) then
begin
Items[Selected.Index + 1].Selected := true;
Exit;
end
else
begin
Items[0].Selected := true;
Exit;
end;
end;
end; key := #0;
pForm.Perform(WM_NEXTDLGCTL, 0, 0); {移动到下一个控件}
end;
end;procedure pInputMode(var Key: Char; InputMode: string; Sender: TObject; IntNum: integer = 0; DecimalNum: integer = 0);
var
mInteger: TInteger;
InputText: string;
mSelStart: integer;
begin
//控制输入方式
if Sender is TComboBox then
begin
mSelStart := TComboBox(Sender).SelStart;
TComboBox(Sender).Text := Copy(TComboBox(Sender).Text, 0, TComboBox(Sender).SelStart) + Copy(TComboBox(Sender).Text, TComboBox(Sender).SelStart + TComboBox(Sender).SelLength + 1, Length(TComboBox(Sender).Text) - TComboBox(Sender).SelStart + TComboBox(Sender).SelLength);
TComboBox(Sender).SelStart := mSelStart;
InputText := TComboBox(Sender).Text;
end;
if Sender is TEdit then
begin
mSelStart := TEdit(Sender).SelStart;
TEdit(Sender).Text := Copy(TEdit(Sender).Text, 0, TEdit(Sender).SelStart) + Copy(TEdit(Sender).Text, TEdit(Sender).SelStart + TEdit(Sender).SelLength + 1, Length(TEdit(Sender).Text) - TEdit(Sender).SelStart + TEdit(Sender).SelLength);
TEdit(Sender).SelStart := mSelStart;
InputText := TEdit(Sender).Text;
end;
if Sender is TDBEdit then
begin
mSelStart := TDBEdit(Sender).SelStart;
TDBEdit(Sender).Text := Copy(TDBEdit(Sender).Text, 0, TDBEdit(Sender).SelStart) + Copy(TDBEdit(Sender).Text, TDBEdit(Sender).SelStart + TDBEdit(Sender).SelLength + 1, Length(TDBEdit(Sender).Text) - TDBEdit(Sender).SelStart + TDBEdit(Sender).SelLength);
TDBEdit(Sender).SelStart := mSelStart;
InputText := TDBEdit(Sender).Text;
end;
if Sender is TDBComboBox then
begin
mSelStart := TDBComboBox(Sender).SelStart;
TDBComboBox(Sender).Text := Copy(TDBComboBox(Sender).Text, 0, TDBComboBox(Sender).SelStart) + Copy(TDBComboBox(Sender).Text, TDBComboBox(Sender).SelStart + TDBComboBox(Sender).SelLength + 1, Length(TDBComboBox(Sender).Text) - TDBComboBox(Sender).SelStart + TDBComboBox(Sender).SelLength);
TDBComboBox(Sender).SelStart := mSelStart;
InputText := TDBComboBox(Sender).Text;
end;
if InputMode = '整数' then
begin
mInteger := ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', #8];
if not (Key in mInteger) then
begin
Key := #0;
end
else
begin
if Key <> #8 then
if (IntNum <> 0) and (Length(InputText) >= IntNum) then
begin
Key := #0;
end;
end;
end
else if InputMode = '数值' then
begin
mInteger := ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.', #8];
if not (Key in mInteger) then
begin
Key := #0;
Beep;
end
else
begin
if Key <> #8 then
begin
if DecimalNum = 0 then
begin
if (Key = '.') then
Key := #0;
if (IntNum <> 0) and (Length(Copy(InputText, 0, Length(InputText) - Pos('.', InputText))) >= IntNum) then
begin
Key := #0;
Exit;
end;
end
else
begin
//判断小数点
if (Key = '.') then
if (Pos('.', InputText) <> 0) then
begin
Key := #0;
Exit;
end
else
Exit;
if (Pos('.', InputText) <> 0) then
begin
//判断整数值
if TEdit(Sender).SelStart < Pos('.', InputText) then
if (Length(Copy(InputText, 0, Pos('.', InputText) - 1)) >= IntNum) then
Key := #0;
//判断小数值
if TEdit(Sender).SelStart > Pos('.', InputText) then
if (Length(Copy(InputText, Pos(InputText, '.'), Length(InputText) - Pos('.', InputText))) >= DecimalNum) then
Key := #0;
end
else
if (Length(InputText) >= IntNum) then
Key := #0;
end;
end;
end;
end
else if InputMode = '英文' then
begin
mInteger := ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd',
'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i',
'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n',
'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's',
'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x',
'Y', 'y', 'Z', 'z', #8];
if not (Key in mInteger) then
begin
Key := #0;
Beep;
end
else
begin
if Key <> #8 then
if (IntNum <> 0) and (Length(InputText) >= IntNum) then
begin
Key := #0;
Beep;
end;
end;
end;
end;function pJudgeValue(pStr: string): Boolean;
var
mResult: Boolean;
begin
//判断字符串是否为数值型
if Pstr <> '' then
begin
try
strTOfloat(pStr);
mResult := True;
except
mResult := False;
end;
Result := mResult;
end
else
Result := True;
end;end.
uses
Controls, Forms, DBGrids, Messages, SysUtils, Grids, DBCtrls,
StdCtrls, ComCtrls, Dialogs;type
TInteger = set of Char;procedure pKeyPress(var pForm: TForm; var Key: Char);
procedure pInputMode(var Key: Char; InputMode: string; Sender: TObject; IntNum: integer = 0; DecimalNum: integer = 0);
//Key 输入的键值 InputText 输入的所有字符 IntNum 整数个数或英文整个个数 DecimaNum 数值中小数个数
function pJudgeValue(pStr: string): Boolean;implementationprocedure pKeyPress(var pForm: TForm; var Key: Char);
begin
//回车自动移动
//调用方式 pKeyPress(Tform(form1), key);
if key = #13 then { 判断是按执行键}
begin
if pForm.ActiveControl is TDBGrid then {是在Tdbgrid控件内}
begin
with TDBGrid(pForm.ActiveControl) do
if SelectedIndex < (FieldCount - 1) then
SelectedIndex := SelectedIndex + 1 { 移动到下一字段}
else
SelectedIndex := 0;
Exit;
end;
if pForm.ActiveControl is TMemo then {是在TMemo控件内}
Exit;
if pForm.ActiveControl is TDBMemo then {是在TDBMemo控件内}
Exit;
if pForm.ActiveControl is TStringGrid then {是在TStringGrid控件内}
begin
with TStringGrid(pForm.ActiveControl) do
begin
if Col < (ColCount - 1) then
Col := Col + 1 { 移动到下一字段}
else if Row < (RowCount - 1) then
begin
Row := Row + 1;
Col := 0;
end
else
begin
Row := FixedRows;
Col := FixedCols;
end;
Exit;
end;
end; if pForm.ActiveControl is TListView then {是在TListView控件内}
begin
with TListView(pForm.ActiveControl) do
begin
if Selected.Index < (Items.Count - 1) then
begin
Items[Selected.Index + 1].Selected := true;
Exit;
end
else
begin
Items[0].Selected := true;
Exit;
end;
end;
end; key := #0;
pForm.Perform(WM_NEXTDLGCTL, 0, 0); {移动到下一个控件}
end;
end;procedure pInputMode(var Key: Char; InputMode: string; Sender: TObject; IntNum: integer = 0; DecimalNum: integer = 0);
var
mInteger: TInteger;
InputText: string;
mSelStart: integer;
begin
//控制输入方式
if Sender is TComboBox then
begin
mSelStart := TComboBox(Sender).SelStart;
TComboBox(Sender).Text := Copy(TComboBox(Sender).Text, 0, TComboBox(Sender).SelStart) + Copy(TComboBox(Sender).Text, TComboBox(Sender).SelStart + TComboBox(Sender).SelLength + 1, Length(TComboBox(Sender).Text) - TComboBox(Sender).SelStart + TComboBox(Sender).SelLength);
TComboBox(Sender).SelStart := mSelStart;
InputText := TComboBox(Sender).Text;
end;
if Sender is TEdit then
begin
mSelStart := TEdit(Sender).SelStart;
TEdit(Sender).Text := Copy(TEdit(Sender).Text, 0, TEdit(Sender).SelStart) + Copy(TEdit(Sender).Text, TEdit(Sender).SelStart + TEdit(Sender).SelLength + 1, Length(TEdit(Sender).Text) - TEdit(Sender).SelStart + TEdit(Sender).SelLength);
TEdit(Sender).SelStart := mSelStart;
InputText := TEdit(Sender).Text;
end;
if Sender is TDBEdit then
begin
mSelStart := TDBEdit(Sender).SelStart;
TDBEdit(Sender).Text := Copy(TDBEdit(Sender).Text, 0, TDBEdit(Sender).SelStart) + Copy(TDBEdit(Sender).Text, TDBEdit(Sender).SelStart + TDBEdit(Sender).SelLength + 1, Length(TDBEdit(Sender).Text) - TDBEdit(Sender).SelStart + TDBEdit(Sender).SelLength);
TDBEdit(Sender).SelStart := mSelStart;
InputText := TDBEdit(Sender).Text;
end;
if Sender is TDBComboBox then
begin
mSelStart := TDBComboBox(Sender).SelStart;
TDBComboBox(Sender).Text := Copy(TDBComboBox(Sender).Text, 0, TDBComboBox(Sender).SelStart) + Copy(TDBComboBox(Sender).Text, TDBComboBox(Sender).SelStart + TDBComboBox(Sender).SelLength + 1, Length(TDBComboBox(Sender).Text) - TDBComboBox(Sender).SelStart + TDBComboBox(Sender).SelLength);
TDBComboBox(Sender).SelStart := mSelStart;
InputText := TDBComboBox(Sender).Text;
end;
if InputMode = '整数' then
begin
mInteger := ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', #8];
if not (Key in mInteger) then
begin
Key := #0;
end
else
begin
if Key <> #8 then
if (IntNum <> 0) and (Length(InputText) >= IntNum) then
begin
Key := #0;
end;
end;
end
else if InputMode = '数值' then
begin
mInteger := ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.', #8];
if not (Key in mInteger) then
begin
Key := #0;
Beep;
end
else
begin
if Key <> #8 then
begin
if DecimalNum = 0 then
begin
if (Key = '.') then
Key := #0;
if (IntNum <> 0) and (Length(Copy(InputText, 0, Length(InputText) - Pos('.', InputText))) >= IntNum) then
begin
Key := #0;
Exit;
end;
end
else
begin
//判断小数点
if (Key = '.') then
if (Pos('.', InputText) <> 0) then
begin
Key := #0;
Exit;
end
else
Exit;
if (Pos('.', InputText) <> 0) then
begin
//判断整数值
if TEdit(Sender).SelStart < Pos('.', InputText) then
if (Length(Copy(InputText, 0, Pos('.', InputText) - 1)) >= IntNum) then
Key := #0;
//判断小数值
if TEdit(Sender).SelStart > Pos('.', InputText) then
if (Length(Copy(InputText, Pos(InputText, '.'), Length(InputText) - Pos('.', InputText))) >= DecimalNum) then
Key := #0;
end
else
if (Length(InputText) >= IntNum) then
Key := #0;
end;
end;
end;
end
else if InputMode = '英文' then
begin
mInteger := ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd',
'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i',
'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n',
'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's',
'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x',
'Y', 'y', 'Z', 'z', #8];
if not (Key in mInteger) then
begin
Key := #0;
Beep;
end
else
begin
if Key <> #8 then
if (IntNum <> 0) and (Length(InputText) >= IntNum) then
begin
Key := #0;
Beep;
end;
end;
end;
end;function pJudgeValue(pStr: string): Boolean;
var
mResult: Boolean;
begin
//判断字符串是否为数值型
if Pstr <> '' then
begin
try
strTOfloat(pStr);
mResult := True;
except
mResult := False;
end;
Result := mResult;
end
else
Result := True;
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货