Q&A

  • 폼에서 탭키를 인식시킬려구 하는 데 잘 안돼네요..
안녕하세요..어린왕자입니다..

이렇게 하면..Tab키가 인식이 안된가요?



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

private

BackMessage: TWndMethod;

procedure allKeyView(var Message:TMessage);



{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);

begin

BackMessage:=Form1.WndProc;

Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라

end;



procedure TForm1.allKeyView(var Message: TMessage);

begin

if Message.Msg = WM_GETDLGCODE then Message.Result := DLGC_WANTALLKEYS

else BackMessage(Message);

end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if Key = vk_Tab then showmessage('Tab키가 눌러졌습니다');

end;



end.



3  COMMENTS
  • Profile
    최용일 2000.05.16 02:19
    안녕하세요. 최용일입니다.



    DLGC_WANTALLKEYS를 DLGC_WANTTAB으로 바꾸세요...



    > Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라



    위와 같이 직접적으로 인스턴스변수를 참조하시지 마시고 아래와 같이 간접적으로



    클래스를 참조하세요. 위와 같이 하시면 두개이상의 클래스를 만들때 이상동작할 수도



    있습니다.



    Form1.WindowProc:= allKeyView; //참조의 성질을 알아라

    or

    Form1.WindowProc:= Self.allKeyView; //참조의 성질을 알아라



    ^^ 항상 즐코하세요.



    어린왕자 wrote:

    > 안녕하세요..어린왕자입니다..

    > 이렇게 하면..Tab키가 인식이 안된가요?

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > procedure FormCreate(Sender: TObject);

    > procedure FormKeyDown(Sender: TObject; var Key: Word;

    > Shift: TShiftState);

    > private

    > BackMessage: TWndMethod;

    > procedure allKeyView(var Message:TMessage);

    >

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > BackMessage:=Form1.WndProc;

    > Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라

    > end;

    >

    > procedure TForm1.allKeyView(var Message: TMessage);

    > begin

    > if Message.Msg = WM_GETDLGCODE then Message.Result := DLGC_WANTALLKEYS

    > else BackMessage(Message);

    > end;

    >

    > procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

    > Shift: TShiftState);

    > begin

    > if Key = vk_Tab then showmessage('Tab키가 눌러졌습니다');

    > end;

    >

    > end.

    >

  • Profile
    어린왕자 2000.05.16 02:27
    용일님..그래두..Tab키를 눌러두..Keydown이벤트가 발생하지 않는데요..

    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > DLGC_WANTALLKEYS를 DLGC_WANTTAB으로 바꾸세요...

    >

    > > Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라

    >

    > 위와 같이 직접적으로 인스턴스변수를 참조하시지 마시고 아래와 같이 간접적으로

    >

    > 클래스를 참조하세요. 위와 같이 하시면 두개이상의 클래스를 만들때 이상동작할 수도

    >

    > 있습니다.

    >

    > Form1.WindowProc:= allKeyView; //참조의 성질을 알아라

    > or

    > Form1.WindowProc:= Self.allKeyView; //참조의 성질을 알아라

    >

    > ^^ 항상 즐코하세요.

    >

    > 어린왕자 wrote:

    > > 안녕하세요..어린왕자입니다..

    > > 이렇게 하면..Tab키가 인식이 안된가요?

    > >

    > > interface

    > >

    > > uses

    > > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > > StdCtrls;

    > >

    > > type

    > > TForm1 = class(TForm)

    > > procedure FormCreate(Sender: TObject);

    > > procedure FormKeyDown(Sender: TObject; var Key: Word;

    > > Shift: TShiftState);

    > > private

    > > BackMessage: TWndMethod;

    > > procedure allKeyView(var Message:TMessage);

    > >

    > > { Private declarations }

    > > public

    > > { Public declarations }

    > > end;

    > >

    > > var

    > > Form1: TForm1;

    > >

    > > implementation

    > >

    > > {$R *.DFM}

    > >

    > > procedure TForm1.FormCreate(Sender: TObject);

    > > begin

    > > BackMessage:=Form1.WndProc;

    > > Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라

    > > end;

    > >

    > > procedure TForm1.allKeyView(var Message: TMessage);

    > > begin

    > > if Message.Msg = WM_GETDLGCODE then Message.Result := DLGC_WANTALLKEYS

    > > else BackMessage(Message);

    > > end;

    > >

    > > procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

    > > Shift: TShiftState);

    > > begin

    > > if Key = vk_Tab then showmessage('Tab키가 눌러졌습니다');

    > > end;

    > >

    > > end.

    > >

  • Profile
    최용일 2000.05.16 03:39
    안녕하세요. 최용일입니다.



    헐~ 제가 생각없이 답변을 했군요. 이게 폼이라는 것을 깜밖했습니다. 폼에서 할 땐



    이렇게 복잡하게 할 필요가 없습니다. 그리고 폼에서는 메세지가 좀 다릅니다.



    폼은 Tab키가 눌릴때 폼에 CM_DialogKey메세지가 발생합니다. 이 메세지에 반응하는 메세



    지핸들러를 작성하시면 됩니다. 그럼 훨씬 간단하게 할 수 있죠...



    TForm1 = class(TForm)

    ...

    procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;

    end;



    interface



    procedure TForm1.CMDialogKey(var Message: TCMDialogKey);

    begin

    if Message.CharCode = vk_Tab then

    ShowMessage('Tab키가 눌러졌습니다');

    inherited;

    end;



    ^^ 항상 즐코하세요.



    어린왕자 wrote:

    > 용일님..그래두..Tab키를 눌러두..Keydown이벤트가 발생하지 않는데요..

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다.

    > >

    > > DLGC_WANTALLKEYS를 DLGC_WANTTAB으로 바꾸세요...

    > >

    > > > Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라

    > >

    > > 위와 같이 직접적으로 인스턴스변수를 참조하시지 마시고 아래와 같이 간접적으로

    > >

    > > 클래스를 참조하세요. 위와 같이 하시면 두개이상의 클래스를 만들때 이상동작할 수도

    > >

    > > 있습니다.

    > >

    > > Form1.WindowProc:= allKeyView; //참조의 성질을 알아라

    > > or

    > > Form1.WindowProc:= Self.allKeyView; //참조의 성질을 알아라

    > >

    > > ^^ 항상 즐코하세요.

    > >

    > > 어린왕자 wrote:

    > > > 안녕하세요..어린왕자입니다..

    > > > 이렇게 하면..Tab키가 인식이 안된가요?

    > > >

    > > > interface

    > > >

    > > > uses

    > > > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > > > StdCtrls;

    > > >

    > > > type

    > > > TForm1 = class(TForm)

    > > > procedure FormCreate(Sender: TObject);

    > > > procedure FormKeyDown(Sender: TObject; var Key: Word;

    > > > Shift: TShiftState);

    > > > private

    > > > BackMessage: TWndMethod;

    > > > procedure allKeyView(var Message:TMessage);

    > > >

    > > > { Private declarations }

    > > > public

    > > > { Public declarations }

    > > > end;

    > > >

    > > > var

    > > > Form1: TForm1;

    > > >

    > > > implementation

    > > >

    > > > {$R *.DFM}

    > > >

    > > > procedure TForm1.FormCreate(Sender: TObject);

    > > > begin

    > > > BackMessage:=Form1.WndProc;

    > > > Form1.WindowProc:=Form1.allKeyView; //참조의 성질을 알아라

    > > > end;

    > > >

    > > > procedure TForm1.allKeyView(var Message: TMessage);

    > > > begin

    > > > if Message.Msg = WM_GETDLGCODE then Message.Result := DLGC_WANTALLKEYS

    > > > else BackMessage(Message);

    > > > end;

    > > >

    > > > procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

    > > > Shift: TShiftState);

    > > > begin

    > > > if Key = vk_Tab then showmessage('Tab키가 눌러졌습니다');

    > > > end;

    > > >

    > > > end.

    > > >

    • 최용일
      2000.05.16 04:23
      안녕하세요. 최용일입니다. 에디트컨트롤의 핸들을 찾아서 다음과 같이 WM_SETTEXT메세지를 보내면 됩니...
    • 공성환
      2000.05.16 04:28
      잘되네요... 나머지는 지가 해결할수 있을것 같습니다... 즐거운 시간 되세요...
    • 최용일
      2000.05.16 04:17
      안녕하세요. 최용일입니다. 그냥 INI파일 하나만 작성하시면 됩니다. 노트패드같은 곳에서... 이름은...
    • 어린왕자
      2000.05.16 03:46
      고수님..저두 갈켜줘요.. 오토런..저두 갈켜줘요..
    • 류응철
    • 2000.05.16 03:27
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.05.16 05:23
      뿌려주기 작업에는 별다른 퍼포먼스 차이는 없습니다.. 코딩만 복잡할 뿐.. 다만 입력 및 수정 작업에서....
    • 어린왕자
      2000.05.16 03:29
      영원한 델초보 어린왕자인데요.. DBEdit가 뭐예요? 유닛인가요? 잘몰라서 글거든요.. 갈켜줘요.. 저두...
    • 류응철
      2000.05.16 18:34
      어린왕자님께서 모르실거란 생각을 하진 않지만.. 혹 모르시는 분이 있을까봐... dbGrid처럼 쓰는 edit...
    • 어린왕자
      2000.05.16 18:54
      류응철 wrote: > 어린왕자님께서 모르실거란 생각을 하진 않지만.. 혹 모르시는 분이 있을까봐... > > ...
    • 류응철
      2000.05.22 18:20
      어린왕자 wrote: > 류응철 wrote: > > 어린왕자님께서 모르실거란 생각을 하진 않지만.. 혹 모르시는 분...
    • 류응철
      2000.05.22 18:20
      어린왕자 wrote: > 류응철 wrote: > > 어린왕자님께서 모르실거란 생각을 하진 않지만.. 혹 모르시는 분...
    • 류응철
      2000.05.22 18:19
      어린왕자 wrote: > 류응철 wrote: > > 어린왕자님께서 모르실거란 생각을 하진 않지만.. 혹 모르시는 분...
    • 왕초보
    • 2000.05.16 03:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 어린왕자
      2000.05.16 03:27
      왕초보 wrote: > 스트링그리드를 이용하고 난 후 스트링그리드의 내용을 없애려고(초기화) 합니다. > 전...
    • 어린왕자
      2000.05.16 03:24
      음냐..초보에서 빠져나올수 없는 어린왕자입니다.. ADO컴포넌트를 써서..디비가 mdb인경우일 경우는 가능....
    • 김길남
    • 2000.05.16 02:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • jinnon
      2000.05.17 08:58
      김길남 wrote: > 서버의 MSSQL 7.0 에 스토어드 프로시저를 만들어서 가공된 값을 리턴받아 클라이언트에...
    • 최용일
      2000.05.16 02:19
      안녕하세요. 최용일입니다. DLGC_WANTALLKEYS를 DLGC_WANTTAB으로 바꾸세요... > Form1.WindowProc...
    • 어린왕자
      2000.05.16 02:27
      용일님..그래두..Tab키를 눌러두..Keydown이벤트가 발생하지 않는데요.. 최용일 wrote: > 안녕하세요. 최...
    • 최용일
      2000.05.16 03:39
      안녕하세요. 최용일입니다. 헐~ 제가 생각없이 답변을 했군요. 이게 폼이라는 것을 깜밖했습니다. 폼에...
    • 박영빈
    • 2000.05.16 01:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.16 02:26
      안녕하세요. 최용일입니다. 소스가 있다면 델파이 5에서 바뀐 부분이 있기때문에 에러가 난것일겁니다. ...
    • 김성일
    • 2000.05.16 01:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김태균
      2000.05.16 02:57
      버젼에 따라 틀린데 최근 것이라면 yyyy-mm-dd형으로 데이타베이스에 잡혀 있을 것입니다. 델파이에서 ...
    • 안희준
    • 2000.05.16 00:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.16 01:25
      안녕하세요. 최용일입니다. 타이머가 아니라 버튼에서 구현을 하셨네요... 이 SendMessage라는 함수가 1...
    • 강민주
      2000.05.16 11:06
      정민석(왕초보) wrote: > 제가 스크린 세이버 컴포넌트를 만들었는데, 다른 문제가 아니고 제가 만든 컴포...
    • 초보
    • 2000.05.16 00:17
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 황선희
      2000.05.16 01:00
      초보 wrote: > DBGRID를 사용하여 프로그램을 만드는데 이상하게도 아무 데이타가 들어 가 있지 않는 칼럼...
    • 초보
      2000.05.16 01:40
      황선희 wrote: > 초보 wrote: > > DBGRID를 사용하여 프로그램을 만드는데 이상하게도 아무 데이타가 들...
    • 어린왕자
      2000.05.16 03:35
      안녕하세요..영원한 델초보 어린왕자입니다.. 전 옛날에..(불과 1달전..T.T)..했었는데.. 디비그리드의...
    • 안희준
    • 2000.05.15 23:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.16 00:28
      안녕하세요. 최용일입니다. 소스를 올려보세요. 저는 잘 됩니다. ^^ 안희준 wrote: > 버튼핸들은...
    • 어린왕자
      2000.05.16 03:39
      안녕하세요..어린왕자여요..영원한 델초보.. 디비 종류가 어떻게 되는데요? 전 로칼디비밖에 안써봐서..잘...
    • 델파이촘
      2000.05.17 02:18
      제가 사용하는 db는 mysql입니다. mysql은 db를 새로이 만들면 하나의 폴더로 생성되는데 이 폴더를 삭...
    • 김일영
      2000.05.16 05:44
      FormHandle() => FromHandle() 말씀이시죠? 안타깝게도 없습니다... 제가 이것과 관계된 일로 불미스런 사...
    • 최용일
      2000.05.16 00:29
      안녕하세요. 최용일입니다. GetClassName이라는 API함수를 써보세요. ^^ 항상 즐코하세요. 타락천...
    • 최용일
      2000.05.16 01:29
      델파이의 클래스를 얻으려면 GetClass함수를 사용하세요. 클래스 타입이 먼저 등록이 되어 있어야 합니...
    • 타락천사
      2000.05.16 18:33
      안녕하세여.. 타락임다.. ^^ 제가 답변 올라온걸 모르고 다시 멜 보냈나 보네여.. ^^;;; 바쁠텐데......
    • 하늘맥
      2000.05.15 23:19
      델파이 배움돌이 wrote: > 스트링그리드의 문자열을 어떻게 가운데로 맞추나요? 위의 '델파이 팁모아' 에...
    • 안희준
      2000.05.15 23:13
      델파이 배움돌이 wrote: > 스트링그리드의 문자열을 어떻게 가운데로 맞추나요? 고정셀을 가운데 정렬...
    • 초보자
      2000.05.17 18:22
      안희준 wrote: > 델파이 배움돌이 wrote: > > 스트링그리드의 문자열을 어떻게 가운데로 맞추나요? > ...
    • 최용일
      2000.05.15 23:47
      안녕하세요. 최용일입니다. 소스를 올려보세요. 안된것은 아마도 윈도우를 제대로 못찾아서 일것입니다....