Delphi6 Personal + Windows 7
少し前まではDelphi6をWinXPマシンで動かしていましたがXPが不調になり、XPを再インストールしたのですがサポートが切れていてXPのアップデートができないため最近Delphi6をWin7にインストールして使っています。
今までXPで作ってきた各種のソフトはWin7でもほとんど問題なく移植できたのですがWebBrowser関連で下記のコードのところで止まってしまいました。(これはXPでは問題なかったコードです)
HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
エラーのWarningは{[エラー] Unit1.pas(157): 'IHTMLFramesCollection2' と 'IHTMLWindow2' には互換性がありません}と出ます。
Delphi6はExeファイルのサイズをかなり小さくできますので捨てがたく、よろしくお願いします。
エラー
せめてTWebBrowserを貼り付けてコードをコピペして動く程度の情報をください
けど様 コードを付けずに申し訳ありませんでした。
XPで動くがWIN7で動かないシンプルなコードを作ろうとXPの再起動に苦戦していましたがあきらめてXE3では動くがDelphi 6では動かないコードを作りました。
(なおUSES節にはサンプルには必要ないものも含まれています。)
コメントアウトしたところでエラーが出てしまいます。よろしくお願いします。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw_TLB, StdCtrls, ExtCtrls,strutils,jpeg,ComCtrls,activex,wininet,
// MSHTML; // for XE3
MSHTML_TLB; // for D6 personal
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
HTMLWindow2: IHTMLWindow2;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
var
mypath,htmlfile:string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
mypath:=extractfilepath(application.exename);
htmlfile:=mypath + 'abc.html';
form1.webbrowser1.Navigate(htmlfile);
// HTMLWindow2 := (form1.WebBrowser1.Document as IHTMLDocument2).parentWindow; // D6 だとここでエラー
end;
procedure TForm1.Button1Click(Sender: TObject);
var
dlat,dlon:string;
begin
dlat:='35.7'; dlon:='139.8';
// form1.HTMLWindow2.execScript('GotoLatLng(' + dlat + ',' + dlon + ')', 'JavaScript');
end;
end.
別のバージョンでテストする場合,例えば,次にようにした方が間違い防止になります.
uses
{$IFDEF VER140} //Delphi 6
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
{$ELSE} //その他のバージョン
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
{$ENDIF}
また,バージョンごとにプロジェクトを分けた方が無難です.
面倒かもしれませんが,問題の早期解決には効果があります.
私は,作成したフォルダ名の末尾に D7 とか XE3 とか付けてやっています.
[別のバージョンで作成された Delphi プロジェクトの利用]
http://mrxray.on.coocan.jp/Delphi/Others/Delphi_Versionl.htm#01
また,推測ですが,Delphi XE3 ではタイプライブラリの取り込みをしていないようですので,SHDocVw_TLB は使用しない方が無難です.
タイプライブラリで取り込んだコードは,本来の SHDocVw とは違う場合があります.
問題の現象については分かりません.
MrXRAY様 いつもありがとうございます。
バージョンの違いによる問題解決のヒントなど今後参考になりそうな記事のご紹介をありがとうございました。
DelphiではScanLineなどの画像の高速性、演算の高速性、ネイティブコンパイラによる簡潔なexeなど、わずかな入門知識で便利に使わせてもらっていますが、少し奥に入るとやはりいろいろと知識が必要になってくることが多くあります。
今回の問題はとりあえずはDelphiからWebBrowserの操作を一時回避してJavaSriptで対応し、あわせてDelphiからの操作を試行錯誤で進めたいと思います。
(今朝かなり古いXPを見つけて動かしたら上記コードでちゃんと動きました。)
今回の問題は中締めとして解決とさせていただき、本来の解決方法が見つかりましたら再度ご報告させていただきます。
ありがとうございました。
チェックを忘れていました。
ツイート | ![]() |