ActivXを配置したウインドウ(ブラウザ)のサイズを知るには?

解決


かんとく  2012-01-14 11:06:59  No: 41452  IP: [192.*.*.*]

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

WindowsXP,DelphiXE2です。

新規作成→ActiveX→アクティブフォームから、ActiveXを作成しました。

作成したOCXを、ブラウザに配置しましたが、ActiveXのWidth・Heightを、配置したブラウザのウインドウサイズに合わせたいのですが、ブラウザのサイズ(Width,Height)の取得方法がわかりません。

また、ブラウザのサイズが変更された場合に、変更されてことを知る方法も知りたいです。(DelphiのFormでいえば、OnResizeみたいなこと)

よろしくお願いします。

編集 削除
かんとく  2012-01-30 23:21:26  No: 41453  IP: [192.*.*.*]

いろいろ自分でも調べましたが、よくわかりませんでした。

結局、ActiveFormのWidthとHeigthを、Screen.Width、Screen.Heightと同じにすることで、ブラウザのフォームとブラウザ上のOCXとの間に隙間が開かないようにすることにしました。

OCXのうち、ブラウザの広さからはみ出た分には、ブラウザが自動的にスクロールバーを作ってくれるので、それでいいかな、と思います。

procedure TActiveForm1.ActiveFormCreate(Sender: TObject);
begin

self.Width:=screen.Width;
self.height:=screen.height;

end;

(VCLフォームの時のWidth、Heightの広さの設定と同じ方法で行いました。)

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

編集 削除
かんとく  2012-01-30 23:23:58  No: 41454  IP: [192.*.*.*]

とりあえず、解決にします。

編集 削除
 2012-01-30 23:30:55  No: 41455  IP: [192.*.*.*]

あまりスマートではありませんし、試してもいませんが、1つだけ。
http://www.geocities.jp/asumaroyuumaro/program/winapi/window/getclientrect.html

タイマー1つをフォームに配置して、親ウィンドウの大きさを一定のタイミング
ごとに取得して、HeightとWidthを設定してみてはどうでしょう。

親のハンドルは次により取得できます。
http://www.geocities.jp/asumaroyuumaro/program/winapi/window/getparent.html

編集 削除
かんとく  2012-02-01 00:05:35  No: 41456  IP: [192.*.*.*]

ありがとうございます。

おかげさまで、親ウインドウ(ブラウザ)の大きさを取得することができました。

しかし、せっかくウインドウ(ブラウザ)のサイズを取得できたのですが、肝心のOCX(ActiveForm)のサイズが変更できません。

ためしに、Button1を配置し、ボタンをクリックしたら、その時点のフォーム(ブラウザ)のサイズを取得して、OCXのサイズを設定しようとしましたが、サイズが変わりません。

procedure TActiveForm1.Button1Click(Sender: TObject);
var

  hParent   :HWnd;
  R :TRect;

begin

  hParent :=GetParent(self.Handle);

  Windows.GetClientRect(hParent, R);

  self.Width:=r.Right;
  self.Height:=r.Bottom;

  //変更されない

end;

r.Rightと、r.Bottomの値は、フォームのサイズに間違いないと思います。


ActiveFormCreateイベントのところにself.Width:=、self.Height:=
を書くと、OCXのサイズは変わります。

procedure TActiveForm1.ActiveFormCreate(Sender: TObject);
begin

  self.Width:=screen.Width;
  self.height:=screen.height;

  //変更される

end;

ウインドウ(ブラウザ)のサイズを知ることはできましたが、
ActiveXのWidth・Heightを、配置したブラウザのウインドウサイズに合わることがまだできないため、できればこの部分もよろしくお願いします。

編集 削除
Mr.XRAY  2012-02-01 11:50:32  No: 41457  IP: [192.*.*.*]

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

>  //変更されない

この方法では変更できません.
ActiveForm(アクティブフォーム)は,HTMLコードの<OBJECT>エレメント(要素)として表示されます.
これはネット上の動画等と同じです.
したがって,表示サイズを変更するには,HTMLコードを動的に変更することになります.

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

編集 削除
かんとく  2012-02-02 23:06:00  No: 41458  IP: [192.*.*.*]

ありがとうございます。

やっぱりHTMLコードを動的に変更するしかないですかね。

思いつくのは、サイズ変更のたびにHTMLファイルを作って、FTPかHTTPのPOSTでサーバにアップロードするくらいですが、あんまりスマートではないですね。

<参考>ありがとうございます。
プラットフォームに依存しない,他のWebアプリケーション構築の技術があります。とありますが、Delphiを使った他の技術ってどんなものがありますか?

編集 削除
Mr.XRAY  2012-02-03 07:22:16  No: 41459  IP: [192.*.*.*]

>他のWebアプリケーション構築の技術があります。とありますが

講演会の講師じゃあるまいし,そんなことを訊かれても困ります.
いや,講演会の講師でも困ると思いますよ.多分.
とりあえず,

機能一覧
http://www.embarcadero.com/images/jp/dm/products/radstudio_xe2_features_matrix_jp.pdf

でも眺めてみるとか.
「Web アプリケーション」という項目もあることですし.
情報取得の方法はいろいろあると思います.
ご自分で調べてみてはいかがでしょうか.

Delphiとは限りませんが,
山本  隆さんのブログにサンプル等の記事があります.
Team Japanのブログにも関連記事があります.

編集 削除
Mr.XRAY  2012-02-03 09:34:40  No: 41460  IP: [192.*.*.*]

>情報取得の方法はいろいろあると思います.

いろいろって,どんな方法がありますか?
って訊かないでくださいね.

編集 削除
Mr.XRAY  2012-02-04 18:01:36  No: 41461  IP: [192.*.*.*]

Team Japanのブログ
http://blogs.embarcadero.com/teamj/

山本隆の開発日誌
http://www.gesource.jp/weblog/

です.

編集 削除
かんとく  2012-02-13 00:31:25  No: 41462  IP: [192.*.*.*]

ありがとうございます。

今まで、ActivXにこだわっていましたが、あまりこだわらずに、いろいろ他にも自分で探してみようと思います。

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

編集 削除
Mr.XRAY  2012-02-13 12:15:36  No: 41463  IP: [192.*.*.*]

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

>今まで、ActivXにこだわっていましたが

使っちゃいけないということではないと思います.
組織の部署内とか,組織内だけとかに限定しての利用は考えられるのではないでしょうか.

編集 削除