Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TCustomEdit: Paste verhindern ohne Komponente (https://www.delphipraxis.net/55648-tcustomedit-paste-verhindern-ohne-komponente.html)

Union 24. Okt 2005 20:43


TCustomEdit: Paste verhindern ohne Komponente
 
Hallo,

wie kann ich in einem Edit-Feld Paste verhindern (Maus, Tastatur usw.) ohne extra Komponente?

marabu 24. Okt 2005 21:56

Re: TCustomEdit: Paste verhindern ohne Komponente
 
Hallo Union,

ich würde es mit subclassing versuchen:

Delphi-Quellcode:
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;
Grüße vom marabu

Union 25. Okt 2005 07:23

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.

marabu 25. Okt 2005 20:22

Re: TCustomEdit: Paste verhindern ohne Komponente
 
Hallo Union,

entfernen kannst du das PasteItem so:
Delphi-Quellcode:
Deletemenu(hmContext, IDM_PASTE, MF_BYCOMMAND);
Deaktivieren geht so:
Delphi-Quellcode:
EnableMenuItem(hmContext, IDM_PASTE, MF_BYCOMMAND or MF_GRAYED);
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.

Grüße vom marabu

Union 25. Okt 2005 20:43

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ü?

Sprint 26. Okt 2005 02:41

Re: TCustomEdit: Paste verhindern ohne Komponente
 
Zitat:

Zitat von Union
Wie komme ich also an das Handle von dem Standard-Kontextmenü?

Mit MSDN-Library durchsuchenGetMenu.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz