Zablokować kopiowanie !

0

Jak zrobić żeby zablokować możliwość kopiowania tekstu z RichEdit ?

Czy richedit ma taką możliwość ?

A może da się zablokować zaznaczanie tekstu ( to by chyba rozwiązało sprawe) lub nałożyć na richedit jakiś komponent przezroczysty (ale jaki).

Jak to rozwiązać?
[???]

0

blokujesz popup menu

0

Ale ja nic nie definiowałem pod prawy klawisz - bo wydaje mi się że do tego służy PopupMenu (menu podręczne).
Krótko mówiąc nie wiem jak zastosować tą właściwość do mojego problemu.
Mógłbyś coś więcej napisać.
[???]

0

może spróbuj tak:

RichEdit1.PopupMenu:=Nil;

0

RichEdit1.PopupMenu:=Nil;

....nie pomaga

także ustawienie ReadOnly:=true też nic nie daje

Ctrl+C nadal działa ;-(

0

<font color="green">RichEdit1.PopupMenu:=Nil;</span>

Nic to nie da, bo dalej będzie można kopiować skrótem CTRL+C.

Jedyne co mogę ci polecić to stworzyć niewidoczny menu, i do pustego elementu dać skrót CTRL+C, chociaż i to nic nie gwarantuje.

Na twoim miejscu zastosował bym SynEdit. Można tam wyłączyć zaznaczanie tekstu:
<font color="blue">SynEdit.Options := SynEdit.Options - [eonoselection];</span>

0

Zablokuj CTRL+C przy OnKeyDown :>
A pod menu wsadz coś innnego.

0

Szymek: blokada Ctrl+C nic nie da.

A jak zablokować PopupMenu bez podpinania pustego menu niedawno pisałem!!!!

http://4programmers.net/Forum/viewtopic.php?id=41325

0

Szymek: blokada Ctrl+C nic nie da.

Why?

0

W JediVCL kontrolki tekstowe mają możliwość zablokowania operacji na schowku, radzę przeanalizować kod, bo tam jest metoda która działa na 100% (w końcu jak ktoś bardzo chce, to może sobie zmienić skróty systemowe, więc blokowanie Ctrl-C nie jest zbyt pewne).

0

Szymek: blokada Ctrl+C nic nie da.

Why?

Spróbuj zablokować w OnKeyDown. Ja spróbowałem i nic.

0

OnKeyPress:
if key=#3 then Key:=#0;

[dopisek] No to blokuj wszystkie skróty. Ja podałem tylko przykład.

0

OnKeyPress:
if key=#3 then Key:=#0;

Ja uzywam do kopiowania Ctrl+ Ins, zostało mi z TP. W takim przypadku- powyższy kod nie zadziała...

<font color="red"> #3 to właśnie Ctrl+C </span>
0

...probuje probuje i nic
Szymek zrobiłem jak napisałeś :

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#3 then Key:=#0;
end;

i ctrl+c działa jakby nigdy nic ,
dalem readOnly:=true ,
dawalem tez <font color="darkblue">if key=#99 then Key:=#0; //zeby zablokowac c </span>

i caly czas ctrl+c dziala ;-(

a może mialem tez jednoczesnie cos z tym popupmenu zrobic ??

help [glowa]

<font color="red">dopisane:
do jakiego klawisza odnosi sie #3 ?</span>

0

Ja to robiłem na TMemo. [wstyd]

0

Pozostając przy Ctrl+C... metoda pewno działająca, choć o jej elegancji nie ma nawet co wiele dyskutować...
Dodajemy RichEdit2 ->Visible :=false, i zapychamy schowek jego zawartością...
[code]
if key=#3 then begin
RichEdit2.Clear ;
RichEdit2.SelectAll;
RichEdit2.CopyToClipboard;
end;

[/code]

0

No to pozostaje jeszcze jeden problem:
jaki kod ACSII odpowiada za ctrl+ins ??

A moze ktos ma (albo wie gdzie znalezć) zestawienie wszystkich kodow acsii ??

0

Ja na różne komponenty nakładałem komponent bevel, ale nie wime czy on działa przy rich edit.

0

<font color="green">jaki kod ACSII odpowiada za ctrl+ins ?? </span>

Żaden kod, bo kody ASCII masz od 0 do 255, a to jest kombinacja klawiszy, więc nie wiem co chcesz zdziałać..

0

Pozostając przy Ctrl+C... metoda pewno działająca, choć o jej elegancji nie ma nawet co wiele dyskutować...
Dodajemy RichEdit2 ->Visible :=false, i zapychamy schowek jego zawartością...
[code]
if key=#3 then begin
RichEdit2.Clear ;
RichEdit2.SelectAll;
RichEdit2.CopyToClipboard;
end;

[/code]

Idiotyzm. Robienie niewidocznych komponentów w tle żeby coś osiągnąć to
najgorsza rzecz....
Wystarczy dodać Clipbrd do uses i w kodzie wpisać Clipboard.AsText:='';

[dopisane]
Tiger27: masz kiepski słownik. PODSTAWOWA definicja ze słownika profesora B. Dunaja: "słowo, zdanie, wypowiedź uznane za głupie, pozbawione sensu, niedorzeczne". Wspomniane przez ciebie znaczenie jest trzecie w kolejności...

0

<font color="red">jasek:

żaden "przezroczysty " komponent tu nic nie da. </span>

<font color="darkblue">DETOX:

[wklejone]
OooO napisał: jaki kod ACSII odpowiada za ctrl+ins ??
DETOX napisał: Żaden kod, bo kody ASCII masz od 0 do 255, a to jest kombinacja klawiszy, więc nie wiem co chcesz zdziałać..

Chce wyłączyć ctrl+ins tak samo jak wyłączyłem ctrl+c za pomoca #3
tzn stosujac kod my_nick (lub Tiger27 z drugim komponentem):

if key=#3 then Clipboard.AsText:=''; </span> <font color="green">//CO TU DAC ZAMIAST #3 </span> [???]

0

Idiotyzm. Robienie niewidocznych komponentów w tle żeby coś osiągnąć to najgorsza rzecz....
Wystarczy dodać Clipbrd do uses i w kodzie wpisać Clipboard.AsText:='';

idiotyzm-głęboki stopień upośledzenia umysłowego
my_nick Twoja odpowiedź miała sens i była ze wszech miar słuszna, jednak pierwszy wyraz o Tobie nie najlepiej świadczy.

Poza tym - jest prostsze rozwiązanie dot. schowka, ale ze względu na mój stan umysłu nie publikuję

0

Pochwalony! Sorki, że się do Wszego pomysłu wtrącę, lecz Clipbrd.AsText := '' też ma swoje wady. Co w przypadku, gdy ktoś ma już coś w schowku?? Najpierw w OnKeyDown jeszcze trzeba zawartość schowka gdzieś zapisać, do jakiejś zmiennej, a potem to tylko odczytać, np. w OnKeyUp.

{...}
procedure TForm1.STHOnKeyDown(...);
var
Zmienna: String;
{..}
Zmienna := ClipBrd.AsText;

i potem odczytać w OnKeyUp (to chyba nie powinno stwarzać problemu :P)

0

Ja tam wstawiam puste menu z visible na false, ktore zawiera skroty klawiaturowe, np. Ctrl+C i kopiowac sie juz nie da.

0

A, troche zle napisalem, bo menu, ktore wstawiam nie jest puste. Zawiera tyle pozycji, ile skrotow chce zablokowac. Np. Ctrl+C, Ctrl+A, itp.

0

Co w przypadku, gdy ktoś ma już coś w schowku??

Schowek chyba zamieni text, więc nie będzie tu żadnego problemu.
Zgadza się?

0

<font color="green">Co w przypadku, gdy ktoś ma już coś w schowku??
Schowek chyba zamieni text, więc nie będzie tu żadnego problemu.
Zgadza się? </span>

Ale tu chodzi o brutalną ingerencję programu w prace użytkownika.

0

Ale tu chodzi o brutalną ingerencję programu w prace użytkownika.

Aha ;-) Ale nawet, jak będzie brutalnie, to i tak schowek zmieni text :-P

0

jesli chodzi o CTRL+Insert:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
z:string;
begin
if (key=VK_INSERT) and (ssCtrl in Shift) then
begin
clipbrd.Clipboard.AsText:='';
end;
end;

0

A może po prostu RichEdit1.Enabled := False; :d

1 użytkowników online, w tym zalogowanych: 0, gości: 1