Impedir Ctrl C

Delphi

07/04/2006

Eu já tentei o seguinte para impedir que algo seja copiado do form
No OnKeyDown do form coloquei
If (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then
1) Key := 0
2) KeyBoard.AsText := ´´
3) SetKeyBoard(NovoKeyBoard) dando valor ao novokeyboard
e nenhum deles funcionou, alguém sabe como impedir que o usuário copie algo do form?


Edilcimar

Edilcimar

Curtidas 0

Respostas

Paullsoftware

Paullsoftware

07/04/2006

tenta mudar
If (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then
para
if (Shift = [ssCtrl]) and (Key = Ord(´C´)) then 



GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Paulo, continuou sem funcionar


GOSTEI 0
Paullsoftware

Paullsoftware

07/04/2006

então tente assim:

Uses ClipBord


procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = Ord(´C´)) then
 begin
 Clipboard.Clear;
 end;
end;


dessa forma sempre que alguém precionar essa combinação dentro do seu texto, vai limpar a area de transferencia :wink:


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Apesar de haver esquecido de escrever, o Clear eu também tentei e não funcionou!


GOSTEI 0
Paullsoftware

Paullsoftware

07/04/2006

isso é estranho aqui funcionu normal...

vamos fazer um teste, inicie uma nova aplicação coloque nela um Edit, mude a propriedade do KeyPreview do form para TRUE e coloque esse codigo:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 
begin 
if (Shift = [ssCtrl]) and (Key = Ord(´C´)) Or (Shift = [ssCtrl]) and (Key = Ord(´V´)) then 
 begin 
// ClipBoard.AsText := ´´;
 Clipboard.Clear; 
 end; 
end;


seleione o texto do Edit e tente copiar pra ver... aqui tá funcionando normal :?


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Eu já tinha feito isto e não funciona, se eu colocar
f (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then
showmessagew(´funciona´)
a mensagem aparece, porém em nenhum dos casos eu consigo evitar que o texto seja copiado para o clipboard ou apagar/trocar o conteúdo do mesmo, teste usando o Notepad e vai ver que consegue copiar o texto para o mesmo


GOSTEI 0
Paullsoftware

Paullsoftware

07/04/2006

Eu já tinha feito isto e não funciona, se eu colocar f (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then showmessagew(´funciona´) a mensagem aparece, porém em nenhum dos casos eu consigo evitar que o texto seja copiado para o clipboard ou apagar/trocar o conteúdo do mesmo, teste usando o Notepad e vai ver que consegue copiar o texto para o mesmo


vc fez o teste que pedi pra fazer copiando e colando meu código em uma nova aplicação??
aqui uso Delphi 7 e funciona perfeitamente...


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

eu uso D7, e fiz o teste com o Notepad, conforme informei, e continua copiando do form para o Notepad


GOSTEI 0
Marco Salles

Marco Salles

07/04/2006

a uses correta e esta [b:1dc97c4058]Clipbrd[/b:1dc97c4058]

penso que ao inves de evitar que copiem , posso pensar em permitem que colem o vazio

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  Clipboard.AsText:=´´;
end;



GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Oi Marcos, grato, mas tudo que é combinação possível do que está abaixo eu já tentei e não funciona, para mim tanto faz não permitir que copiem quanto deixar copiar em branco ou um texto diferente
procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
Var
Copia : TClipBoard;
begin
Copia := ClipBoard;
Copia.AsText := ´´;
If (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then
// If (Shift = [ssCtrl]) and (Chr(Key) in [´C´, ´c´]) then
Begin
// showmessage(´funciona´); // esta é a única linha que funciona, nenhuma das outras surtem efeito
// key := 0;
// SetClipBoard(Copia);
// ClipBoard.AsText := ´´;
//ClipBoard.Clear;
End;
end;


GOSTEI 0
Marco Salles

Marco Salles

07/04/2006

amigo edicilmar , mas o codigo abaixo funciona

a uses correta e esta[b:7ba6184178] Clipbrd [/b:7ba6184178] penso que ao inves de evitar que copiem , posso pensar em permitem que colem o vazio Código: procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin Clipboard.AsText:=´´; end;



[b:7ba6184178]voce esta colocando KeyPreviewn do form para true[/b:7ba6184178] ????


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Sim o keypreview está true, inclusive se não estivesse o showmessage não funcionaria! A única diferença é que estou fazendo no onkeydown e vc fez no onkeypress, vou tentar no mesmo


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

também não funcionou no onkeypress


GOSTEI 0
Marco Salles

Marco Salles

07/04/2006

as ´coisas´ acontecem depos do evento onkeydown


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Valeu Marcos, troquei o efeito para o onKeyUp e funcionou!


GOSTEI 0
Marco Salles

Marco Salles

07/04/2006

sobre aquela opção do praticular , testei aqui e funcionou

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
  Clipboard.AsText:=´´;
end;


pode ate armazenar o texo , antes numa string e retornao o valor no surgimento do form (OnActive)


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Ok, mas se pegar
If (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then
ClipBoard.Clear;
no onKeyUp, também funciona


GOSTEI 0
Paullsoftware

Paullsoftware

07/04/2006

Ok, mas se pegar If (ssCtrl in Shift) and (Chr(Key) in [´C´, ´c´]) then ClipBoard.Clear; no onKeyUp, também funciona


:shock: :shock: :shock: desculpa, mais o que foi que eu te falei aqui:
[quote:539cea7a45]isso é estranho aqui funcionu normal... vamos fazer um teste, inicie uma nova aplicação coloque nela um Edit, mude a propriedade do KeyPreview do form para TRUE e coloque esse codigo: Código: procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Shift = [ssCtrl]) and (Key = Ord(´C´)) Or (Shift = [ssCtrl]) and (Key = Ord(´V´)) then begin // ClipBoard.AsText := ´´; Clipboard.Clear; end; end; seleione o texto do Edit e tente copiar pra ver... aqui tá funcionando normal
[/quote:539cea7a45] :lol: :lol: :lol:

valeu marcos pela correção!
[quote:539cea7a45=´Marcos Salles´]
a uses correta e esta Clipbrd penso que ao inves de evitar que copiem , posso pensar em permitem que colem o vazio
[/quote:539cea7a45] :roll:


GOSTEI 0
Edilcimar

Edilcimar

07/04/2006

Desculpe paul, mas é que eu não prestei atenção que vc tinha trocado de KEYDOWN para KEYUP


GOSTEI 0
Paullsoftware

Paullsoftware

07/04/2006

Desculpe paul, mas é que eu não prestei atenção que vc tinha trocado de KEYDOWN para KEYUP


não esquenta! :wink:


GOSTEI 0
POSTAR