继承一个Edit 定义一个写入数据类型 重写KeyPress 事件 procedure TPowerEdit.KeyPress(var Key: Char); var S: String; P: Integer; V: Double; begin inherited KeyPress(Key); case Ord(Key) of VK_RETURN: begin Perform(WM_KEYDOWN,VK_TAB,0); Exit; end; VK_BACK: Exit; end; if (Ord(Key) in [3,22]) and ((GetKeyState(VK_CONTROL) and $80) = $80) then Exit; case FWriteType of wtInteger: if (not (Key in [#48..#57, #8, #13, #45])) then begin //'-' Key := #0; Exit; end; wtNumber: if (not (Key in [#48..#57, #8, #13, #46, #45])) then begin //'.' '-' Key := #0; Exit; end; end; if (FWriteType <> wtChar) then begin if (FWriteMinVal >= 0) and (Key = #45) then begin Key := #0; Exit; end; try if (SelLength <> 0) then begin P := Pos(SelText, Text); S := Copy(Text, 1, P-1); S := S + Key + Copy(Text, P+SelLength, Length(Text)); end else begin S := Copy(Text, 1, SelStart); S := S + Key + Copy(Text, SelStart+1, Length(Text)); end; if (S <> '-') and (S <> '') then begin V := StrToFloat(S); if Pos('-', S) = 1 then begin if V < FWriteMinVal then Key := #0 end else if V > FWriteMaxVal then Key := #0; //正的最小值在OnExit中判断 end; except Key := #0; end; end; end;
屏蔽右键抄来的: procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); begin Handled := False; end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var s:set of char; i:integer; // Str, Text: string; begin s:=['-','.',#8,'0'..'9']; If Key = #8 Then exit; i:=pos('.',TEdit(Sender).text); if i>0 then s:=s-['.']; if (i>0)and(i=length(TEdit(Sender).text)-2) then //可任意控制-2,-3.... begin key:=#0; exit; end;if not (Key in s)then begin Key := #0; Exit; end;{//控制输入数字的大小 if TEdit(Sender).SelLength > 0 then begin Text := TEdit(Sender).Text; Str := Copy(Text, 1, TEdit(Sender).SelStart - 1) + Key + Copy(Text, TEdit(Sender).SelStart + TEdit(Sender).SelLength + 1, Length(Text)); i := StrToInt(Str); if i > 59 then begin Key := #0; Exit; end; end else if StrToInt(TEdit(Sender).Text + Key) > 59 then begin Key := #0; Exit; end;} end;
if(ssCtrl in Shift) and (Key=$56 ) then begin OpenClipboard(Edit1.Handle); EmptyClipboard; CloseClipboard; end;
strtofloat(trim(edit.text));
except
edit.setfocus;
end;
procedure TPowerEdit.KeyPress(var Key: Char);
var
S: String;
P: Integer;
V: Double;
begin
inherited KeyPress(Key); case Ord(Key) of
VK_RETURN:
begin
Perform(WM_KEYDOWN,VK_TAB,0);
Exit;
end;
VK_BACK: Exit;
end;
if (Ord(Key) in [3,22]) and ((GetKeyState(VK_CONTROL) and $80) = $80) then
Exit; case FWriteType of
wtInteger:
if (not (Key in [#48..#57, #8, #13, #45])) then
begin //'-'
Key := #0;
Exit;
end;
wtNumber:
if (not (Key in [#48..#57, #8, #13, #46, #45])) then
begin //'.' '-'
Key := #0;
Exit;
end;
end;
if (FWriteType <> wtChar) then
begin
if (FWriteMinVal >= 0) and (Key = #45) then
begin
Key := #0;
Exit;
end;
try
if (SelLength <> 0) then
begin
P := Pos(SelText, Text);
S := Copy(Text, 1, P-1);
S := S + Key + Copy(Text, P+SelLength, Length(Text));
end else
begin
S := Copy(Text, 1, SelStart);
S := S + Key + Copy(Text, SelStart+1, Length(Text));
end;
if (S <> '-') and (S <> '') then
begin
V := StrToFloat(S);
if Pos('-', S) = 1 then
begin
if V < FWriteMinVal then Key := #0
end
else
if V > FWriteMaxVal then Key := #0; //正的最小值在OnExit中判断
end;
except
Key := #0;
end;
end;
end;
procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
Handled := False;
end;
try
strtofloat(trim(edit.text));
except
edit.setfocus;
end;
如何阻止CTRL+v将内容粘贴到文本框中
如果不用TYR还能如何控制
判断是否是 ctrl+V
OpenClipboard(Edit1.Handle);
EmptyClipboard;
CloseClipboard;
var
s:set of char;
i:integer;
// Str, Text: string;
begin
s:=['-','.',#8,'0'..'9'];
If Key = #8 Then exit;
i:=pos('.',TEdit(Sender).text);
if i>0 then
s:=s-['.'];
if (i>0)and(i=length(TEdit(Sender).text)-2) then //可任意控制-2,-3....
begin
key:=#0;
exit;
end;if not (Key in s)then
begin
Key := #0;
Exit;
end;{//控制输入数字的大小
if TEdit(Sender).SelLength > 0 then
begin
Text := TEdit(Sender).Text;
Str := Copy(Text, 1, TEdit(Sender).SelStart - 1) + Key +
Copy(Text, TEdit(Sender).SelStart + TEdit(Sender).SelLength + 1, Length(Text));
i := StrToInt(Str);
if i > 59 then
begin
Key := #0;
Exit;
end;
end
else if StrToInt(TEdit(Sender).Text + Key) > 59 then
begin
Key := #0;
Exit;
end;}
end;
begin
OpenClipboard(Edit1.Handle);
EmptyClipboard;
CloseClipboard;
end;