C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[720] 메모장에서 CTRL +S 눌렀을 때 띵 소리 안나게 하기.
김태선 [cppbuilder] 7793 읽음    2007-11-27 11:39
// 델파이코드로 실험했지만 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.


앗~ 이렇게 쉬운 초보용 팁을.... 휘리릭~
장성호 [nasilso]   2007-11-28 01:14 X
  Ctrl+S 뿐만 아니라... Ctrl+ A , B , D , E,...   Alt + A , B , .... 등
띵소리나는 키는 수도없이 많더군요
문론 Ctrl+S같은 키외에는 잘 쓰지 않겠지만..
TMemo뿐 아니라 TEdit도 똑같구..
하여간 띵소리나는 정확한 원인을 알고 싶습니다.
또한 위와같은 방법으로 말고
모든 키에 대해 띵소리 나지 않게 하는 방법은 없는가요?


확실하게 테스트해보진 않았지만
EDIT에서 처리하지않는 조합기등에 대해서 띵소리나는것 같은데..
맞는지요? 
김태선 [cppbuilder]   2007-12-01 12:21 X
아마 그런거 같습니다.
모든 키에 대해서 처리는 위 루틴을 조금 고치면 되겠죠.

자세히는 저도 잘 몰라서요 ^^

+ -

관련 글 리스트
720 메모장에서 CTRL +S 눌렀을 때 띵 소리 안나게 하기. 김태선 7793 2007/11/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.