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

(Resolvido) Teclado Virtual


Fabiomiojo

Pergunta

opa tudo bem gente!!

to vindo aqui mais uma vez pra pedir socorro pra v6!

bom to criando um programa que sera utilizado em um computador touch screen para adminstrar residencias

e nesse programa o usuario ira utilizar um teclado virtual que montei para digitar dados.

estou com duvida, como faço a tecla de BackSpace no meu teclado virtual apagar as letras.(como a tecla normal faz no pc).

as demais teclas estão funcionando certinho! so não sei como faço o botão backspace. ah esse teclado é integrado ao programa, ou seja, o usuario não tera de abrir o teclado virtual do windows ok.

onde os dados estão sendo inseridos é um MEMO.

se alguém poder me dar uma ajuda nisso! :D

grato.

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

6 respostass a esta questão

Posts Recomendados

  • 0
estou com duvida, como faço a tecla de BackSpace no meu teclado virtual apagar as letras.(como a tecla normal faz no pc).

Para saber se a tecla BackSpace foi pressionada

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
  if Key = VK_BACK then
    ShowMessage('A tecla Backspace foi pressionada');
end;
Simular o pressionamento da tecla BackSpace
procedure TForm1.Button1Click(Sender: TObject);
var
  KeyState: TKeyboardState; 
begin
  GetKeyboardState(KeyState);   // testar o estado do teclado


  if(KeyState[VK_BACK ] = 0) then
    begin
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
    end
  else
    begin
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
    end;
end;

OBS: Veja se funciona

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Para saber se a tecla BackSpace foi pressionada

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
  if Key = VK_BACK then
    ShowMessage('A tecla Backspace foi pressionada');
end;
Simular o pressionamento da tecla BackSpace
procedure TForm1.Button1Click(Sender: TObject);
var
  KeyState: TKeyboardState; 
begin
  GetKeyboardState(KeyState);   // testar o estado do teclado


  if(KeyState[VK_BACK ] = 0) then
    begin
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
    end
  else
    begin
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
    end;
end;

OBS: Veja se funciona

não funciono ! :blush:

Link para o comentário
Compartilhar em outros sites

  • 0
não funciono !

Amigo, não achei que voce ia testar o código ao pé da letra, ou seja, sem fazer as modificações necessarias

Te passei a base do que seria necessario para que voce pudesse modificar o código para atuar num teclado virtual

Veja o exemplo:

No form com apenas um botão simulando a tecla Backspace e um Edit, ficaria dessa forma:

procedure TForm1.Button1Click(Sender: TObject);
var
   KeyState: TKeyboardState;
   Aux : Integer;
   Posicao : Integer;
begin
   GetKeyboardState(KeyState);   // testar o estado do teclado
   Edit1.SetFocus;
   Posicao := length(Edit1.Text);
   Edit1.SelStart := Posicao;

   if(KeyState[VK_BACK ] = 0) then
    begin
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Edit1.SelStart := Posicao-1;
      Edit1.SelLength := length(Edit1.Text);
    end
   else
    begin
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
    end;
end;

Da mesma forma que a tecla Backspace funciona, ao clicar no botão que simula a tecla Backspace, os caracteres serão apagados um a um.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

ah consegui arumar aqui jhonas!

o que eu tinha feito de errado era que quando eu escrevia algo no teclado o foco do memo saia e ia para o botão

só coloquei assim e funciono

procedure TForm1.Button1Click(Sender: TObject);
var
  KeyState: TKeyboardState;
begin
memo1.SetFocus; // coloquei para setar o foco ai funciono
GetKeyboardState(KeyState);   // testar o estado do teclado


  if(KeyState[VK_BACK ] = 0) then
    begin
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Keybd_Event(VK_BACK , 1, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
    end
  else
    begin
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
      Keybd_Event(VK_BACK , 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
    end;
end;

obrigado jhonas valeu pela ajuda :D

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, bom dia. E desculpem por adentrar uma questão que já está resolvida. Acontece que, testando o exemplo que o Jonas passou, este funcionou. Então, como estou com um problema vou expô-lo e tentar ver se consigo resolver:

Tenho um Dbgrid (delphi )  -- num tablet, Lenovo, cujo teclado virtual não tem as setas para baixo ou para cima. Estou tentando colocar dois botões ao lado da Dbgrid, a fim de que o usuário possa "navega"     entre as células da grid ----  a fim de incluir dados nos campos  ----- faz dois dias que estou apanhando, não encontro literatura na net, que possa ajudar-me. Obrigado.

Nota : seria mesmo apenas os códigos para que, ao clicar nos botôes ( estando o cursor dentro da dbgrid  ) ---- esses simulassem seta para baixo ou para cima ----   a setas para os lados esquerdo e direito eu posso usar do próprio teclado virtual do tablet ---- porém se for o caso eu coloco 4 botões, creio que ficará até mais prático.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Nota : seria mesmo apenas os códigos para que, ao clicar nos botôes ( estando o cursor dentro da dbgrid  ) ---- esses simulassem seta para baixo ou para cima ----   a setas para os lados esquerdo e direito eu posso usar do próprio teclado virtual do tablet ---- porém se for o caso eu coloco 4 botões, creio que ficará até mais prático.

Lista de Virtual Keys

VK_LBUTTON botão esquerdo do mouse
VK_RBUTTON Botão direito do mouse
VK_CANCEL Control + Break
VK_MBUTTON botão do meio
VK_BACK tecla Backspace
VK_TAB tecla Tab
VK_CLEAR tecla Clear
VK_RETURN tecla Enter
VK_SHIFT tecla Shift
VK_CONTROL tecla Ctrl
VK_MENU tecla Alt
VK_PAUSE tecla Pause
Caps Lock VK_CAPITAL chave
VK_KANA Usado com IME
VK_HANGUL Usado com IME
VK_JUNJA Usado com IME
VK_FINAL Usado com IME
VK_HANJA Usado com IME
VK_KANJI Usado com IME
VK_CONVERT Usado com IME

VK_NONCONVERT Usado com IME
VK_ACCEPT Usado com IME
VK_MODECHANGE Usado com IME
VK_ESCAPE tecla Esc.
VK_SPACE barra de espaço
VK_PRIOR tecla Page Up
VK_NEXT tecla Page Down
VK_END tecla End
VK_HOME tecla Home
VK_LEFT esquerda Seta
VK_UP tecla Seta para cima
VK_RIGHT Seta para Direita
VK_DOWN Seta para baixo
VK_SELECT Selecione chave
VK_PRINT tecla Print (teclado específico)
VK_EXECUTE Execute-chave
VK_SNAPSHOT tecla Print Screen
VK_INSERT tecla Insert
VK_DELETE tecla Delete
VK_HELP Ajuda chave

Exemplo em Delphi

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, Buttons;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Query1: TQuery;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   KeyState: TKeyboardState;
begin
   // SIMULAR PRESSIONAMENTO DA TECLA PARA CIMA
   GetKeyboardState(KeyState);   // testar o estado do teclado

   if(KeyState[VK_UP ] = 0) then
      Keybd_Event(VK_UP , 1, KEYEVENTF_EXTENDEDKEY or 0, 0)
   else
      Keybd_Event(VK_UP , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
var
   KeyState: TKeyboardState;
begin
   // SIMULAR PRESSIONAMENTO DA TECLA PARA BAIXO
   GetKeyboardState(KeyState);   // testar o estado do teclado

   if(KeyState[VK_DOWN ] = 0) then
      Keybd_Event(VK_DOWN , 1, KEYEVENTF_EXTENDEDKEY or 0, 0)
   else
      Keybd_Event(VK_DOWN , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);


end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
var
   KeyState: TKeyboardState;
begin
   // SIMULAR PRESSIONAMENTO DA TECLA PARA DIREITA
   GetKeyboardState(KeyState);   // testar o estado do teclado

   if(KeyState[VK_RIGHT ] = 0) then
      Keybd_Event(VK_RIGHT , 1, KEYEVENTF_EXTENDEDKEY or 0, 0)
   else
      Keybd_Event(VK_RIGHT , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);

end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
var
   KeyState: TKeyboardState;
begin
   // SIMULAR PRESSIONAMENTO DA TECLA PARA ESQUERDA
   GetKeyboardState(KeyState);   // testar o estado do teclado

   if(KeyState[VK_LEFT ] = 0) then
      Keybd_Event(VK_LEFT , 1, KEYEVENTF_EXTENDEDKEY or 0, 0)
   else
      Keybd_Event(VK_LEFT , 0, KEYEVENTF_EXTENDEDKEY or 0, 0);


end;

end.

 

OBS: o cursor estando dentro do DBGrid, voce poderá movimentá-lo pelos botões

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,8k
×
×
  • Criar Novo...