ActiveXフォームの更新を行うには?

解決


かんとく  2010-07-30 12:37:52  No: 38891  IP: 192.*.*.*

お世話になっております。

XP,Delphi2007です。

新規作成→ActiveX→アクティブフォーム
から、
Project1.ocx
というocxファイルを作って、ブラウザ内に配置しました。

最初はうまくいったんですけど、ocxを修正して、ブラウザを更新しても、ocxの内容が更新されません。

Project1.ocxファイルの更新日時は、正しく変更されています。


ブラウザで読み込むhtmlファイルの中身の、このオブジェクトに関する部分は、

<object classid="clsid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" codebase="Project1.ocx" ></object>
です。

XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXの部分は、
Project1_TLB.pasの350行あたりにある、

procedure TActiveFormX.InitControlData;
Const
・・・
   ClassID: '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';

をコピーしました。


ocxの修正が、ブラウザ内で反映する方法を教えてください。

よろしくお願いします。

編集 削除
take  2010-08-02 13:11:26  No: 38892  IP: 192.*.*.*

ブラウザのキャッシュが有効になっているため
Project1.ocx
の読み込み処理が行われていないものと思われます。

IEであれば「ctrl」キーを押しながら「更新」のボタンを押すと
キャッシュを使わずに読み込まれます。

旧バージョンのIEだと「nochace」指定でキャッシュが無効にできたりしたのですが
最近はどうだかわかりません。

編集 削除
かんとく  2010-08-02 16:05:38  No: 38893  IP: 192.*.*.*

ありがとうございます。

ただ、「ctrl」キーを押しながら「更新」のボタンを押しても、だめでした。


自分でもいろいろ調べてみましたが、
ブラウザのインターネットオプション→プログラム→アドオンの管理のリスト中に、
Project1.ocx
というのがありました。

これをクリックしてみると、ActiveXの更新というボタンがあるのですが、ボタンが薄くなって、クリックできないようになっています。
(ButtonのEnabled:=falseみたいな感じ)

なんとなくキャッシュが原因だと自分も思うんですが、解決方法が分かりません。

よろしくお願いします。

編集 削除
かんとく  2010-08-03 11:17:05  No: 38894  IP: 192.*.*.*

いろいろ試しているうちに、
C:\WINDOWS\Downloaded Program Files
フォルダ内に、
ActiveFormX Control
というファイルを見つけました。

右クリックして、プロパティを見ると、IDというのがあり、
これが、ブラウザで指定した、XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXと同じ値でした。

同じく右クリックすると、更新というのがあり、これをクリックすると、
「発行元を確認できないため、このソフトウェアはブロックされました。」
と表示されました。

この辺に解決方法がありそうな感じなんですが、どうしたらよいか分かりません。

引き続き、よろしくお願いします。

編集 削除
Mr.XRAY  2010-08-03 16:34:54  No: 38895  IP: 192.*.*.*

こんにちは.

このActiveFormのテストは,ローカル,つまり開発環境のマシンで実行しているんで
すよね?
最初はうまくいっていたということは,現在は,設計内容の更新は反映されないが,
前の設計状態では表示されていることでしょうか?


>C:\WINDOWS\Downloaded Program Files
>フォルダ内に、
>ActiveFormX Control
>というファイルを見つけました。

これはできます.
クライアント側で実行すると,ここにダウンロードして(レジストリに)登録します.

ところで,Delphi2007ではActiveFormはサポートされていないハズなんですが,
どのようにしたのでょうか?

編集 削除
かんとく  2010-08-03 19:33:24  No: 38896  IP: 192.*.*.*

ありがとうございます。

そうです。ActiveFormのテストは,開発環境のマシンで実行しています。

最初はうまくいっていたというのは、初めて実行したときに作成された
Project1.ocx
の内容(プログラム)が、その後何度プロジェクト→Project1をコンパイルや、プロジェクト→Project1を再構築を繰り返しても、ブラウザで表示されるプログラムが、更新されないということです。
ブラウザの更新(ブラウザを閉じてから開く)も行っています。
また、パソコンの再起動を行っても、プログラムは更新されません。

ブラウザのアドレスは、ローカルのHTMLファイル
(c:\xxx\xxx\index.htm)
です。


試しに、C:\WINDOWS\Downloaded Program Filesフォルダ内にあるActiveFormX Controlというファイルを削除してみたところ、ブラウザのプログラムが更新されました。
しかし、なぜか、新しくできたはずのActiveFormX Controlというファイルの作成日時は、初めて実行したときに作成されたProject1.ocxの作成日時のままなんです。

なんかまだ謎が多いので、
引き続き、よろしくお願いします。

ちなみに、「Delphi2007ではActiveFormはサポートされていないハズ」とのことでしたが、うちのDelphi2007 Professionalでは、
普通に ファイル→新規→その他→ActiveX→アクティブフォームで、ActiveFormウイザードのダイアログが表示され、OKをクリックすると、Project1.ocxが作成されます。

編集 削除
Mr.XRAY  2010-08-03 21:12:50  No: 38897  IP: 192.*.*.*

>ちなみに、「Delphi2007ではActiveFormはサポートされていないハズ」

https://forums.embarcadero.com/thread.jspa?threadID=20379&tstart=35

すでにあるActiveFormのプロジェクトを開くと表示されますけどね (^^;

>ブラウザのアドレスは、ローカルのHTMLファイル
>(c:\xxx\xxx\index.htm)

ブラウザはIEなので...(苦笑)
それはともかくxxxxじゃ,それが置き場所としていいのかの判断ができませんね.

何かVCLを入れているらしいので,よく分かりませんし,
いろいろ変更してしまってもいるようですし,
とにかくActiveXFormが表示できているという前提で.

そのプロジェクトファイル(拡張子はdpr)を開くと

exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,     //OCXをレジストリの登録から削除.コマンドラインのregsvr32 /uに相当
  DllUnregisterServer;   //OCXをレジストリに登録.コマンドラインのregsvr32に相当
  
というのがあります.  
クライアントからActiveFormを表示すると,DllResigterServerを実行しますが(HTMLコードのOBJECTなので),開発環境では実行してくれません.
で,ActiveFormの設計を,コントロールの追加や削除等の変更をした場合は,
[実行]から[ActiveXサーバの登録]を再実行してみてください.
どうなるかは分かりません.多分,です.

ところで,最近Delphiを使い始めた方には,ActiveFormという用語になじみがないと
思います.こんなものという文章を書いてみました.参考になれば幸いです.

http://mrxray.on.coocan.jp/Delphi/temp/DD_ActivFormTestt.htm

編集 削除
かんとく  2010-08-04 10:14:41  No: 38898  IP: 192.*.*.*

ありがとうございます。

実行→ActiveXサーバーの登録
で、開発環境でもプログラムが更新してくれました。

ありがとうございました。



Mr.XRAYさんのサイト拝見しました。
ActiveFormのことが分かりました。

「これからはまずほとんど使われることはないと考えられます.」とありますが、
Delphi(2007)を使って、Webアプリケーションを構築するには、どうするのが最適でしょうか。

作りたいプログラムは、ゲーム的な内容です。

できれば、IEに限定しないで、Vista以降でも問題なく動くものが作りたいです。

デジタル署名の取得(お金で解決)が必要といわれれば、その辺も含めて知りたいです。ちょっと調べてみたところでは、個人契約の場合、年間50,000円程度必要なようですね。
デジタル署名を取得したあとどうするのか、ぜんぜん分からないので、お金が無駄にならないか、ちょっと不安です。

よろしくお願いします。

編集 削除
Mr.XRAY  2010-08-04 10:44:58  No: 38899  IP: 192.*.*.*

>実行→ActiveXサーバーの登録
>で、開発環境でもプログラムが更新してくれました。

それはよかったです.もしかしたらダメかと思っていたのですが.

ActiveFormなんですが,実はDelphi2009で復活しているんです.
私自身が否定的な見方をしているので,あんな文章になっています.

以前,所属組織でも採用しようと考え,Delphi6の頃ですが.
将来を考えて(サーバがUnix関係に移行した場合等)でやめました.
組織内の部署単位でとかでは利用価値はあるとは思っています.
その場合,クライアントマシンは,リムーバブルなメディアが使用不可な
シンクライアントに近い形でならでとは思っています.

Webアプリケーションの構築に関しては,残念ですが,意見を述べるまでの知識は
持ち合わせていません.
他の方のレスを期待するか,
EDNやMLなどで気軽な気持ちで訊いてみてはいかがでしょうか.

https://forums.codegear.com/forum.jspa?forumID=14
http://www.freeml.com/delphi-users

編集 削除
かんとく  2010-08-04 14:31:32  No: 38900  IP: 192.*.*.*

ありがとうございます。

最初の疑問が解決できたので、解決チェックします。

今回は、アクティブフォームでocxを作って、できる範囲(IE、XPユーザ)で公開することにします。

デジタル署名の取得(コードサイニング証明書の購入)には興味があるので、こちらの方はがんばってやってみようかなと思います。

ありがとうございました。

編集 削除
take  2010-08-04 15:17:05  No: 38901  IP: 192.*.*.*

>Delphi(2007)を使って、Webアプリケーションを構築するには、どうするのが最適でしょうか。
Indyにあるかわかりませんが
HTTPサーバ機能を利用してDelphiからHTMLを出力するプログラムを書けば
Webアプリケーションを構築することになります。

かんたんな掲示板ならDelphiで作ったことはあります。

あとはDelphi for PHPというのもあります。
しかしコードはPHPですので、Delphiで作るということにはならないですね

>作りたいプログラムは、ゲーム的な内容です。
Webアプリケーションによるゲームソフトは
FlashかJAVAアプレットかJAVAスクリプト
あるいはHTML5?になるので
Delphiとはちょっと無関係ですね。

編集 削除
かんとく  2010-08-04 16:00:58  No: 38902  IP: 192.*.*.*

ありがとうございます。

私のやり方が、一般的な方法とは違うのかもしれませんが、すでに開発しているDelphiで作ったゲームを、ブラウザ上で動かしたい。という目的で方法を探り、その結果、
ActiveX→アクティブフォーム
という方法にたどり着きました。

なので、特異な方法かもしれませんが、Delphiのアクティブフォームを利用して、プログラムを公開しようと思います。
(実際ブラウザでゲームを開始しようとすると、デジタル署名がないという警告が出ますが、それはお金で解決しようかなと思っています。)

ありがとうございました。

編集 削除