Delphi6 をWindos7で動かすときのエラー

解決


mizuki  2014-12-14 01:55:58  No: 46922

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ファイルのサイズをかなり小さくできますので捨てがたく、よろしくお願いします。
エラー


けど  2014-12-14 05:56:18  No: 46923

せめてTWebBrowserを貼り付けてコードをコピペして動く程度の情報をください


mizuki  2014-12-18 21:47:21  No: 46924

けど様  コードを付けずに申し訳ありませんでした。

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.


Mr.XRAY  2014-12-19 04:13:38  No: 46925

別のバージョンでテストする場合,例えば,次にようにした方が間違い防止になります.

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}

[コンパイラ バージョン]
http://docwiki.embarcadero.com/RADStudio/XE7/ja/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9_%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3

また,バージョンごとにプロジェクトを分けた方が無難です.
面倒かもしれませんが,問題の早期解決には効果があります.
私は,作成したフォルダ名の末尾に D7 とか XE3 とか付けてやっています.

[別のバージョンで作成された Delphi プロジェクトの利用]
http://mrxray.on.coocan.jp/Delphi/Others/Delphi_Versionl.htm#01

また,推測ですが,Delphi XE3 ではタイプライブラリの取り込みをしていないようですので,SHDocVw_TLB は使用しない方が無難です.
タイプライブラリで取り込んだコードは,本来の SHDocVw とは違う場合があります.

問題の現象については分かりません.


mizuki  2014-12-19 19:59:36  No: 46926

MrXRAY様  いつもありがとうございます。
バージョンの違いによる問題解決のヒントなど今後参考になりそうな記事のご紹介をありがとうございました。
DelphiではScanLineなどの画像の高速性、演算の高速性、ネイティブコンパイラによる簡潔なexeなど、わずかな入門知識で便利に使わせてもらっていますが、少し奥に入るとやはりいろいろと知識が必要になってくることが多くあります。
今回の問題はとりあえずはDelphiからWebBrowserの操作を一時回避してJavaSriptで対応し、あわせてDelphiからの操作を試行錯誤で進めたいと思います。

(今朝かなり古いXPを見つけて動かしたら上記コードでちゃんと動きました。)

今回の問題は中締めとして解決とさせていただき、本来の解決方法が見つかりましたら再度ご報告させていただきます。
ありがとうございました。


mizuki  2014-12-19 20:01:01  No: 46927

チェックを忘れていました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加