edit - travar
Olá pessoal,
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
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
Curtidas 0
Respostas
Nildo
05/07/2004
Porque não usa a propriedade ENABLED?
GOSTEI 0
Mariah
05/07/2004
Porque não usa a propriedade ENABLED?
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
Nildo
05/07/2004
Ahh entendi!
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:
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:
Isto é, quando o usuário apertar alguma das teclas que você definiu no IF, não vai acontecer nada, a tecla será cancelada.
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
Sapienza
05/07/2004
Não sei exatamente a finalidade e a dimensão disso, mas vou dar algumas idéias para auxiliar.
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...
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
Celo.steffen
05/07/2004
No evento OnKey do Edit você pode Testar a tecla usada e atribuir outra tecla para o que foi feito:
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.
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