Q&A

  • 델파이 프로그래미에 관련 기본 적인 질문입니다.
안녕하십니까?

제가 이번에 신입사원으로써 델파이를 다루게 되었습니다.

그런데 사수가 화상 키보드 하나 만들어 보려고 하셨는데 처음부터 안 됐네요,

본론으로,...

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.

좋은 의견 및 답변 부탁드립니다.

감사하고 좋은 오후 되시길 바립니다.
2  COMMENTS
  • Profile
    소울해커 2009.10.22 20:03

    각 버튼의 이벤트 헨들러를 하나로 묶으시고 코딩하시면 더 편 하실 겁니다.

    각 버튼의 캡션이 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 이벤트에서 처리하기에는 다소 무리가 있는 부분들이 많습니다.

    다른 프로그램에 해당 키값을 전송하는 처리도 있어야 하고...

    그외에 키보드 보안이 동작하는 환경이라다던지 하면 눈물 나실겁니다.

    연습용 프로그램이 아니라면 이와 같은 방법으로 화상키보드를 만드시는건 꽤나 힘든 작업이 될 것입니다.

    그럼 수고하세요.
  • Profile
    구창민 2009.10.22 20:11
    박선우님 안녕하세요..

    상급자 되시는 분이 뭐하시는 분인지 모르겟지만.. 좀 납득이 안되는 부분이군요..;

    화상키보드는 문자조합을 위해 KeyboardHook 을 사용해서 구현해야하는(중급이상의 난위도)..

    뚝딱 만들어지는 프로그램이 아니거든요..

    일단 참고 소스가 있는곳은 http://www.delmadang.com 에 가셔서

    자료실에서 '키보드'란 단어로 검색하시면 관련소스들을 받아 보실수 있으실 겁니다..

    즐거운 프로그래밍 하시구요~
    • phono
    • 2009.10.23 19:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 중탱이
      2009.10.23 21:56
      2009에 프리즘은 포함이 되어있었고 for PHP 는 포함되어있지 않았습니다~ ^^
    • 구창민
      2009.10.22 19:36
      아르스님 안녕하세요.. 기존 코드를 그대로 가져가실때, string 을 AnisString 으로 변환하시고, Char...
    • 아르스
      2009.10.22 20:40
      아.... 답변 감사합니다. ValueToHex까지 변환해야 한다는걸 잊었었네요... 어쩐지 자꾸 엉뚱한...
    • 김민수
    • 2009.10.22 02:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.22 19:41
      안녕하세요.. A(Client) -> S(Server) -> B(Client) 라고 했을때, A -> B 로 보낸다고 생각하시고...
    • 김민수
      2009.10.23 06:24
      여러모로 관심가져주시고 답글도 감사드립니다. 간단한 샘플이라도 좀 주시면 고맙겠습니다.
    • 박선우
    • 2009.10.22 01:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2009.10.22 20:03
      각 버튼의 이벤트 헨들러를 하나로 묶으시고 코딩하시면 더 편 하실 겁니다. 각 버튼의 캡션이 0,1,...
    • 구창민
      2009.10.22 20:11
      박선우님 안녕하세요.. 상급자 되시는 분이 뭐하시는 분인지 모르겟지만.. 좀 납득이 안되는 부분이군...
    • 나선혁
    • 2009.10.22 01:50
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.22 20:13
      2010을 사용해보진 못했지만.. 일반모니터에서 터치 기능을 지원한다는것은 불가하다는 생각이 드네요......
    • 하기
      2009.10.23 20:42
      일반 모니터는 터치를 인식할 수가 없어서.... 타블렛 같은 노트북은 가능하겠죠.. ^^; 일반모니터에서...
    • knight
      2010.01.26 23:31
      TouchKeyboard 라는 콤포넌트가 추가되어있습니다. 터치 모니터에서 키보드를 사용할 수 있는 콤포넌트 ...
    • 백운민
    • 2009.10.21 21:49
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 아르스
      2009.10.21 05:15
      예전에 (아주 오래전인가?) 허브가 비쌀때... UTP 케이블로 다이렉트로 물려서 쓴 적이 있습니다. ...
    • phono
      2009.10.21 20:33
      utp케이블로 크로스 케이블을 만들어 사용하면 됩니다. 랜툴이 있다면 직접 조립하시되, 크로스케이블...
    • 한동주
    • 2009.10.21 00:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2009.10.22 19:46
      그냥 StringGrid 가 아니라 AdvStringGrid로군요. GridImages에는 하나의 ImageList만이 들어가집니다...
    • 이은경
    • 2009.10.20 23:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.21 00:11
      초보자 분들께 항시 드리는 말이지만, 예제를 따라해볼수 있는 책한권을 구입하라는 말씀을 드리고 싶...
    • 최용일
      2009.10.20 18:56
      query2에서 SQL을 다음과 같이 하면 되지 않을런지... select name, sum(number) from table_name group...
    • 델파이정복하자
      2009.10.20 19:12
      정확히 좀 알려주시면 안될까요?? query2에서 쿼리한걸 query1에 update 하는 방법을.. 저의 짧은 지식...
    • 최용일
      2009.10.21 18:48
      같은 name을 가진 number의 합을 구하는 쿼리하면 위의 코드가 맞을것이구요... Query2.Clear; Query...
    • 정경철
    • 2009.10.19 23:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2009.10.21 19:06
      제가 질문의 요지를 잘못 파악한지도 모르겠습니다만... 원본 이미지를 복사해서 원본보다 Width, H...
    • 이규하
    • 2009.10.19 04:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.10.20 01:52
      interface function BiOpenDrawer(nHandles: Integer; Drawer: Byte; Pulse: Byte): Integer; cdecl; ...
    • 박정순
    • 2009.10.18 21:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.10.20 01:45
      TNoteBook 컴포넌트를 사용해보세요... Next버튼 누를때마다 페이지번호를 증가시켜주시면 될듯하네요...
    • 박정순
      2009.10.20 08:29
      TPageControl도 가능하네요.. 저는 TPageControl의 Tab부분 때문에 고민 해는데...TabVisible속성이 있...
    • 강중규
    • 2009.10.17 20:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.20 18:24
      아래 답변드렷는데;; 두번째 질문도 답변해뒀어요..
    • 강중규
      2009.10.23 02:20
      감사합니다. 질문을 다시 올렸다가 지울려고 했는데, 지우는 버튼이 없어서.... 죄송합니다.
    • 오 찬영
    • 2009.10.16 02:52
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.10.16 03:06
      써드파티 컴포넌트를 사용한다면 2007, 2009, 2010버전으로 변경해서 설치하시면, 크게 문제될것은 없을...
    • 오 찬영
      2009.10.16 03:09
      즉답에 감사합니다. 그럼 5->2007,9,10으로 갈수있는 써드파티가 컴퍼넌트가 있는건가요? 혹 있다면...
    • 구창민
      2009.10.16 03:48
      써드파티 컴포넌트란 델파이를 설치시 디폴트로 깔리지 않는 컴포넌트들, 즉 3자 컴포넌트를 의미합니다....
    • 하얀까마귀
      2009.10.16 11:00
      음.. 써드파티 콤포넌트들도 소스를 가지고 계시다면 업시키는데는 크게 문제 없습니다. 간혹 문제가 되...
    • 최용일
      2009.10.16 03:07
      BLOB으로 검색해보세요... 많은 자료들이 있을겁니다.
    • phono
      2009.10.17 01:08
      캐드형태의 이미지라면.., 한 파일당 용량이 상당하겠는걸요.. 이걸 DataBase의 테이블에 바이너리...
    • 이은경
      2009.10.20 23:30
      두분다 감사합니다..동분서주하면서 열씸하는데...ㅎㅎ 워낙 초보라 보니 고수님들이 쉽다하는것도 저에...
    • 박동호
    • 2009.10.15 00:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.10.16 03:08
      그 파일이 하드디스크에 있으면 Library Path에 파일이 있는 폴더를 추가해주시구, 없다면 자료실에 잇...
    • 안흥문
    • 2009.10.14 23:26
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.10.16 03:09
      VB에서 DLL을 콜하는것하고 참조하는것하고 무엇이 다르죠? VB는 안써봐서
    • 안흥문
      2009.10.16 18:34
      먼저 관심 가져주셔서 감사합니다. 단순하게 DLL을 호출 하는 방식은 노출된 함수만을 호출할 수 있습니...