Google 프로그램에서 TCppWebBrowser 구성 요소를 일종의 chatwindow로 사용하지만 TCppwebrowser가 IExplorer에서 열리는 클릭 링크 인 IExplorerengine을 사용하고 있기 때문에. 내가 가지고있는 한 가지 아이디어는 Onbeforenavigate2에서 Shell.execute를 탐색하는 것을 취소하는 것이지만 어디에서 처리 할 수있는 Windows 메시지와 같은 좀 더 우아한 솔루션을 원하거나 이벤트 또는 무언가를 원하고 있습니다.시스템 기본 브라우저에서 TCppWebBrowser 구성 요소의 링크를 여는 방법
답변
TCppWebBrowser가 Delphi의 TWebBrowser와 같은 것으로 가정하면 아래 코드와 같은 것이 좋습니다.
OnBeforeNavigate2 event은 TWebBrowser가 새 URL로 이동하기 전에 시작됩니다. 당신이하는 일은 그 탐색을 취소하고, redirect the URL with ShellExecute to an external application (Windows에서 구성된 기본 웹 브라우저입니다)입니다.
아래의 코드를 작동 시키려면 양식을 두 번 클릭 한 다음 FormCreate 이벤트 메소드 내용을 입력하십시오. 그런 다음 TWebBrowser를 놓고 객체 속성의 이벤트 페이지로 이동 한 다음 OnBeforeNavigate2 이벤트를 두 번 클릭하고 해당 코드를 입력하십시오.
재미있게 즐기세요! 그것은 C++에서이 아니다 제외 제론 준
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
var URL, Flags, TargetFrameName, PostData, Headers: OLEVariant; var Cancel:
WordBool);
private
RedirectUrls: Boolean;
end;
var
Form1: TForm1;
implementation
uses
ShellAPI;
{$R *.dfm}
procedure TForm1.Create(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.stackoverflow.com');
RedirectUrls := True;
end;
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp:
IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OLEVariant;
var Cancel: WordBool);
var
UrlString: string;
begin
if not RedirectUrls then
Exit;
UrlString := URL;
ShellExecute(Self.WindowHandle, 'open', PChar(UrlString), nil, nil, SW_SHOWNORMAL);
Cancel := True;
end;
end.
예
--jeroen
은 오른쪽, 그리고 난 당신이 도움이 사용하고있는 언어의 예를 들어있을 거라고 생각합니다. TCppWebBrowser 구성 요소는 TWebBrowser 구성 요소와 유사하며 동일한 이벤트가 있습니다. (당신은하지만, 내부의 일부에 액세스하려고 할 때 더 복잡해진다.) 여기는 OnBeforeNavigate2 방법의 편집 된 버전의 내가 사용
는
void __fastcall TMyForm::CppWebBrowserBeforeNavigate2(TObject* /*Sender*/,
LPDISPATCH /*pDisp*/, Variant* URL, Variant* /*Flags*/, Variant* /*TargetFrameName*/,
Variant* /*PostData*/, Variant* /*Headers*/, VARIANT_BOOL *Cancel)
{
UnicodeString strURL(URL->operator UnicodeString());
if (strURL != m_strWebPage && strURL != L"about:blank") { // if navigating somewhere else, ie the user clicked a link
*Cancel = true;
if ((int)::ShellExecute(NULL, L"open", strURL.c_str(), NULL, NULL, SW_SHOWNORMAL) <= 32) {
MyMessageBox(L"There was an error opening the link '" + strURL + L"'.");
}
}
}
이를 제외하고, 웹 브라우저 내에서 탐색을 취소 about:blank
(제어 할 수있는 합법적 인 페이지가 아닌 경우 해당 비트를 제거 할 수 있음) 및 잠길 원하는 URL 인 m_strWebPage
. 이 검사를 좀 더 유연하게 만들면 특정 도메인의 아무 곳이나 탐색하고 다른 창에서 다른 도메인에 대한 링크를 열 수 있습니다.
이 코드는 UnicodeString
및 L
문자열 접두사를 사용하기 때문에 C++ Builder 2009/2010 용으로도 작성되었습니다. 어떤 버전을 사용하고 있는지 말하지는 않지만, 2007을 사용 중이거나 대신 WideString
으로 전송하려는 경우 당신이 TCppWebBrowser
의 "webNewWindow2"당신이 열 TCppWebBrowser
에있는 링크를 처리하지 않은
건배,
데이비드 사실
고마워!내 C++은 약간 녹슬어서, 델파이 예제는 :-) –
감사합니다. 나는 C++ 빌더에서 프로그램을 작성하지만 아무런 문제없이 Delphi를 읽었습니다. 그래서 Pluimers 씨의 솔루션은 훌륭합니다. 그리고 제가 한 일종의 것입니다. – Qwark
, 시스템 기본 브라우저를 사용합니다. 당신이해야 할 일은 아무것도 없습니다. http://codeback.net/tag/tcppwebbrowser
- 1. 다른 브라우저에서 링크를 여는 방법은 무엇입니까?
- 2. 백그라운드에서 링크를 여는 방법 ...?
- 3. Python :: 기본이 아닌 브라우저에서 페이지를 여는 방법
- 4. 기본 브라우저에서 URL을 여는 안전한 방법은 무엇입니까?
- 5. 다른 페이지에서 링크를 여는 방법?
- 6. 게시물을 특정 링크를 여는 방법
- 7. 브라우저에서 Eclipse의 도움말 창을 여는 방법
- 8. 기본 브라우저를 여는 방법
- 9. QtWebView에서 링크 클릭을 catch하고 기본 브라우저에서 열기
- 10. 표준 컨테이너에서 요소의 기본 구성 피하기
- 11. UIPickerView 구성 요소의 기본 너비는 얼마입니까?
- 12. Google지도 - 라이트 박스에서 마커 링크를 여는 방법
- 13. 하이퍼 링크를 사용하여 chm 파일을 여는 방법
- 14. uiwebview에서 페이지의 일부로 링크를 여는 방법?
- 15. 셀렌, 새 창에서 링크를 여는 방법?
- 16. 이클립스의 FormToolkit에서 href 링크를 여는 방법
- 17. 기계어를 사용하여 웹 페이지에서 링크를 얻고 해당 링크를 여는 방법
- 18. 기본 브라우저에서 System.Uri ("")?
- 19. 기본 브라우저에서 기본 홈페이지를 얻는 방법
- 20. 브라우저에서 JavaScript로 링크를 제거하십시오.
- 21. 휴대 전화의 기본 브라우저에서 URL을 여는 데 도움이 필요합니다.
- 22. 주어진 파일에 대해 사용자 시스템 기본 편집기를 여는 방법은 무엇입니까?
- 23. Raphael.js 초보자 : 내 브라우저에서 자체 브라우저에서 그래프를 여는 링크를 만드는 방법은 무엇입니까?
- 24. backbone.js로 링크를 생성하는 기본 방법
- 25. XUL 브라우저에서 새 창을 여는 방법은 무엇입니까?
- 26. 웹 브라우저의 모든 링크를 기본 브라우저에서 엽니 다.
- 27. Java에서 게시물 요청으로 사용자가 선호하는 브라우저에서 웹 페이지를 여는 방법
- 28. 스윙 구성 요소의 경계를 고정하는 방법
- 29. JList에서 구성 요소의 이벤트를 활성화하는 방법
- 30. 프롤로그의 기본 라이브러리 시스템
당신의 아이디어는 우아한 솔루션입니다 :
TCppWebBrowser
더 코드의 경우, 내가 찾은이 링크를 참조하십시오. 기본 액션을 바꾸기를 원한다면 콜백이 있으므로 사용하는 것이 합리적입니다. – MSaltersQwark, 당신은 "당신이 처리 할 수있는 사건을 기대하고있다"고 말했습니까? OnBeforeNavigate2는 무엇이라고 생각하십니까? –
Rob : 내 질문을 편집 했으니 이해가되지 않았다. 지금은 알았다. P – Qwark