![]() |
TCustomEdit: Paste verhindern ohne Komponente
Hallo,
wie kann ich in einem Edit-Feld Paste verhindern (Maus, Tastatur usw.) ohne extra Komponente? |
Re: TCustomEdit: Paste verhindern ohne Komponente
Hallo Union,
ich würde es mit subclassing versuchen:
Delphi-Quellcode:
Grüße vom marabu
interface
type TDemoForm = class(TForm) Edit: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private OldEditProc: TWndMethod; procedure NewEditProc(var Message: TMessage); end; var DemoForm: TDemoForm; implementation procedure TDemoForm.NewEditProc(var Message: TMessage); begin if Message.Msg = WM_PASTE then Message.Result := 1 else OldEditProc(Message); end; procedure TDemoForm.FormCreate(Sender: TObject); begin OldEditProc := Edit.WindowProc; Edit.WindowProc := NewEditProc; end; procedure TDemoForm.FormDestroy(Sender: TObject); begin Edit.WindowProc := OldEditProc; end; |
Re: TCustomEdit: Paste verhindern ohne Komponente
Hallo marabu,
das funktioniert gut. Manchmal sollte man sich eben an die gute alte Zeit erinnern ;) Wie kriege ich jetzt aber das Kontextmenü des Edit um die Cut/Paste-Einträge bereinigt? Ausschalten kann man es ja in OnContextPopup. Aber ich will nur den "Einfügen" Eintrag eliminieren oder wenigstens disabled anzeigen. |
Re: TCustomEdit: Paste verhindern ohne Komponente
Hallo Union,
entfernen kannst du das PasteItem so:
Delphi-Quellcode:
Deaktivieren geht so:
Deletemenu(hmContext, IDM_PASTE, MF_BYCOMMAND);
Delphi-Quellcode:
An das Handle hmContext könntest du über einen message handler für WM_INITMENUPOPUP heran kommen, hat aber bei meinem Test eben nicht geklappt. Wenn alle Stricke reißen, dann schalte das standard context menu im event OnContextPopup() aus und schiebe ein custom popup menu ein.
EnableMenuItem(hmContext, IDM_PASTE, MF_BYCOMMAND or MF_GRAYED);
Grüße vom marabu |
Re: TCustomEdit: Paste verhindern ohne Komponente
Hallo marabu,
es kommt nur die Message WM_CONTEXTMENU an. Dort kann ich mit Result := 1 die Darstellung blocken. Ein eigenes Menü kommt aber nicht in Frage, da mein Programm in 5 verschiedenen Sprachen läuft. Dann müsste ich das Menü auch lokalisieren. Aber ich will ja dass die normalen Windows-Texte der jeweiligen Installation verwendet werden. Wie komme ich also an das Handle von dem Standard-Kontextmenü? |
Re: TCustomEdit: Paste verhindern ohne Komponente
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz