كيفية تعطيل نسخ / لصق في TEdit
-
20-08-2019 - |
سؤال
وأود أن منع نسخ، قص ولصق في بلدي TEdit
. كيف يمكنني أن أفعل هذا؟
وحاولت وضع Key=NULL
على الحدث KeyDown
عندما CTRL + V تم الضغط على السيطرة، لكنها لم تنجح.
المحلول
وستحتاج إلى منع WM_CUT
، WM_COPY
، ورسائل WM_PASTE
من إرسالها إلى TEdit الخاص بك. يصف هذه الإجابة كيف لهذه باستخدام فقط ويندوز API. لVCL، قد يكون كافيا لفئة فرعية TEdit
وتغيير الخاصية DefWndProc
، أو تجاوز أسلوب WndProc
لها.
نصائح أخرى
وتعيين هذا إلى TEdit.OnKeyPress
:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#22) or (Key=#3) then Key:=#0; // 22 = [Ctrl+V] / 3 = [Ctrl+C]
end;
وأعرف أن هذا هو السؤال القديم ولكن سأضيف ما وجدت. كان الملصق الأصلي تقريبا الحل. أنه يعمل بشكل جيد إذا كنت تجاهل قص / نسخ / لصق في المؤتمر الصحفي الرئيسي بدلا من الحدث السلبي الرئيسي. أي (ج ++ منشئ)
void __fastcall Form::OnKeyPress(TObject *Sender, System::WideChar &Key)
{
if( Key==0x03/*ctrl-c*/ || Key==0x16/*ctrl-v*/ || Key==0x018/*ctrl-x*/ )
Key = 0; //ignore key press
}
ويمكنك استخدام بعض البرامج العالمية التي تجذب اختصارات وكتلة C-V C-C C-X عندما TEdit نافذة نشطة
Uses Clipbrd;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Clipboard.AsText := '';
end;