Fórum edit - travar #241559
05/07/2004
0
Tenho um campo edit que não pode ser alterado durante a digitação, ou seja se errar o usuário terá que digitar , digo, jjjj. Não estou conseguindo travar as teclas delete, shift+delete, e seta de retorno. Alguem pode me auxiliar ???
Mariah
Mariah
Curtir tópico
+ 0Posts
05/07/2004
Nildo
Gostei + 0
05/07/2004
Mariah
Porque o usuário pode escrever neste campo, mas sempre complementando nunca alterando algo que já foi escrito. Ex:
Jose diz que sente dores fortes no pe direito, digo, no pe esquerdo.
Não posso permitir que retorne com backspace, nem seta e não use o delete.
Gostei + 0
05/07/2004
Nildo
Olha, eu vou te ensinar uma coisa que eu costumo fazer nesses casos de descobrir as teclas.
Lá no Edit, no evento OnKeyDown você coloca assim:
ShowMessage( IntToStr( Key ) );
Dae você executa seu programa, clica no Edit e aperta a tecla BAckspace e anota o número que vai aparecer. Faça isso com as teclas DELETE e SETAs. Agora volta na programação, e coloque isso no evento OnKeyDown:
if Key in [ num_da_1_tecla, num_da_2_tecla, num_da_3_tecla ] then Key := 0;
Isto é, quando o usuário apertar alguma das teclas que você definiu no IF, não vai acontecer nada, a tecla será cancelada.
Gostei + 0
05/07/2004
Sapienza
Ao invés de pensar em travar as teclas, pense em utilizar no evento da Edit OnChange uma rotina capaz de verificar se o conteúdo da Edit é complementar ao original, vc pode pensar das segunte forma:
1- Quando o form for aberto, ou quando a tabela fou lida, vc guarda numa variável o conteúdo que não pode ser alterado (vou chamar de cont_original), quando a edit for alterada vc faz a comparação, se estiver errado, vc ´conserta´, teste esse código:
...
var
cont_original: string;
...
procedure TForm1.Form1OnShow(Sender: TObject);
begin
cont_original:=Edit1.Text;
cont_original:=Table1.FieldByName(´Nome_do_Campo´).AsString;
end;
...
procedure TForm1.Edit1OnChange(Sender: TObject);
S
var
S: String;
begin
S:=Copy(Edit1.Text,0,Length(cont_original));
IF S<>cont_original then
IF Length(Edit1.Text)>Length(S) then
Edit1.Text:=cont_original+Copy(Edit1.Text,Length(cont_original)
else
Edit1.Text:=cont_original;
+1,Length(Edit1.Text));
end;
...
end.
Desta forma vc irá ´prender´ a Edit, sempre o conteúdo da Edit1 terá o valor da variável cont_original. Não testei o código, mas acho que deve funcionar.
Abraços...
Gostei + 0
05/07/2004
Celo.steffen
If (Key = Vk_Delete) Or (Vk_Ereof) Then
Key := Vk_End;
Não testei este código, mas se tiver algum problema dá um toque.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)