Ir para conteúdo
Fórum Script Brasil
  • 0

Tecla Errada, O Certo Seria: Key?


Guest simaops

Pergunta

Pessoal estou criando(tentando) meu programa de digitação, e estou com alguns problemas pros quais peço ajuda:

- Em memo colocado no form: chamo a 1ª lição no Memo1, que aparece: "asdfg asdfg...etc", a medida que digito a seleção passa para a próxima letra, isso já está pronto{com a ajuda do Camilo}; o problema é {sou iniciante}:

Quando digitar uma letra que não seja 'a', ou 's', or 'd', ou 'f', ou 'g', ou 'espaço':

= em um edit aparecer um contador + 1{nº de erros};

= em uma ShowMessage aparecer 'Você digitou' + tecla pressionada + 'o correto seria' + a tecla da vez;

= tudo isso usando 1 Memo, sem o uso de Edit.

Bom por enquanto é só, se alguém se dispor a me ajudar, atencipadamente agradeço.

Simaops

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Progr'amador, aí vai:

{$R *.dfm}

var

POS: integer;

procedure TForm1.btnIniciarClick(Sender: TObject);

begin

Memo1.Enabled:=true;

ActiveControl:=Memo1;

btnIniciar.Enabled:=False;

btnParar.Enabled:=True;

Memo1.Lines.Clear;

Memo1.Lines.LoadFromFile('UnL1.pas');

Memo1.SelStart:=0;

Memo1.SelLength:=1;

POS:=1;

end;

procedure TForm1.btnPararClick(Sender: TObject);

begin

btnParar.Enabled:=False;

btnIniciar.Enabled:=True;

Memo1.Enabled:=False;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

FontDialog1.Font:=memo1.Font; // inicializa a FontDialog com a font de Memo

If FontDialog1.Execute then

memo1.Font:=FontDialog1.Font

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if Key in [32..125] then

begin

Memo1.SelStart:=POS;

Memo1.SelLength:=1;

Inc(POS);

end

else

abort;

end;

procedure TForm1.Memo1Change(Sender: TObject);

var

S: string;

begin

Memo1.SelStart:=Length(Memo1.Text)-1;

Memo1.SelLength:=1;

s:=Memo1.SelText;

if Copy(Memo1.Text,Length(Memo1.Text),1)<>s then

begin

ShowMessage('Você errou o correto seria '+s);

end;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe-me se já leu esse pedido antes, é que estou ancioso pra resolvê-lo.

Bom, o problema AgorA é o seguinte:

no Memo com 'asdfg '

- se é pra teclar 'a' mas teclo 's' ou 'd,f,g, ' - funciona sem mostrar erro, só que deveria ser 'a'.

- se é pra teclar 'a' mas teclo 'q' ou outra tecla fora de 'asdfg ' - tudo bem mostra erro, mas, diz que o correto seria 's' (ao invez de 'a'), ou seja uma letra após a que deveria.

e com a ajuda de vocês já está assim (não repara o mau geito, é que sou novato).

Essa é a minha rotina, se puder acertá-la pra mim, agradeço imenssamente:

{$R *.dfm}

var

POS: integer;

procedure TDigitaSima.btnIniciarClick(Sender: TObject);

begin

Memo1.Enabled:=true;

ActiveControl:=Memo1;

btnIniciar.Enabled:=False;

Memo1.Lines.Clear;

Memo1.Lines.LoadFromFile('UnL1.pas');

Memo1.SelStart:=0;

Memo1.SelLength:=1;

POS:=1;

end;

procedure TDigitaSima.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if Key in [32..125] then

begin

Memo1.SelStart:=POS;

Memo1.SelLength:=1;

Inc(POS);

end

else

abort;

end;

procedure TDigitaSima.FormKeyPress(Sender: TObject; var Key: Char);

Var

S: string;

begin

Memo1.SelLength := 1;

S:= Memo1.SelText;

if not(Key in ['A','S','D','F','G','a','s','d','f','g',' ']) then

begin

ShowMessage('Você digitou '+key+' o correto seria '+s);

Key := #0;

end;

end;

end.

Essa é a rotina, se puder acertá-la pra mim, agradeço antecipadamente

obrigado a todos que já me ajudaram.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz assim (no evento OnKeyPress):

  if memo1.SelText<>key then
    if ansipos(key, memo1.Text)>0 then
        showmessage('Você digitou ' + key + ' o correto seria ' + memo1.SelText)
    else
        edit1.text := inttostr(strtoint(edit1.text)+1)
  else begin
     memo1.SelStart:=memo1.SelStart+1;
     memo1.SelLength := 1;
    end;
  key := #0;
E no evento FormCreate eu coloquei:
  memo1.SelStart := 0;
  memo1.SelLength := 1;

Supondo, é claro, que o texto "asdfg" já está na Memo1 (mas nada impede se usar o LoadFromFile() para carregar o texto e depois executar o código acima).

Se quiser, baixe o código aqui: http://www.graymalkin.globalhosts.com.br/stuff/Digi.zip

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Aeh Graymalkin, na mosca irmão, pulei de alegria biggrin.gif quando vi o código funcionando.

Obrigadão mesmo.

Pena que quando você tc uma tcl que não seja "asdfg " ou seja que já está escrita no Memo, não permite ShowMessage, apesar do contador funcionar, tentei mas não consegui, dá o erro na compilação: "Missing operator or semicolon"´.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...