掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
マルチスレッドでWebBrowser1NewWindow2で窓を開くには。 (ID:34438)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
よろしくお願いします。環境はWindowsXP sp3 Delphi 6 Personalです。 ただいま、下記のママんさんの書かれたタブブラウザを見本にそのままコピペして この質問に関連すると思われる箇所だけを書いています。 https://www.petitmonte.com/bbs/answers?question_id=4078 当然そのままでは作動するのですが、 それをマルチスレッドで実行させたいと思っていろいろやっています。 しかし、TIETabSheet.WebBrowser1NewWindow2手続きの リンクを右クリックで新しいウィンドウで開くがうまくいきません。 問題点がタブシートクラス、マルチスレッドクラス、Formクラスにまたがるかもしれないと 考え、長くなりましたが下記にコードを書きました。 WebBrowser1のイベントごとマルチスレッドに入れるべきなのか、 その辺のところも解りません。 アドバイスをよろしくお願いいたします。 type TIETabSheet = class(TTabSheet)//-------------タブシートクラス private procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); public WebBrowser1 : TWebBrowser; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; TNaviThread = class(TThread)//---------------TNaviThreadマルチスレッドクラス private FURL: string; protected procedure Execute; override; public constructor Create(url: String); virtual; procedure ThreadAddNewPage; end; TForm1 = class(TForm)//------------------------TForm1クラス Button1: TButton; PageControl1: TPageControl; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} { TIETabSheet }//------------------------タブシートクラス procedure TIETabSheet.WebBrowser1NewWindow2(Sender: TObject;var ppDisp: IDispatch; var Cancel: WordBool); begin TNaviThread.Create( ''); //<<■■ここで右クリックの新しいタブが開くには??■■ ppDisp := (Form1.PageControl1.ActivePage as TIETabSheet).WebBrowser1.Application; end; constructor TIETabSheet.Create(AOwner: TComponent); begin //タブシートの作成と同時にブラウザ作成 inherited; WebBrowser1 := TWebBrowser.Create(self); TOleControl(WebBrowser1).Parent := Self; WebBrowser1.Align := alClient; //イベント定義 WebBrowser1.OnNewWindow2 := WebBrowser1NewWindow2; end; destructor TIETabSheet.Destroy;//タブシートの破棄と同時にブラウザ破棄 begin WebBrowser1.Free; inherited; end; {TNaviThread} //------------------------マルチスレッドクラス constructor TNaviThread.Create(url: String); begin FURL:=url; inherited Create(False); FreeOnTerminate := True; end; procedure TNaviThread.Execute; begin Synchronize(ThreadAddNewPage); end; procedure TNaviThread.ThreadAddNewPage; //新規タブ作成 var IETab:TIETabSheet; begin IETab := TIETabSheet.Create(Form1.PageControl1); IETab.Parent := Form1.PageControl1; IETab.PageControl := Form1.PageControl1; IETab.Caption:= FURL; IETab.WebBrowser1.Navigate(FURL); end; { TForm1 }//--------------------------Form1クラス procedure TForm1.Button1Click(Sender: TObject);//Naviボタン begin //テストアドレス(失礼します) PageControl1.TabWidth:=120; TNaviThread.Create( 'http://www.tohoho-web.com/'); TNaviThread.Create( 'http://www13.plala.or.jp/kmaeda/index.html'); TNaviThread.Create( 'http://itpro.nikkeibp.co.jp/article/COLUMN/20061127/254990/?ST=develop&P=2'); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.