如題,哪位高手講解一下,不勝感激!!!
uj5u.com熱心網友回復:
1.檢查按鍵是不是 Ctrl+C/Ctrl+V2.禁用文本框的滑鼠右鍵
uj5u.com熱心網友回復:
新建一個工程,放一個文本框,然后加入以下紅色代碼:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TEdit = class(StdCtrls.TEdit)
procedure WndProc(var Message: TMessage); override;
end;
TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TEdit }
procedure TEdit.WndProc(var Message: TMessage);
begin
with Message do
if (Msg = WM_COPY) or (Msg = WM_CUT) or (Msg = WM_PASTE) then
Exit;
inherited
end;
end.
uj5u.com熱心網友回復:
記錄下,留著用uj5u.com熱心網友回復:
記錄下,留著用uj5u.com熱心網友回復:
這個很不錯,我沒用過訊息機制。uj5u.com熱心網友回復:
還應該加入鍵盤訊息才行,否則人家按ctrl+C也可以,呵呵。uj5u.com熱心網友回復:
把文本框設為enabled:=falseuj5u.com熱心網友回復:
洗掉文本框,或者把文本框設定為不可見visible := false;
嘿嘿嘿嘿
uj5u.com熱心網友回復:
如果是禁用所有TEdit控制元件, 用2樓的方法如果是禁用特定TEdit控制元件, 可以使用下邊的方法
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;
type
TForm11 = class(TForm)
edt1: TEdit;
qry1: TQuery;
edt2: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure edt1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
private
{ Private declarations }
FOldWndProc: TWndMethod; //保存特定控制元件原來的方法地址
public
{ Public declarations }
procedure NewWndProc(var Message: TMessage); //新訊息定義
end;
var
Form11: TForm11;
implementation
{$R *.dfm}
procedure TForm11.NewWndProc(var Message: TMessage);
begin
//過濾復制,剪切, 粘貼
if (Message.Msg = WM_CUT) or (Message.Msg = WM_COPY) or
(Message.Msg = WM_PASTE)
then
exit;
FOldWndProc(Message);
end;
procedure TForm11.edt1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
Handled := True; //禁用右鍵選單
end;
procedure TForm11.FormCreate(Sender: TObject);
begin
FOldWndProc := edt1.WindowProc;
edt1.WindowProc := NewWndProc;
end;
procedure TForm11.FormDestroy(Sender: TObject);
begin
edt1.WindowProc := FOldWndProc;
end;
end.
uj5u.com熱心網友回復:
2樓是直接攔截訊息 ,應該連按鈕也攔掉了。。uj5u.com熱心網友回復:
文本框拾取焦點時清空剪貼板uj5u.com熱心網友回復:
學習了。。。。。uj5u.com熱心網友回復:
感覺九樓的對 明天試一下uj5u.com熱心網友回復:

一大早就看到技術貼,收藏了
uj5u.com熱心網友回復:
簡單直接的方式
uj5u.com熱心網友回復:
private
{ Private declarations }
PressCtrl:Boolean;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift =[ssCtrl] then
begin
PressCtrl:=True;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if PressCtrl then
begin
if (Key =#22) then
begin
Key:=#0;
PressCtrl:=False;
end;
end;
end;
uj5u.com熱心網友回復:
禁止文本框右擊的話添加一個TPopupMenu到表單 設定文本框PopupMenu為新增的這個彈出選單
uj5u.com熱心網友回復:
修改如下 更容易懂
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift =[ssCtrl] then
begin
if (Key=ord('C') ) or (Key=Ord('V')) or (Key=Ord('X')) then
PressCtrl:=True;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if PressCtrl then
begin
Key:=#0;
PressCtrl:=False;
end;
end;
uj5u.com熱心網友回復:
2樓攔截的是Edit的訊息,其他的沒有,那個就能直接搞定了
uj5u.com熱心網友回復:
再次路過。。uj5u.com熱心網友回復:
頂2樓
uj5u.com熱心網友回復:
記錄下,留著用uj5u.com熱心網友回復:
直接不用文本框不就行了,直接用TLabel什么的。uj5u.com熱心網友回復:
教你一個簡單有效的辦法。以Memo為例。
1、加入一 TPopupMenu, 不加入任何選單專案。
2、OnShow事件中,加入代碼Memo1.PopupMenu:=PopupMenu1;
這樣,memo的右鍵快捷選單被完全屏蔽。
uj5u.com熱心網友回復:
為什么要禁止呢,可見即可得,我照著手輸一遍還是能把文本框的內容抄下來啊...uj5u.com熱心網友回復:
這招不行,我只要注入這個行程DefWindowProc(編輯框的句柄,WM_Copy,0,0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101784.html
標籤:VCL組件開發及應用
上一篇:delphi2007 indy
下一篇:delphi思路求助
