Delphi控制编辑类控件不能粘贴
2013-02-02 17:56
801 查看
在一些C/S软件和登录网站输入账号密码时经常只能进行输入,而不让用户直接粘贴,防止上次用户登录账号没清除,下一个用户直接粘贴该账号而导致账号信息泄露,刚好在公司开发中要实现该功能,下面记录下在Delphi中实现该功能的方法。粘贴主要是利用了windows的剪贴板功能,因此清除剪贴板中内容即可实现。
打开Delphi,新建一个应用程序,在窗体上放置2个Edit控件和一个popupmenu控件。窗体文件和源码如下:
object Form1: TForm1
Left = 333
Top = 327
Width = 328
Height = 199
Caption = '禁用粘贴功能'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object edt1: TEdit
Left = 64
Top = 32
Width = 121
Height = 21
PopupMenu = pm1
TabOrder = 0
OnKeyDown = edt1KeyDown
end
object edt2: TEdit
Left = 64
Top = 72
Width = 121
Height = 21
TabOrder = 1
OnKeyDown = edt2KeyDown
end
object pm1: TPopupMenu
Left = 216
Top = 64
end
end
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
pm1: TPopupMenu;
edt1: TEdit;
edt2: TEdit;
procedure edt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edt2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses clipbrd;
procedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key in [86..118]) and (ssCtrl in Shift) then
edt1.ReadOnly:=True
else
edt1.ReadOnly:=False;
end;
procedure TForm1.edt2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key in [86..118]) and (ssCtrl in Shift) then
begin
if clipboard.HasFormat(CF_Text) then
clipboard.SetTextBuf('');
end;
end;
end.
方法一利用了控件的只读属性,而方法二直接给剪贴板内容设置为空串,这样其他地方也不能再使用该内容。效果如下:
屏蔽了右键菜单,只能输入不能粘贴内容。
打开Delphi,新建一个应用程序,在窗体上放置2个Edit控件和一个popupmenu控件。窗体文件和源码如下:
object Form1: TForm1
Left = 333
Top = 327
Width = 328
Height = 199
Caption = '禁用粘贴功能'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object edt1: TEdit
Left = 64
Top = 32
Width = 121
Height = 21
PopupMenu = pm1
TabOrder = 0
OnKeyDown = edt1KeyDown
end
object edt2: TEdit
Left = 64
Top = 72
Width = 121
Height = 21
TabOrder = 1
OnKeyDown = edt2KeyDown
end
object pm1: TPopupMenu
Left = 216
Top = 64
end
end
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
pm1: TPopupMenu;
edt1: TEdit;
edt2: TEdit;
procedure edt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edt2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses clipbrd;
procedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key in [86..118]) and (ssCtrl in Shift) then
edt1.ReadOnly:=True
else
edt1.ReadOnly:=False;
end;
procedure TForm1.edt2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key in [86..118]) and (ssCtrl in Shift) then
begin
if clipboard.HasFormat(CF_Text) then
clipboard.SetTextBuf('');
end;
end;
end.
方法一利用了控件的只读属性,而方法二直接给剪贴板内容设置为空串,这样其他地方也不能再使用该内容。效果如下:
屏蔽了右键菜单,只能输入不能粘贴内容。
相关文章推荐
- Delphi中webbrowser 不能复制粘贴
- 用Js控制TextBox不能复制粘贴
- 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- delphi下实现控制其它窗体中的控件
- Delphi中如何控制其他程序窗体上的窗口控件
- 服务器端FileUpload上传控件如何禁止手动输入并且不能粘贴
- VC/MFC 使edit控件不能进行粘贴操作
- Delphi 关于子线程控制界面控件时,画面抖动的问题
- delphi下实现控制其它窗体中的控件[转]
- delphi下实现控制其它窗体中的控件
- VC/MFC 使edit控件不能进行粘贴操作
- delphi下实现控制其它窗体中的控件代码模板(delphi 7安装程序)
- Delphi 7下Spcomm控件使用13H,11H不能接收问题
- delphi 使用工控机控件 iThreadTimes 出现问题, 导致主程序创建页面的时候, 阻塞消息, 不能正常执行。
- 为什么CheckBox只能控制Panel控件的显示,不能控制它的隐藏呢?
- delphi下实现控制其它窗体中的控件[转]
- jquery设置控件不能复制粘贴
- 服务器端FileUpload上传控件如何禁止手动输入并且不能粘贴.
- Delphi中如何控制其他程序窗体上的窗口控件