Verhindern aus einem Memo zu kopieren
Hallo!
Gibt es eine Möglichkeit, zu verhindern, dass man den Text aus einem Memo kopieren/ausschneiden kann? Wann ja, wie mache ich das? Gruß, dopeline :dancer: |
Re: Verhindern aus einem Memo zu kopieren
Zitat:
geht gar nicht - also selbst wenn man es per Delphi unterbinden könnte, was ich jetzt direkt nicht weiß, kann ich immer noch ein Screenshot machen und es durch ein Texterkennungsprogramm jagen und habe immer noch die Infos. So mache ich das schon ewig mit geschützten PDF-Dokumenten ;-) Genau der quatsch mit den geschützen Webseiten - lächerlich. Beim IE einfach Ansicht/Quelltext, dann markieren, kopieren und in meinen HTML-Editor laden - Schutz rausnehmen und anzeigen - bäääääähhhh <zunge_rausstreckt> und schon habe ich dem Webseitenersteller ein Bein gestellt :-) |
Also entweder du sperst die rechte Maustaste, die Menütaste und die Tastenkombinationen STRG+C/STRG+X
oder du bastelst dir einfach einen timer und sagts
Code:
Das soll dann alle 5 ms wiederholt werden und fertig.
memo1.selstart:=memo1.selstart+memo1.SelLength;
memo1.sellength:=0; (Wer es schafft den text in 0,005 sec. zu markieren und zu copieren, dem sollte man den Ervolg gönnen.) Ach und wenn man in das Memo nix eingeben können brauch, dann gib es doch einfach über ein Label aus, da kann man garantiert nix rauscopieren, ob man da aber irgendwie einen schönen 3D Ramen rumbekommt weiß ich nicht. (Das hilft auch gegen Tools, die Den Text eines Memo's anhand des Handels auslesen, ich glaub da gabs probleme den handel eines labels zu ermitteln, über dem die Maus ist. |
Re: Verhindern aus einem Memo zu kopieren
Zitat:
Interessant wird der schutz von Bildern, aber das ist ein anderes Kapitel ;) PS: Einen abseluten Schutz gibt es nie, man kann z.b. immer den Speicher auslesen, in dem der Text steht, nur ob man sich diese Mühe machen möchte? |
Zitat:
und das mit dem Texterkennungsprogramm (z.b. omnipage) kann man sowieso immer machen. aber viele leute wissen nicht einmal, dass es sowas gibt, geschweige denn, wie man das benutzt 8) Grüße, dopeline |
Hallo,
das kommt darauf an, was Du mit dem Memo vorhast, dient es zur Dateneingabe, oder soll es nur Text darstellen den Du im Programm erzeugst. Wenn letzteres der Fall ist, kannst Du das Memo einfach auf
Delphi-Quellcode:
stellen, trotzdem funktioniert danach noch immer z.B.
Memo1.Enabled := FALSE;
Delphi-Quellcode:
aber man kann den Text nicht mehr markieren, daher auch nicht mehr
Memo1.Lines.Add('test');
kopieren. Einzig die Darstellung des Memos ändert sich leicht, Style disabled, das könnte man sicher auch leicht ändern, wenn es stört. |
Moin Dopeline,
erstell Dir ein PopUpMenü mit zwei Menüitems, dem einen weist Du den ShortCut für STRG-C, dem anderen den für STRG-X zu. Dem Memo wird jetzt dieses PopUpMenü verpasst, und dann im OnContextPopup des Memos die Zeile Handled := true eingetragen. Fertig. Dadurch, dass Du die Shortcuts in einem zugewiesenen Menü verwendest, ist Dein Programm selber für deren Ausführung verantwortlich, und durch das Handled := true wird dem System mitgeteilt, dass das Programm auch das Contextmenü selber darstellen will (bzw. hat), was natürlich unterbleibt. Das herauskopieren mittels WM_GETTEXT funktioniert dann aber immer noch ;-) |
Also zum deaktivieren der rechten Maustaste würde ich dir einfach raten, abzufragen, wann die Maus gedrückt wird (rechte taste) wenn dann Die Maus über dem Memo ist, dann sende einen linksklick.
Beispiele kannst du unter: Mausklick simulieren: http://www.tipps.delphi-source.de/de...020914-2.shtml Maustaste Prüfen: http://www.tipps.delphi-source.de/sy...020914-4.shtml Cursorposition ermitteln: var a:TPoint; x,y:longint; begin GetCursorPos(a); mausx:=a.x; mausy:=a.y ... end; Das Memo ist im bereich x koordinate: von form1.left+memo1.left bis form1.left+memo1.left+memo1.width Bereich y koordinate dementsprechen mit top und height (nur das nu noch +17 (Tietelleiste) rechnen mußt. Aber wie das mit den Tasten war weiß ich jetzt auch nicht mehr so genau, wenn ich was finde, dann sag ich bescheid! [edit] Also die STRG+C/X kannst du auch deaktivieren, indem du bei memo1.onkeydown einfach "memo1.sellength:=0;" eingibst. (Wenn also c oder x gedrückt wird wird erst die markierungslänge auf 0 gesetzt, dann copiert. Und wenn du das auch in nen timer machst kann man auch mit der Menü-Taste von windows nicht mehr copieren, da das menü eine Darstellungsverzögerung von ich glaube 50ms hat-> timer setzt schneller wieder auf nichts markiert, als das menü aufgeht. [/edit] |
Zitat:
Zitat:
Lies doch einfach mal, was schon für Lösungen gepostet wurden, bevor du ihr so unsinnige Vorschläge machst. |
Vielen Dank! Das mit dem PopupMenu hat funktioniert. als ich versucht habe den text mit strg+c zu kopieren und dann in einem Editor einzufügen ist dabei nur "Handled := true" rausgekommen! :hello:
Kann man es jetzt noch irgentwie einrichten, dass im Editor nicht "Handled := true" steht, sondern ein Text, wie "Das Kopieren ist nicht gestatten. Alle Rechte sind den Entwicklern vorbehalten" auftaucht? Das wär cool. Grüße, dopeline :dancer: |
hy,
denke die beste lösung ist bei onkeydown die laenge des zu selektierneden textes auf 0 setzt! cu |
Zitat:
|
keinen anfall bekommen,
isrt nicht gut fuer die gesundheit! cu |
Re: Verhindern aus einem Memo zu kopieren
Zitat:
Zitat:
Zitat:
Zitat:
Ich verstehe auch nicht, was in einem Memotext so geheimnisvolles stehen sollte? Der Schuß kann auch nach hinten losgehen nach dem Motto: "Was verboten ist, reizt besonders." Aber um wieder zum "Problem" zurückzukommen: 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:
Und Ruhe ist...
ActiveControl:=Button1;
:P |
Aber wenn man in die Memo auch etwas eingeben können soll ist die Möglichkiet enabled:=false; nicht machbar.
Nur nochmal um vom Thema weg zu kommen *G* (@Catbytes) java verschlüsseler basieren auf einfachen algorythmen, die entweder aus einem Buchstabendurcheinander wieder text machen oder auf eine andere meißt recht simple weise einen text 'entschlüsseln' da dein browser java unterstützt kann dieser den verschlüsselten quelltext bekommen und den extra für dich entschlüsseln, ein copy und past des quelltext ist noch möglich, da dieser aber verschlüsselt ist werden änderungen oder die entnahme von teilen aber recht gut verhindert. Zu deinem OCR, es gibt kontrastfarben, die beim 1-Bit scannen oder umwandeln beide schwarz, bzw weiß dargestellt werden. Wenn also dein hintergrund und dein Text jeweils eine Farbe haben, die laut 1-bit übersetzung die gleiche näherungsfarbe hat, dann hast du ein 1-farbiges bild. Und da wirst du deinen text nur recht schlecht erkennen lassen können. (Oder gibts da schon Tools für?) |
Ich hätte dafür das TJvMemo (JVCL) benutzt. Bei der Komponente kann man das Kopieren/Einfügen/Ausschneiden je nach bedarf ein und ausschalten.
|
Zitat:
Wenn einer an die Daten ran will, kommt er ran - Speicher auslesen z.B. Zitat:
|
Na ja, lassen wir das Thema mal lieber, sonst vertiefen wir uns hier zusehr. Außerdem bin ich immer der menung, abschreiben ist auch ne möglichkeit, gegen die sowieso nix hilft! (Hat mein Lehrer auch immer gesagt *g*)
|
Hallo dopeline,
Die einfachste Möglichkeit ist wohl folgende: Erstelle Dir die StandardActions zum Kopieren, Ausschneiden und Einfügen. Dann ersetzte die vom Betriebssystem vorgegebenen Shortcuts, also Ctrl+X->Ausschneiden; Ctlr+C->Kopieren, Ctrl+V->Einfügen in den ActionItems. Dann erzeuge für jede Action einen Einsprungspunkt, indem Du einen Doppelklick auf die Actionitems machst, und schreibe dort eine Kommentarzeile hinein.
Delphi-Quellcode:
... und fertig !
procedure TForm1.EditCut1Execute(Sender: TObject);
begin // end; procedure TForm1.EditCopy1Execute(Sender: TObject); begin // end; procedure TForm1.EditPaste1Execute(Sender: TObject); begin // end; Gruß, Tom |
Zitat:
bin noch newbie auf dem gebiet. |
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 21:12 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