![]() |
Hi,
meine Lösung ist wohl etwas untergegangen: Ich nehme an, in diesem Formular gibt es auch einen "OK" Button oder sowas ähnliches. Erzeuge einfach im OnEnter-Event der Memo folgenden Code:
Code:
ActiveControl:=Button1;
|
Hallo,
mit folgendem Source sollte das Kopieren aus einem Memo nicht mehr möglich sein.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ClipBrd, AppEvnts; type TForm1 = class(TForm) Memo1: TMemo; ApplicationEvents1: TApplicationEvents; procedure ApplicationEvents1Deactivate(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Memo1Exit(Sender: TObject); private { Private-Deklarationen } FWndProc : TWndMethod; procedure MemoWndProc(var Msg: TMessage); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject); begin ClipBoard.Clear; // Anwendungsübergreifendes kopieren verhindern end; procedure TForm1.MemoWndProc(var Msg: TMessage); begin if Msg.Msg = WM_GETTEXT then begin Msg.Result := 1; end else FWndProc(Msg); // alte Fensterproceure aufrufen end; procedure TForm1.FormCreate(Sender: TObject); begin FWndProc := Memo1.WindowProc; // alte Fensterproceure merken Memo1.WindowProc := MemoWndProc; // Fensterproceure auf eigene Fensterprocedure umbiegen end; procedure TForm1.Memo1Exit(Sender: TObject); begin ClipBoard.Clear; // Anwendungsinternes kopieren verhindern end; end. |
Zitat:
|
Hallo
Zitat:
Wenn Du etwas aus einer anderen Anwendung in die eigene Anwendung kopieren willst und beim aktivieren der eigenen Anwendung Memo1 den Focus hat, dann lasse Memo1OnExit einfach weg, wenn Du den Inhalt der ZwA nicht in Memo1 kopieren möchtest. Wenn Du aus Deiner Anwendung etwas in eine andere Anwendung kopieren möchtest, aber nur nicht aus Memo1 dann schreibe folgendes
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin If ActiveControl=Memo1 then ClipBoard.Clear; // Anwendungsübergreifendes kopieren verhindern end; |
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Dopeline,
Im Anhang findest Du ein Demoprojekt, das Dir ein wenig weiterhelfen wird. Gruß, Tom :bouncing4: |
Ich habe den Thread nicht mitverfolgt, aber es hat mich gerade mal in den Fingern gejuckt. Anbei eine kleine Komponente, welche wie das TMemo ist, allerdings copy, cut & paste nicht zulässt. Wenn es passt: schön; wenn nicht: na ja :mrgreen:
Delphi-Quellcode:
...:cat:...
unit NoCopyMemo;
interface uses Windows, Messages, StdCtrls; type TNoCopyMemo = class(TMemo) private procedure WMCOPY(var Msg: TWMCopy); message WM_COPY; procedure WMCUT(var Msg: TWMCut); message WM_CUT; procedure WMPASTE(var Msg: TWMPaste); message WM_PASTE; procedure WMGETTEXT(var Msg: TWMGetText); message WM_GETTEXT; end; implementation { TNoCopyMemo } procedure TNoCopyMemo.WMCOPY(var Msg: TWMCopy); begin Msg.Result := -1; end; procedure TNoCopyMemo.WMCUT(var Msg: TWMCut); begin Msg.Result := -1; end; procedure TNoCopyMemo.WMGETTEXT(var Msg: TWMGetText); begin if Msg.TextMax >= 5 then StrPCopy(Msg.Text, 'doch') else Msg.TextMax := 5; Msg.Result := -1; end; procedure TNoCopyMemo.WMPASTE(var Msg: TWMPaste); begin Msg.Result := -1; end; end. P.S. Damit sind auch die Funktionen des Kontextmenüs inaktiv - auch wenn diese noch angezeigt werden. Das Kopieren und ähnliches läuft i.A. über entsprechende Windowsmessages, welche einfach abgefangen werden können. |
Hallo Sakura,
damit ist aber nocht nicht das WM_GETTEXT Problem gelöst. |
Hi Jens,
ich sag doch, habe nicht alles durchgelesen. Gehts jetzt? Ich habe obiges Beispiel einfach mal angepasst und frech "doch" zurückliefern lassen :mrgreen: ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 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