// 델파이코드로 실험했지만 C++ 빌더도 똑 같습니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
bCTRLS : boolean;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = word('S')) and (ssCtrl in Shift) then begin
Caption := '눌렀당';
bCTRLS := true;
Key := 0;
end;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if (bCTRLS) then begin
Key := #0;
bCTRLS := false;
end;
end;
// 아래는 포커스가 메모장에 있지 않을때도 CTRL S로 저장할 때 필요한 기법입니다.
// 폼에 KeyPreview := true; 로 하면 여기로 이벤트가 옵니다.
// 처리 방법은 위와 같습니다.
// 그런데 메모와 폼에 동시에 CTRL S 를 받아 처리하는 경우라면
// 아래 폼의 이벤트가 우선합니다. 명칭이 KeyPreview 닌까 먼저 검사하겠다는 뜻이죠.
// 아래 적용시는 아래 주석처리를 푸시면 됩니다.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
{
if (Key = word('S')) and (ssCtrl in Shift) then begin
Memo1.Lines.Add('눌렀당');
bCTRLS := true;
Key := 0;
end;
}
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
{
if (bCTRLS) then begin
Key := #0;
bCTRLS := false;
end;
}
end;
end.
앗~ 이렇게 쉬운 초보용 팁을.... 휘리릭~
|
띵소리나는 키는 수도없이 많더군요
문론 Ctrl+S같은 키외에는 잘 쓰지 않겠지만..
TMemo뿐 아니라 TEdit도 똑같구..
하여간 띵소리나는 정확한 원인을 알고 싶습니다.
또한 위와같은 방법으로 말고
모든 키에 대해 띵소리 나지 않게 하는 방법은 없는가요?
확실하게 테스트해보진 않았지만
EDIT에서 처리하지않는 조합기등에 대해서 띵소리나는것 같은데..
맞는지요?