Autor Beitrag
c4
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 25.05.03 07:57 
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.
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 25.05.03 08:34 
Hi!

Du kannst die Nachrichten
WM_COPY
WM_PASTE
WM_CLEAR
abfangen und darauf entsprechend reagieren.

Hier wird's z.B für eine Edit Komponente gezeigt:
www.swissdelphicente...showcode.php?id=1403
c4 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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)'):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.File1Click(Sender: TObject);

begin
  // Menüeintrag "Neu" Tastenkürzel zuweisen. 
  New1.ShortCut := HotKey1.HotKey;  
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Standardwert "STRG + A"
  HotKey1.Modifiers := [hkCtrl];
  // UMSCHALT und ALT nicht zulassen.
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden volle Höhe 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
    { Private declarations }
    procedure MemoWindowProc(var Message: TMessage);
  public
    { Public declarations }
  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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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. :)