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

解決


かんとく  2010-07-30 21:37:52  No: 38891

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

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 22:11:26  No: 38892

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

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

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


かんとく  2010-08-03 01:05:38  No: 38893

ありがとうございます。

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

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

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

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

よろしくお願いします。


かんとく  2010-08-03 20:17:05  No: 38894

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

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

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

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

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


Mr.XRAY  2010-08-04 01:34:54  No: 38895

こんにちは.

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

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

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

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


かんとく  2010-08-04 04:33:24  No: 38896

ありがとうございます。

そうです。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-04 06:12:50  No: 38897

>ちなみに、「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 19:14:41  No: 38898

ありがとうございます。

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

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

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

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

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

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

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

よろしくお願いします。


Mr.XRAY  2010-08-04 19:44:58  No: 38899

>実行→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 23:31:32  No: 38900

ありがとうございます。

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

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

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

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


take  2010-08-05 00:17:05  No: 38901

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

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

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

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


かんとく  2010-08-05 01:00:58  No: 38902

ありがとうございます。

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

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

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


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

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






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