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

Problemas com teclas


soluvel

Pergunta

bom pessoal eu to tendo alguns problemas com tecla...

eu fiz com que omeu programa ficasse apertando a tecla "i" "enter" "backspace" de meio a meio segundo quando eu clicava no botao de ativar o comando em cada um deles

so que tive problemas com a tecla insert, ela so funcionava uma vez.... alem disso eu testei tb com a tecla "caps lock", "scroll lock", etc e tb so funcionava uma vez............... já com a "delete" eu consegui que ela fica-se apertando de meio em meio segundo

tem algum problema com essas teclas?? ou eu usei errado

para o "i" "enter" "backspace" "delete"eu usei :

keybd_event ( 8, 0, 0, 0 );
keybd_event ( 13, 0, 0, 0 );
keybd_event ( 73, 0, 0, 0 );
keybd_event ( VK_DELETE, 0, 0, 0 );
já para o "capslock" e o 'Insert' eu usei:
keybd_event ( VK_CAPITAL, 0, 0, 0 );
keybd_event ( VK_INSERT, 0, 0, 0 );
e
keybd_event ( 45, 0, 0, 0 );
keybd_event ( 20, 0, 0, 0 );

alguém pode me ajuda?

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
so que tive problemas com a tecla insert, ela so funcionava uma vez.... alem disso eu testei tb com a tecla "caps lock", "scroll lock", etc e tb so funcionava uma vez............... já com a "delete" eu consegui que ela fica-se apertando de meio em meio segundo

keybd_event ( VK_DELETE, 0, 0, 0 );

para keybd_event ( 13, 0, 0, 0 ); voce deve usar keybd_event ( VK_RETURN, 0, 0, 0 );

veja um exemplo:

var
  Form1: TForm1;
  cont : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   keybd_event ( VK_RETURN, 0, 0, 0 );
   cont := cont + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Timer1.Enabled := true;
   edit1.SetFocus;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if key = #13 then
     Edit1.Text := 'Nº de vezes da tecla enter ' + inttostr(cont);
end;

Observe que o evento deve ocorrer em cima de um determinado componente do form .... neste exemplo o pressionamento da tecla enter ocorre no evento OnKeyPress do componente Edit1 e consequentemente o foco devera estar sobre ele para que funcione.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

a pera aew... que dizer que eu tb tenho que por o numero de vezes que a tecla vai ser apertada??

no caso se eu quisesse que a tecla insert ficasse apertando... mil vezes por meio em meio segundo, ia ficar mais o menos assim:

var
  Form1: TForm1;
  cont : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   keybd_event ( VK_INSERT, 0, 0, 0 );
   cont := cont + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Timer1.Enabled := true;
   edit1.SetFocus;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if key = #45 then
     Edit1.Text := '1000 ' + inttostr(cont);
end;

???

e outra coisa esse codigo e pra por dentro do relogio?

Editado por soluvel
Link para o comentário
Compartilhar em outros sites

  • 0

a pera aew... que dizer que eu tb tenho que por o numero de vezes que a tecla vai ser apertada??

Claro que não .. eu coloquei um contador dentro do timer só para mostrar que ele vai ficar apertando a tecla Enter a cada meio segundo indefinidamente.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   keybd_event ( VK_INSERT, 0, 0, 0 );
   cont := cont + 1;
end;
e outra coisa esse codigo e pra por dentro do relogio?
Não .. dentro do relogio ira a penas o comando: keybd_event ( VK_INSERT, 0, 0, 0 );
no caso se eu quisesse que a tecla insert ficasse apertando... mil vezes por meio em meio segundo, ia ficar mais o menos assim:
var
  Form1: TForm1;
  cont : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   keybd_event ( VK_INSERT, 0, 0, 0 );
   cont := cont + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Timer1.Enabled := true;
   edit1.SetFocus;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if cont <= 1000 then   // ficar inserindo 1000 vezes algum texto
        begin
           if key = #45 then
              Edit1.Text := 'Texto';
        end
     else
       Timer1.Enabled := false;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Voce deve ter mais de um componente no form para não dar erro.

experimente este exemplo:

var
  Form1: TForm1;
  cont : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   keybd_event ( VK_RETURN, 0, 0, 0 );
   cont := cont + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Timer1.Enabled := true;
   edit1.SetFocus;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if cont <= 10 then   // ficar inserindo 10 vezes algum texto
        begin
           if key = #13 then
              Edit1.Text := Edit1.Text + ' Texto;';
        end
     else
       Timer1.Enabled := false;

     Edit1.Refresh;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

mais assim nesse codigo que voce boto, tem parada de por texto no edit.... e o que eu quero e tipow um so que fique apertando sem para o insert meu codigo fico assim

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
keybd_event ( VK_INSERT, 0, 0, 0 );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;

end.

lembrando que eu usei esse mesmo codigo com a tecla 'enter' 'i' e 'backspace'

mas so com o 'insert' que não ta funcionando, o comando so acontece uma vez e não de meio em meio segundo como os outros..

vlw abraço

Link para o comentário
Compartilhar em outros sites

  • 0

keybd_event ( VK_INSERT, 0, 0, 0 );

mas so com o 'insert' que não ta funcionando, o comando so acontece uma vez e não de meio em meio segundo como os outros..

existem outros parametros que voce deve conhecer

The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function.

VOID keybd_event(

BYTE bVk, // virtual-key code

BYTE bScan, // hardware scan code

DWORD dwFlags, // flags specifying various function options

DWORD dwExtraInfo // additional data associated with keystroke

);

Parameters

bVk

Specifies a virtual-key code. The code must be a value in the range 1 to 254.

bScan

Specifies a hardware scan code for the key.

dwFlags

A set of flag bits that specify various aspects of function operation. An application can use any combination of the following predefined constant values to set the flags:

Value Meaning

KEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).

KEYEVENTF_KEYUP If specified, the key is being released. If not specified, the key is being depressed.

dwExtraInfo

Specifies an additional 32-bit value associated with the key stroke.

Return Values

This function has no return value.

Remarks

Although keybd_event passes an OEM-dependent hardware scan code to Windows, applications should not use the scan code. Windows converts scan codes to virtual-key codes internally and clears the up/down bit in the scan code before passing it to applications.

An application can simulate a press of the PRINTSCREEN key in order to obtain a screen snapshot and save it to the Windows clipboard. To do this, call keybd_event with the bVk parameter set to VK_SNAPSHOT, and the bScan parameter set to 0 for a snapshot of the full screen or set bScan to 1 for a snapshot of the active window.

keybd_event(VK_INSERT,0,KEYEVENTF_KEYUP,0);

abraço

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...