Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - STRG+C & Co. abblocken
c4 - So 25.05.03 07:57
Titel: STRG+C & Co. abblocken
Moin,
wie verhindere ich, dass Kopieren/Ausschneiden/Einfügen via Tastatur ausgeführt werden kann?
Die üblichen Abfragen, ob key=17 oder key=vk_control oder auch ord(key)=vk_control und dann key auf Null setzen bringen es leider nicht. Egal, ob bei onkeyressed oder onkeydown.
Vorschläge?
Danke.
c4 - So 25.05.03 09:26
Danke schonmal.
So wirklich geholfen hat mir der Link aber nicht. Ist mir doch etwas zu hoch und unbekannt, was dort steht. Außerdem kommen dort Funktionen zur Anwendung, die nicht definiert werden und in der Hilfe von Delphi auch nicht vorkommen. Dumm, also.
Zu WM_COPY und so finde ich auch nix, weiß also nicht, wie ich die abfangen kann. Übrigens reicht es aus, wenn das Einfügen nicht möglich ist.
Hab in der Hilfe aber folgendes gefunden ('HotKey (Beispiel)'):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.File1Click(Sender: TObject);
begin New1.ShortCut := HotKey1.HotKey; end;
procedure TForm1.FormCreate(Sender: TObject); begin HotKey1.Modifiers := [hkCtrl]; HotKey1.InvalidKeys := [hcShift, hcAlt]; end; |
Wie kann ich das eventuell auf meine Memo-Komponente anwenden?
Edit: Ich seh schon, dieses HotKey-Dings ist wohl nix für mich. :(
toms - So 25.05.03 09:39
Zitat: |
Außerdem kommen dort Funktionen zur Anwendung, die nicht definiert werden und in der Hilfe von Delphi auch nicht vorkommen |
Es handelt sich dort um eine Komponente, welche zuerst installiert
werden muss.
Du könntest das Memo auch subclassen und die Weitergabe dieser
Nachrichten (z.B WM_PASTE ) an die WindowProc-Funktion der Fensterklasse unterbinden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| /... private procedure MemoWindowProc(var Message: TMessage); public end;
var Form1: TForm1;
var OldMemoWindowProc: TWndMethod;
implementation
{$R *.dfm}
procedure TForm1.MemoWindowProc(var Message: TMessage); begin if Message.Msg = WM_PASTE then else OldMemoWindowProc(Message); end;
procedure TForm1.FormCreate(Sender: TObject); begin OldMemoWindowProc := Memo1.WindowProc; Memo1.WindowProc := MemoWindowProc; end;
procedure TForm1.FormDestroy(Sender: TObject); begin Memo1.WindowProc := OldMemoWindowProc; end; |
c4 - So 25.05.03 10:10
Obwohl mir Deine Lösungsidee von hinten bis vorne unklar ist, das Internet nichts bietet, mein gedrucktes Nachschlagwerk sich als unbrauchbar erweist und ich herzlich wenig Ahnung von Delphi habe, bin ich zu einer Lösung gekommen: Eine ActionList ins Formular setzen, eine Aktion rein setzen, die den Shortcut STRG+V hat, und dann bei jeder Ausführung der Variable i den Wert #0 zuweist. :)
Viel zu simpel diese Idee.
Besten Dank trotzdem.
Edit: Der Genauigkeit wegen und für andere mit dem Problem: ShortCut=Umsch+Strg+V und SecondaryShortCut=Strg+V - sonst könnte man ja per Strg+Shift+V den Text noch einfügen.
Maus übrigens einfach mittels leerem PopUpMenu blocken.
Mag nicht die eleganteste Variante sein, aber simpeler geht's wohl kaum. :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!