سؤال

وأود أن منع نسخ، قص ولصق في بلدي 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top