お世話になっております。
WindowsXP,DelphiXE2です。
新規作成→ActiveX→アクティブフォームから、ActiveXを作成しました。
作成したOCXを、ブラウザに配置しましたが、ActiveXのWidth・Heightを、配置したブラウザのウインドウサイズに合わせたいのですが、ブラウザのサイズ(Width,Height)の取得方法がわかりません。
また、ブラウザのサイズが変更された場合に、変更されてことを知る方法も知りたいです。(DelphiのFormでいえば、OnResizeみたいなこと)
よろしくお願いします。
いろいろ自分でも調べましたが、よくわかりませんでした。
結局、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の広さの設定と同じ方法で行いました。)
ありがとうございました。
とりあえず、解決にします。
あまりスマートではありませんし、試してもいませんが、1つだけ。
http://www.geocities.jp/asumaroyuumaro/program/winapi/window/getclientrect.html
タイマー1つをフォームに配置して、親ウィンドウの大きさを一定のタイミング
ごとに取得して、HeightとWidthを設定してみてはどうでしょう。
親のハンドルは次により取得できます。
http://www.geocities.jp/asumaroyuumaro/program/winapi/window/getparent.html
ありがとうございます。
おかげさまで、親ウインドウ(ブラウザ)の大きさを取得することができました。
しかし、せっかくウインドウ(ブラウザ)のサイズを取得できたのですが、肝心の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です.
> //変更されない
この方法では変更できません.
ActiveForm(アクティブフォーム)は,HTMLコードの<OBJECT>エレメント(要素)として表示されます.
これはネット上の動画等と同じです.
したがって,表示サイズを変更するには,HTMLコードを動的に変更することになります.
参考
http://mrxray.on.coocan.jp/Delphi/temp/DD_ActivFormTestt.htm
ありがとうございます。
やっぱりHTMLコードを動的に変更するしかないですかね。
思いつくのは、サイズ変更のたびにHTMLファイルを作って、FTPかHTTPのPOSTでサーバにアップロードするくらいですが、あんまりスマートではないですね。
<参考>ありがとうございます。
プラットフォームに依存しない,他のWebアプリケーション構築の技術があります。とありますが、Delphiを使った他の技術ってどんなものがありますか?
>他のWebアプリケーション構築の技術があります。とありますが
講演会の講師じゃあるまいし,そんなことを訊かれても困ります.
いや,講演会の講師でも困ると思いますよ.多分.
とりあえず,
機能一覧
http://www.embarcadero.com/images/jp/dm/products/radstudio_xe2_features_matrix_jp.pdf
でも眺めてみるとか.
「Web アプリケーション」という項目もあることですし.
情報取得の方法はいろいろあると思います.
ご自分で調べてみてはいかがでしょうか.
Delphiとは限りませんが,
山本 隆さんのブログにサンプル等の記事があります.
Team Japanのブログにも関連記事があります.
>情報取得の方法はいろいろあると思います.
いろいろって,どんな方法がありますか?
って訊かないでくださいね.
Team Japanのブログ
http://blogs.embarcadero.com/teamj/
山本隆の開発日誌
http://www.gesource.jp/weblog/
です.
ありがとうございます。
今まで、ActivXにこだわっていましたが、あまりこだわらずに、いろいろ他にも自分で探してみようと思います。
ありがとうございました。
こんにちは.Mr.XRAYです.
>今まで、ActivXにこだわっていましたが
使っちゃいけないということではないと思います.
組織の部署内とか,組織内だけとかに限定しての利用は考えられるのではないでしょうか.
ツイート | ![]() |