喫茶XRAYトップページ

[▲前のスレッド]

[7931] 子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 15:34:39 sato
▼ 皆様
MainFormから呼び出された子Formの操作によって所定のExcellファイルを開き
MainFormに表示されている数値を、そのファイルに転記しようとしています。
その際、MainFormが一番下、その上にExcell表、最後に子Formといった順序
で表示させたいのですが、(内容の確認用にMainFormは常に表示)
MainFormだけのときはマスタのサンプル400のように、fsStayOnTopで常にExcellの
上にFormが来るのですが、子Formを呼び出すと、子FormをfsStayOnTopにしても、
MainFormに対しては子Formが常に上に来るのですが、ExcellがActiveになると
その下に隠れてしまいます。
子Formに対してSetWindowPosを行っても変わらないように見えます。
MainForm→Excell表→子Form の順番にする方法はないでしょうか。
よろしくお願いいたします。
環境は、いまだに、Delphi7+Win7 です。


[7932] Re:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 16:40:51 Mr.XRAY
▼ satoさん

> MainForm→Excell表→子Form の順番にする方法はないでしょうか。
基本的にはできません(Delphi のバージョンとは関係なく.Windows の仕様です).
Excel -> MainForm -> 子Form
ならできます.

また,SDI スタイルのアプリであればできます.
[710][03_SDI スタイルのサンプルプログラムの仕様]
http://mrxray.on.coocan.jp/Delphi/plSamples/710_SDIStyleApp.htm#03

SDI スタイルというわけにはいかない思いますので,
実際問題としては難しいですね.


[7933] Re2:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 17:28:23 Sara
▼ Mr.XRAYさん
▼ satoさん
 

> SDI スタイルというわけにはいかない思いますので,
> 実際問題としては難しいですね.


そこは、もう一つ子フォームを作って、その子フォームに
ExcelファイルをOLEで張り付けて表示するとか・・・だめ?(^^;

[7938] Re3:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 22:48:32 sato
▼ Saraさん

ありがとうございます。
setWindowPos(子Form.Handle, HWND_TOPMOST //常に一番手前に表示される最前面ウィンドウ
setWindowPos(子Excelファイル.Handle, HWND_NOTOPMOST //最前面ウィンドウ以外のすべてのウィンドウの前
としても、常に子Formを手前に表示がうまくできません。


[7939] Re4:子Formを常に手前に表示するには返信 削除
2014/9/12 (金) 10:49:14 Sara
▼ satoさん

> setWindowPos(子Form.Handle, HWND_TOPMOST //常に一番手前に表示される最前面ウィンドウ
> setWindowPos(子Excelファイル.Handle, HWND_NOTOPMOST //最前面ウィンドウ以外のすべてのウィンドウの前
> としても、常に子Formを手前に表示がうまくできません。


ん?

  Form1にボタンを張り付けて、Form2にOLEコンテナでExcelを張り付けて
 Form3はからの状態ですが・・・

ボタンクリックで以下を実行

   Form2.Show;
   Form3.Show;
   SetWindowPos(Form3.Handle,HWND_TOPMOST,Form3.Left,Form3.Top,Form3.Width,Form3.Height,SWP_NOSIZE or SWP_NOMOVE);

でForm1の上にForm2,Form2の上にForm3が表示されて、Form2をクリックしても
Form3が一番上の状態ですが・・・なりませんか?

XE2とXE5での実行ですが・・・バージョンで違うのかな?
Officeは2013・・・Officeは関係ないよね・・・

マスター 何か知りませんか?(^^;


[7940] Re5:子Formを常に手前に表示するには返信 削除
2014/9/12 (金) 11:51:32 sato
▼ Saraさん

>Form2にOLEコンテナでExcelを張り付けて
貼り付けたつもりで、Excelそのものを操作していました。(^^;
申し訳ありません。ありがとうございました。

ついでですが、マスター
127_フォームとシステムメニューや移動リサイズ制御関係の
127_FormSystemMenuETC.zipはどうやら、zip形式でなくlzhのようですが...




[7934] Re2:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 17:29:42 sato
▼ Mr.XRAYさん

ありがとうございます。やっぱり無理ですか。ショボン。
少し探していたら、5年ほど前にも同じようなことを考えていた人がいました。
その時に親切な人が手ほどきされていましたので、さっそくいただく事にしました。
http://www.papy.in/bbs/delphi/200911/09110017.html
ただ、子FormがActiveになった時に、親も連れてくるので、Excellが隠れていまい
やや不便なため、子Formに置いたボタンで親のvisible⇔not visible をトグルする
事で逃げる事にしました。(子を閉じたとき親がいないと大変なので気を付けます)

涸沢の紅葉はそろそろ始まっていますかね。
では、コーヒとお土産ご馳走様でした。


[7935] Re3:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 18:17:30 Mr.XRAY
> 涸沢の紅葉はそろそろ始まっていますかね。

いや,まだでしょう.中旬以降ですね.
どこかまた出かける予定が? いいなぁ.
是非遭難してください.じゃなくて,遭難しないように祈っています (^^;


で,先の件ですが,子フォームのアイコンがタスクバーに表示されても
いいのであれば,SDI スタイルのアプリと同じような方法が使えます.

[127] [10_タスクバーへフォーム別のアイコンを表示]
http://mrxray.on.coocan.jp/Delphi/plSamples/127_FormSystemMenuETC.htm#10

う〜む.結局は SDI アプリと同じか.
Windows の仕様上,別タスクじゃないと,Z オーダ制御はできないようですし.
Delphi 7 だと,[712_タスクバーへの追加・削除とプログレス表示] 使えないし.
http://mrxray.on.coocan.jp/Delphi/plSamples/712_Taskbar_Progress.htm


図は,[712] [10] のサンプル EXE を起動して,Excel を起動して操作した結果
From1 と 子フォームの Form2 の Z オーダを独立して設定可能


[7936] Re4:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 18:32:25 Mr.XRAY
> Delphi 7 だと,[712_タスクバーへの追加・削除とプログレス表示] 使えないし.

一応,Delphi 2009 以前でも使用可能なように,plTaskbarList_TLB.pas という
ユニットを添付しています.
ただし,Delphi 2006 以前では,[秘密のウインドウ] に対処したコードも必要です.
詳しくは,記事と記事の中のリンクを見てください.

[02_アクティブなフォームだけをタスクバーに表示  -  ITaskbarList]
http://mrxray.on.coocan.jp/Delphi/plSamples/712_Taskbar_Progress.htm#02


[7937] Re5:子Formを常に手前に表示するには返信 削除
2014/9/11 (木) 18:52:33 Mr.XRAY
> [秘密のウインドウ] に対処したコードも必要です.

これ,どなたかがユニットで提供していたと思うのですが,忘れてしまいました.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82