IEからActiveFormへパラメータを渡したい

解決


押井  2012-02-08 01:50:14  No: 41556

いつもこの掲示板にはお世話になっております。

どうしても解決できないので質問させてください。

環境
WinXP、Del6、IE8

Delphi6で作ったActiveForm(ocx)を
IEにObjectタグで埋め込んで使うソフトを作っております。

タイトルの通りなのですが、IE側のObjectタグ内などに
パラメータを新規で追加し、それをActiveForm側から参照したいのですが
どのようにするのか私が検索した限りでは有用な情報を得られず
質問させて頂きました。

どうかよろしくお願いします。


みふ。  2012-02-08 23:44:58  No: 41557

① ActiveFormXで新規作成⇒property
② タイプライブラリがpascal形式ならタイプをTestプロパティをWideStringで追加
③ タイプライブラリ上のソースの更新レジストリの更新をする
④ 自動生成されたセッターゲッターを記述する
こんな感じでしょうか?
後はオブジェクトタグでTestにValueを設定する
Script上からのプロパティ設定等も含めてActiveForm側のゲッターを経由します

予断ではありますが
Del6ではIE7のスレッドモデルの変更、IE8のプロセスモデル変更
に対応できていない為、シングルスレッドモデル以外での
ActiveXの動きは保障されていません><


押井  2012-02-09 02:28:23  No: 41558

ありがとうございます。
早速、助言頂いた内容を元に、
タイプライブラリ内に「param」という名前でプロパティを追加し、
型の選択肢内にWideString型が見つからなかったので
とりあえず「VARIANT」を選択してみました。
以後、ソースの更新でセッター、ゲッターを追加し
レジストリの更新の手順を経ました。

HTMLの方は以下のように「param」を追加しました。

<OBJECT classid="clsid:3DAD73DB-AF2B-439A-A587-6A71BF6B6D2A"
 param="aaaaaa" codebase="http://localhost:8080/doc/ActiveX_Test/ActiveFormProj1.cab/ActiveFormProj1.cab#version=1,0,0,0"
 width=247
 height=107
 align=center
 hspace=0
 vspace=0
 >

これだけでは、まだ値が受け取れていないようなのですが、
まだ設定不足でしょうか?
それともJavaScript等で動的に値を渡す必要があるのでしょうか?
その場合はセッターをJavaScriptから呼び出す場合は
どのようになるのでしょうか?

申し訳ありませんが、最後の受け渡しの部分をご教示ください。
どうか宜しくお願いします。


Mr.XRAY  2012-02-09 15:19:18  No: 41559

こんにちは.Mr.XRAYです.

>タイトルの通りなのですが

とありますが,タイトルだと,

IEからActiveFormへパラメータを渡したい
私からあなたへプレゼントを渡したい
あなたからわたしへプレゼントを渡したい

どうでしょう?
これだと,IE,つまりHTMLからActiveForm側に値を送るように解釈できます.
もちろん,これもできます.が,一方,

>それをActiveForm側から参照したいのですが

とあります.
スレッドの文章の流れから考えて,後者の方と判断させていただきます.

そのためには,HTMLコード内にデータを書く必要があります.
HTMLのコードは,通称HTML言語とも言っています.
言語でから,文法があります.
例えば

<OBJECT 

というのは,Delphi言語で言えば,例えば TButtonに相当します.すると, width=247 というのは,
Widthプロパティの値が 247 ということに相当します.
ないプロパティは使用できませんし,値も設定できません.これは HTML でも同じです.
確実な方法は,JavaScript を使用することです,定数も設定可能です.
VBScriptというのもあります.

JavaScript に限りませんが,HTMLコードは,実行時,つまり表示の際に変更したり,挿入
することもできます.

[02_HTMLコードを直接セットして表示]
http://mrxray.on.coocan.jp/Delphi/plSamples/940_TWebBrowserAndIE.htm#02

では,表示する全ての HTML コードを挿入して表示していますが,この方法で部分的に挿入もできます.
JavaScript を含むコードもです(当たり前ですが).

後は,ActiveForm 側に,その JavaScript の値を読み出す仕組みを実装します.
そのためには,ActiveForm 側,つまりDelphi側からJavaScriptの値を読みとったり,
HTMLのタグ内の属性値を読みとる方法を知る必要があります.
とりあえず,HTML と JavaScript のことを調べることが必要ではないかと思います.

それからもう一つ

>これだけでは、まだ値が受け取れていないようなのですが、

とありますが,受け取れないとは,どういうことを意味しているのか明確にしておいた方が
いいと思います.エラーで出るのか,表示はされてるいのか等です.
文章を読んだ人が現象を把握できるようにした方がいいのではないかと思いますが.どうでしょう?

>その場合はセッターをJavaScriptから呼び出す場合は

これだと,「タイトル通り」の意味になってしまうようですが? 混乱してしまいます.

では,がんばってください.


押井  2012-02-09 20:24:32  No: 41560

ありがとうございます。

文章にあいまいな部分が多く、わかりにくいようで申し訳ありません。

まず目的ですが、HTMLの中にObjectタグを使用してActiveFormを埋め込んでおり
HTML側にある値を使ってActiveFormの挙動を変化させたいと考えております。

受け渡し方としては、実現できるかはわからないのですが
以下の二つの方法があるのではないかと考えております。
1、HTML側であらかじめ記述しているものをActiveFormから読む方法
2、ActiveForm側にある変数にJavaScript等で渡す方法

目的さえ達成できれば、どちらの方法でも問題は無いのですが
みふ。様より頂いたコメントでActiveForm側にタイプライブラリで
プロパティを追加し、そこにセッターを準備する事で
上記の2番の動きで設定できるのだろうとは予想しているのですが
どのようにHTML側からActiveFormにあるセッターを
呼び出せば良いかがわからずに頓挫している状態です。

今も自分なりに検索を続けているのですが、
自分のスキルで理解できる有用なサイトがみつかっておりません。

どうか、お知恵をお貸しください。
よろしくお願いします。


中国人  2012-02-11 12:36:07  No: 41561

<管理人による削除>


中国人  2012-02-11 12:36:38  No: 41562

<管理人による削除>


Mr.XRAY  2012-02-11 12:56:01  No: 41563

こんにちは.Mr.XRAYです.えっとですね.

><OBJECT classid="clsid:3DAD73DB-AF2B-439A-A587-6A71BF6B6D2A"
> param="aaaaaa" codebase="http://localhost:8080/doc/ActiveX_Test/>ActiveFormProj1.cab/ActiveFormProj1.cab#version=1,0,0,0"
> width=247
> height=107
> align=center
> hspace=0
> vspace=0
> >

これは,
Button1.Memo1 := 'aaaa'
としていることと同じなんです.だから,これは文法的に間違っているんです. 
PARAM というのはタグ名です.書くとすれば例えば

<OBJECT classid="XXXXX"
 ......
 .......
 align=center
 hspace=0
 vspace=0
 >
  <PARAM NAME = "MyControl" VALUE = "HogeHoge">
  <PARAM NAME = "MyControlWidth" VALUE = "300">
  <PARAM NAME = "MyControlURL" VALUE = "../../Images/SampleBMP.bmp">
</OBJECT> 

のようになります.だから,

>HTMLのコードは,通称HTML言語とも言っています.
>言語でから,文法があります.
>とりあえず,HTML と JavaScript のことを調べることが必要ではないかと思います.

とレスさせて頂きました.

>とありますが,受け取れないとは,どういうことを意味しているのか明確にしておいた方が
>いいと思います.エラーで出るのか,表示はされてるいのか等です.
>文章を読んだ人が現象を把握できるようにした方がいいのではないかと思いますが.どうでしょう?

ともレスさせていただきました.
しかし,このことの情報は頂けませんでした.

もちろん,「どうしていいか分からない」「何とかしたい」という気持ちの情報は十分に伝わってきています.
痛いほど分かります.
しかし,それだけでは解決になりません.そちらの情報もなければ,話のやりとりができません.
対処方法も見つからないと思います.多分...
そちら側の一方的な発言だけでは,と考えますが,いかがでしょうか.

では,頑張ってください.さようなら.後は他の方にバトンタッチ致します.
押井さんに,明日の栄光があることを祈っています.


Mr.XRAY  2012-02-11 13:12:57  No: 41564

こんにちは.Mr.XRAYです.
さようなしましたが,何故こんな嫌われることを書いたかと言うと,
次のような理由があるからです.

http://ht-deko.minim.ne.jp/tech045.html#tech095


押井  2012-02-11 23:05:24  No: 41565

ありがとうございます。
HTMLの設定が悪かったのですね
おかげで解決できました、ありがとうございます。

同じ問題に出くわす人がどれくらいいるのかは不明ですが
念のため、以下に手順をまとめておきます。

環境:
WinXP、Del6、IE8

IE(HTML)側の設定
Objectタグ内にパラメータのタグを追加

仮に「param」という名前に「aaaa」を設定した場合とした前提で記述します。

<OBJECT classid="XXXXX"
 ......
 .......
 align=center
 hspace=0
 vspace=0
 >
  <PARAM NAME="param" VALUE="aaaa">
</OBJECT>

Delphi側の設定

新規作成は「ActiveXフォーム」を選択しております。

1、メニューより、「表示(V)」  →  「タイプライブラリ(T)」を選択
2、開いた画面の左部にある一覧からインターフェース(赤いマッチのようなアイコン)を選択
3、選択したインターフェースを右クリックして「新規作成」→「Property」を選択
4、名前を「param」、タイプを「VARIANT」としました
5、小窓上部にある「ソースコードの更新」ボタンをクリックします
6、小窓上部にある「レジストリに登録」ボタンをクリックします
7、プログラム部に以下の2つのfunctionが自動的に追加されています

    function TActiveFormX.Get_param: OleVariant;
    procedure TActiveFormX.Set_param(Value: OleVariant);

8、自分はPrivate部に「Param : Variant;」を追記し、7のfunctionに追記しました

    function TActiveFormX.Get_param: OleVariant;
    begin
        Result := Param;//←追記
    end;

    procedure TActiveFormX.Set_param(Value: OleVariant);
    begin
        Param := Value;//←追記
    end;

以上の手順で変数「Param」内に"aaaa"が入っているのを確認できました。
再度、ありがとうございました。


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

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






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