Jump to content
Fórum Script Brasil
  • 0

Tecla Errada, O Certo Seria: Key?


Guest simaops

Question

Guest simaops

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 to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

  • 0
Guest simaops

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 to comment
Share on other 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 to comment
Share on other sites

  • 0
Guest Simaops

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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...