안녕하십니까?
제가 이번에 신입사원으로써 델파이를 다루게 되었습니다.
그런데 사수가 화상 키보드 하나 만들어 보려고 하셨는데 처음부터 안 됐네요,
본론으로,...
editbox 하고 button 박스가 있습니다.
그러니까
소스로 말씀드리면
procedure TForm1.btn5Click(Sender: TObject);
begin
edtOutput.Text := '5';
end;
이렇게 명령을 주면 editbox에 출력이 됩니다.
그런데 제가 원하는 것은
26자라는 버튼을 한번씩 누르면 연속으로 출력이 되고 또한 반복으로 같은 문자가 에디터 박스에 출력이 되게 하려고 합니다. 미치겠습니다.
전체 소스도 같이 오르겠습니다..
unit Keyboard;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
edtOutput: TEdit;
btnQ: TButton;
btnW: TButton;
btnE: TButton;
btnR: TButton;
btnT: TButton;
btnY: TButton;
btnU: TButton;
btnI: TButton;
btnO: TButton;
btnP: TButton;
btnA: TButton;
btnS: TButton;
btnD: TButton;
btnF: TButton;
btnG: TButton;
btnH: TButton;
btnJ: TButton;
btnK: TButton;
btnL: TButton;
btnZ: TButton;
btnX: TButton;
btnC: TButton;
btnV: TButton;
btnB: TButton;
btnN: TButton;
btnM: TButton;
btn0: TButton;
btn1: TButton;
btn2: TButton;
btn3: TButton;
btn4: TButton;
btn5: TButton;
btn6: TButton;
btn7: TButton;
btn8: TButton;
btn9: TButton;
procedure btn0Click(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.btn0Click(Sender: TObject);
begin
edtOutput.Text := '0';
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
edtOutput.Text := '1';
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
edtOutput.Text := '2';
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
edtOutput.Text := '3';
end;
procedure TForm1.btn4Click(Sender: TObject);
begin
edtOutput.Text := '4';
end;
procedure TForm1.btn5Click(Sender: TObject);
begin
edtOutput.Text := '5';
end;
end.
좋은 의견 및 답변 부탁드립니다.
감사하고 좋은 오후 되시길 바립니다.
각 버튼의 이벤트 헨들러를 하나로 묶으시고 코딩하시면 더 편 하실 겁니다.
각 버튼의 캡션이 0,1,2...,A,BC... 와 같이 되있다고 한다면
procedure TForm1.btn1Click(Sender: TObject);
begin
try
with TButton(Sender) do
begin
edtOutput.Text := edtOutput.Text + Caption;
end;
except
{ TODO }
end;
end;
와 같이 간단히 끝날 겁니다.
(캡션을 넣을 수 없다면 각 버튼의 Tag에 아스키코드로 변환할 값을 넣어두고 쓰시면 유용합니다. 그외에도 방법은 다양하게...)
헌데 화상키보드 만드는게 쉽지 않을텐데요.
Caps Lock, Num Lock 이러거에도 신경 써주셔야 할테고
Shift, Ctrl, Alt에 따라서도 신경써주셔야될테고...
더 나아가서 키가 눌러져있을때 계속해서 문자가 들어가지는 부분(KeyPress, KeyDown 효과) 등등...
OnClick 이벤트에서 처리하기에는 다소 무리가 있는 부분들이 많습니다.
다른 프로그램에 해당 키값을 전송하는 처리도 있어야 하고...
그외에 키보드 보안이 동작하는 환경이라다던지 하면 눈물 나실겁니다.
연습용 프로그램이 아니라면 이와 같은 방법으로 화상키보드를 만드시는건 꽤나 힘든 작업이 될 것입니다.
그럼 수고하세요.