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

C++빌더 Q&A
C++Builder Programming Q&A
[27224] 세가지방법이 있습니다. 메모장에서 답을 다 만들고 보니 벌써 답이 붙어 버렸네요..^^
Julien [julien] 1456 읽음    2003-09-17 15:16
Form 의 KeyPreview 를 true 로 두고
Form 의 OnKeyDown 에서
if((Key == 'n' || Key == 'N') && Shift.Contains(ssCtrl))
{
  ... <- 이 부분에 내용 추가
}

여기서..내용추가부분에 들어갈 만한 것을 3가지 있습니다.

첫 번째 방법은 컨트롤의 Navigate 메써드의 Flags 파라미터를 이용하는 것입니다.

TVariant opt = 1; // 1 -> navOpenInNewWindow 입니다
CppWebBrowser1->Navigate(CppWebBrowser1->LocationURL, &opt);

두 번째 방법은 현재 사용중인 창을 그대로 다시 띄우는 것입니다.

TForm1* tmpform = new TForm1(this);
tmpform->Show();
tmpform->Update();
tmpform->CppWebBrowser1->Navigate(this->CppWebBrowser1->LocationURL);

세 번째 방법은 직접 Ctrl + N 메시지를 보내주는 것입니다.
이 방법은 SendMessage와는 다르게 키보드가 눌려졌을 때와 완전히 동일한 상황을 만듭니다.
이것은 keybd_event의 두 번째 파라미터가 바로 키보드의 scancode 이기 때문입니다.

CppWebBrowser1->SetFocus();
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
keybd_event(VK_CONTROL, 29, 0, 0); // ctrl 누름
keybd_event('N', 49, 0, 0); // N 누름, 소문자는 안됩니다.
keybd_event('N', 49, KEYEVENTF_KEYUP, 0); // N 놓음
keybd_event(VK_CONTROL, 29, KEYEVENTF_KEYUP, 0); // ctrl 놓음

참고로 키보드의 스캔코드를 알아내는 방법입니다.
UINT scancode = MapVirtualKey('N', 0);

+ -

관련 글 리스트
27216 웹 브라이저 질문입니다. 제발.. ㅠㅠ 나크 737 2003/09/17
27217     Re:웹 브라이저 질문입니다. 제발.. ㅠㅠ Julien 782 2003/09/17
27220         에고 그게 아니라 새창 띄우는 법좀.....ㅠㅠ 나크 834 2003/09/17
27224             세가지방법이 있습니다. 메모장에서 답을 다 만들고 보니 벌써 답이 붙어 버렸네요..^^ Julien 1456 2003/09/17
27223             Re:에고 그게 아니라 새창 띄우는 법좀.....ㅠㅠ civilian 1279 2003/09/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.