Bem vindo ao LifeGames Demo
Cadastre-se agora para ter acesso a todos os nossos recursos. Uma vez cadastrado e logado, você será capaz de criar tópicos, postar respostas a tópicos já existentes, a reputação de seus companheiros, começar seu próprio mensageiro privado, atualizações de status post, gerir o seu perfil e muito mais. Esta mensagem será removida assim que tiver logado.
Entrar Cadastre-se


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 Criando teclado virtual no Delphi em Ter Fev 05, 2013 10:46 am

Moedas Moedas : 278
Mensagens Mensagens : 1177
Idade Idade : 19
Humor Humor : Forever Alone T.T
Reputação Reputação : 28
Quebra de regras:
0 / 1000 / 100

RodrigoNunes

Admin

Admin

[Você precisa estar registrado e conectado para ver esta imagem.]

Código do Teclado Virtual em Delphi
Spoiler:
Código:

unit uni_DDTecladoVirtual;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, StdCtrls;
type
TForm2 = class(TForm)
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton37: TSpeedButton;
SpeedButton38: TSpeedButton;
SpeedButton39: TSpeedButton;
SpeedButton50: TSpeedButton;
SpeedButton51: TSpeedButton;
SpeedButton52: TSpeedButton;
btnBackSpace: TSpeedButton;
SpeedButton57: TSpeedButton;
SpeedButton58: TSpeedButton;
SpeedButton60: TSpeedButton;
SpeedButton61: TSpeedButton;
SpeedButton63: TSpeedButton;
SpeedButton64: TSpeedButton;
SpeedButton65: TSpeedButton;
SpeedButton66: TSpeedButton;
btnReturn: TSpeedButton;
btnSpace: TSpeedButton;
btnCaps: TSpeedButton;
btnShift: TSpeedButton;
SpeedButton20: TSpeedButton;
imgLed: TImage;
SpeedButton21: TSpeedButton;
SpeedButton29: TSpeedButton;
imgShift: TImage;
SpeedButton30: TSpeedButton;
SpeedButton31: TSpeedButton;
SpeedButton32: TSpeedButton;
SpeedButton33: TSpeedButton;
SpeedButton34: TSpeedButton;
SpeedButton35: TSpeedButton;
SpeedButton36: TSpeedButton;
SpeedButton47: TSpeedButton;
SpeedButton48: TSpeedButton;
Label1: TLabel;
procedure SpeedButton37Click(Sender: TObject);
procedure btnSpaceClick(Sender: TObject);
procedure btnBackSpaceClick(Sender: TObject);
procedure SpeedButton20Click(Sender: TObject);
procedure btnCapsClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnShiftClick(Sender: TObject);
procedure SpeedButton21Click(Sender: TObject);
procedure SpeedButton29Click(Sender: TObject);
procedure btnReturnClick(Sender: TObject);
procedure SpeedButton61Click(Sender: TObject);
procedure SpeedButton66Click(Sender: TObject);
procedure SpeedButton58Click(Sender: TObject);
procedure SpeedButton30Click(Sender: TObject);
procedure SpeedButton31Click(Sender: TObject);
procedure SpeedButton32Click(Sender: TObject);
procedure SpeedButton33Click(Sender: TObject);
procedure SpeedButton34Click(Sender: TObject);
procedure SpeedButton35Click(Sender: TObject);
procedure SpeedButton36Click(Sender: TObject);
procedure SpeedButton47Click(Sender: TObject);
procedure SpeedButton48Click(Sender: TObject);
procedure Label2Click(Sender: TObject);
private
{ Private declarations }
//variaveis
MyHandle : THandle;
HandleMaeFocus : THandle;
HandleFilhaFocus : THandle;
altState : boolean;
shiftState : boolean;
vsPath : string;
//metodos
procedure processLetter(letra: char);
procedure trataJanelas;
procedure processSpecialKeys(scanCode: Integer);
procedure SetCapsLock(State: boolean);
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{Construtor do teclado virtual}
//============================================================================//
procedure TForm2.FormCreate(Sender: TObject);
//============================================================================//
begin
//Estado inicial da tecla alt.
altState := false;
//Estado inicial da tecla shift
shiftState := false;
vsPath := ExtractFilePath( Application.ExeName );
end;
procedure TForm2.Label2Click(Sender: TObject);
begin
end;
{Método responsável pela criação do símbolo do dolar}
//============================================================================//
procedure TForm2.SpeedButton20Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(52, 0, 0, 0);
keybd_event(52, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo arroba}
//============================================================================//
procedure TForm2.SpeedButton21Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(50, 0, 0, 0);
keybd_event(50, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo de interrogação}
//============================================================================//
procedure TForm2.SpeedButton29Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(193, 0, 0, 0);
keybd_event(193, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável por colocar as aspas nas palavras.}
//============================================================================//
procedure TForm2.SpeedButton30Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(192, 0, 0, 0);
keybd_event(192, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável para colocar o acento circunflexo nas palavras.}
//============================================================================//
procedure TForm2.SpeedButton31Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(222, 0, 0, 0);
keybd_event(222, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável por colocar Crase nas palavras.}
//============================================================================//
procedure TForm2.SpeedButton32Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(219, 0, 0, 0);
keybd_event(219, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo cerquilha.}
//============================================================================//
procedure TForm2.SpeedButton33Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(51, 0, 0, 0);
keybd_event(51, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo de adição.}
//============================================================================//
procedure TForm2.SpeedButton34Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(187, 0, 0, 0);
keybd_event(187, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo underline.}
//============================================================================//
procedure TForm2.SpeedButton35Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(189, 0, 0, 0);
keybd_event(189, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo de porcentagem.}
//============================================================================//
procedure TForm2.SpeedButton36Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(53, 0, 0, 0);
keybd_event(53, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Método principal processa todas as letras e números.}
//============================================================================//
procedure TForm2.SpeedButton37Click(Sender: TObject);
//============================================================================//
var
btnValue : string;
valueChar : char;
begin
btnValue := TSpeedButton(Sender).Caption;
valueChar := btnValue[1];
processLetter(valueChar);
end;
{Método responsável por colocar os dois pontos.}
//============================================================================//
procedure TForm2.SpeedButton47Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Segura o Shift
keybd_event(VK_SHIFT, 0, 0, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(191, 0, 0, 0);
keybd_event(191, 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
{Finaliza o teclado virtual.}
//============================================================================//
procedure TForm2.SpeedButton48Click(Sender: TObject);
//============================================================================//
begin
self.Close;
end;
{Método responsável por colocar o acento agudo.}
//============================================================================//
procedure TForm2.SpeedButton58Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Processa o valor da tecla baseado no scanCode.
keybd_event(219, 0, 0, 0);
keybd_event(219, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável por colocar o acento til.}
//============================================================================//
procedure TForm2.SpeedButton61Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Processa o valor da tecla baseado no scanCode.
keybd_event(222, 0, 0, 0);
keybd_event(222, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela criação do símbolo de Contra barra.}
//============================================================================//
procedure TForm2.SpeedButton66Click(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Processa o valor da tecla baseado no scanCode.
keybd_event(193, 0, 0, 0);
keybd_event(193, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável por tratar o foco das janelas.}
//============================================================================//
procedure TForm2.trataJanelas;
//============================================================================//
begin
//Interrompe a aplicacao para que o windows possa processar as mensagens.
Application.HandleMessage;
//Handle da janela do teclado
MyHandle := FindWindow(‘TForm2′,nil);
if GetActiveWindow = MyHandle then
HandleMaeFocus := GetNextWindow(MyHandle,GW_HWNDNEXT);
Sendmessage(HandleFilhaFocus,WM_SETFOCUS,0,0);
SetActiveWindow(HandleFilhaFocus);
end;
{Método responsável pela execução do backspace.}
//============================================================================//
procedure TForm2.btnBackSpaceClick(Sender: TObject);
//============================================================================//
begin
//Backspace 8
processSpecialKeys(8);
end;
{Método responsável pela execução do capslock.}
//============================================================================//
procedure TForm2.btnCapsClick(Sender: TObject);
//============================================================================//
begin
if altState = true then
begin
SetCapsLock(false);
altState := false;
imgLed.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledoff.bmp’);
end
else
begin
SetCapsLock(true);
altState := true;
imgLed.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledon.bmp’);
end;
end;
{Método responsável pela execução do enter.}
//============================================================================//
procedure TForm2.btnReturnClick(Sender: TObject);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Processa o valor da tecla baseado no scanCode.
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável pela execução do shift.}
//============================================================================//
procedure TForm2.btnShiftClick(Sender: TObject);
//============================================================================//
begin
if shiftState = true then
begin
if altState = true then begin
SetCapsLock(false);
imgLed.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledoff.bmp’);
altState := false;
end;
shiftState := false;
imgShift.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledoff.bmp’);
end
else
begin
if altState = true then begin
SetCapsLock(false);
imgLed.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledoff.bmp’);
altState := false;
end;
shiftState := true;
imgShift.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledon.bmp’);
end;
end;
{Método responsável pela execução do espaço.}
//============================================================================//
procedure TForm2.btnSpaceClick(Sender: TObject);
//============================================================================//
begin
//Space Bar 32
processSpecialKeys(32);
end;
{
Método responsável para enviar a letra informada
para o software em uso.
}
//============================================================================//
procedure TForm2.processLetter(letra: char);
//============================================================================//
var
layoutKeyboard : HKL;
Key : integer;
begin
//Trata o foco das janelas.
trataJanelas;
//Segura o Shift
if shiftState = true then
keybd_event(VK_SHIFT, 0, 0, 0);
layoutKeyboard := GetKeyboardLayout(0);
Key := VkKeyScanEx(letra,layoutKeyboard);
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
keybd_event(LoByte(Key), 0, 0, 0);
keybd_event(LoByte(Key), 0, KEYEVENTF_KEYUP, 0);
//Solta o shift
if shiftState = true then begin
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
shiftState := false;
imgShift.Picture.LoadFromFile(vsPath + ‘..\pas\images\ledoff.bmp’);
end;
end;
{Método responsável por processar os caracters especiais do teclado.}
//============================================================================//
procedure TForm2.processSpecialKeys(scanCode: Integer);
//============================================================================//
begin
//Trata o foco das janelas.
trataJanelas;
//Caso seja um edit prepara o cursor
keybd_event(39, 0, 0, 0);
keybd_event(39, 0, KEYEVENTF_KEYUP, 0);
//Processa o valor da tecla baseado no scanCode.
keybd_event(scanCode, 0, 0, 0);
keybd_event(scanCode, 0, KEYEVENTF_KEYUP, 0);
end;
{Método responsável por Ligar e Desligar o capslock do teclado virtual.}
//============================================================================//
procedure TForm2.SetCapsLock(State: boolean);
//============================================================================//
begin
if (State and ((GetKeyState(VK_CAPITAL) and 1) = 0)) or
((not State) and ((GetKeyState(VK_CAPITAL) and 1) = 1)) then
begin
keybd_event(VK_CAPITAL, $45, KEYEVENTF_EXTENDEDKEY or 0, 0);
keybd_event(VK_CAPITAL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;
end;
end.
<p style="text-align: justify;">

Principais ScanCodes para serem utilizados no Teclado Virtual

Letras Minúsculas
Código:

a – 65
b – 66
c – 67
d – 68
e – 69
f – 70
g – 71
h – 72
i – 73
j – 74
k – 75
l – 76
m – 77
n – 78
o – 79
p – 80
q – 81
r – 82
s – 83
t – 84
u – 85
v – 86
w – 87
x – 88
y – 89
z – 90

Nibuscuklas
O código é o mesmo da maiuscula, a diferença é que o botão shift esta como pressionado
Código:
A – 65 Shift
B – 66 Shift
C – 67 Shift
D – 68 Shift
E – 69 Shift
F – 70 Shift
G – 71 Shift
H – 72 Shift
I – 73 Shift
J – 74 Shift
K – 75 Shift
L – 76 Shift
M – 77 Shift
N – 78 Shift
O – 79 Shift
P – 80 Shift
Q – 81 Shift
R – 82 Shift
S – 83 Shift
T – 84 Shift
U – 85 Shift
V – 86 Shift
W – 87 Shift
X – 88 Shift
Y – 89 Shift
Z – 90 Shift

Números

Código:

0 – 48
1 – 49
2 – 50
3 – 51
4 – 52
5 – 53
6 – 54
7 – 55
8 – 56
9 – 57

Símbolos
Código:
) – 48 Shift
! – 49 Shift
@ – 50 Shift
# – 51 Shift
$ – 52 Shift
% – 53 Shift
^ – 54 Shift
& – 55 Shift
* – 56 Shift
( – 57 Shift

Dígitos no Teclado numérico (Number Pad) com Num Lock Ligado
key – scan code
Código:

0 – 96
1 – 97
2 – 98
3 – 99
4 – 100
5 – 101
6 – 102
7 – 103
8 – 104
9 – 105

Botões Especias
Ao pressionar o botão shift com o Num Lock ligado desliga o Num Lock, ao passo que segurar pressionado o botão shift terá uma ação diferente. Assim, pressionar o shift+1 no teclado numérico (com o Num Lock ligado), terá a ação do botão “End” veja os principais abaixo.
Botões no Teclado Numérico com o Num Lock desligado.

key – scan code
Código:
e
5 – 12
PgUp – 33
PgDn – 34
End – 35
Home – 36
Left Arrow – 37
Up Arrow – 38
Right Arrow – 39
Down Arrow – 40
Ins – 45
Del – 46

Pontuação
key scan code
Código:

) 48 Shift
! 49 Shift
@ 50 Shift
# 51 Shift
$ 52 Shift
% 53 Shift
^ 54 Shift
& 55 Shift
* 56 Shift
( 57 Shift
* on Num Pad 106
+ on Num Pad 107
- on Num Pad 109
. on Num Pad 110
/ on Num Pad 111
[ 219
{ 219 Shift
] 221
} 221 Shift
| Pipe 220 Shift
\ 220
; 186
: 186 Shift
= 187
+ on Keyboard 187 Shift
, 188
< 188 Shift
- 189
_ Underscore 189 Shift
. on Keyboard 190
> 190 Shift
/ on Keyboard 191
? 191 Shift
` Reverse Quote 192
~ 192 Shift
\ 220
‘ Single Quote 222
" 222 Shift

Caracteres Invisíveis
Código:

Backspace 8
Tab 9
5 on Num Pad w/ Num Lock off 12
Enter (carriage return) 13
Shift only 16
Ctrl only 17
Alt only 18
Pause / Break 19
Caps Lock 20
Escape 27
Space Bar 32
Page Up 33
Page Down 34
End 35
Home 36
Left Arrow 37
Up Arrow 38
Right Arrow 39
Down Arrow 40
Print Scrn 44
Insert 45
Delete 46
Start Menu But 92
Popup Menu Key 93
Num Lock 144/
Scroll Lock 145

Teclas de Funções

Código:

F1 – 112
F2 – 113
F3 – 114
F4 – 115
F5 – 116
F6 – 117
F7 – 118
F8 – 119
F9 – 120
F10 – 121
F11 – 122
F12 – 123

Credits: Imagens e códigos: Dicas delphi




[Você precisa estar registrado e conectado para ver esta imagem.]
O Administrador ℛodrigoNunes sugere:
- Respeite as [Você precisa estar registrado e conectado para ver este link.]
- Participe das nossas [Você precisa estar registrado e conectado para ver este link.]
- Veja a nosso [Você precisa estar registrado e conectado para ver este link.]
- Não peça suporte por MP


Try
Topic.Resolve;
Finally
Topic.Caption := Topic.Caption + '[RESOLVIDO]';
Spoiler:
[Você precisa estar registrado e conectado para ver esta imagem.]
Ver perfil do usuário https://www.facebook.com/DarkGamesBrasil formatacaodemicros@hotmail.com.br naotenho esqueci

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum