2011/02/03(Thu) 12:11:36 編集(投稿者)
やじゅ さん
ありがとうございます。
透明のフォームを表示する案を採用してほぼうまくいきました。
が 一点問題は 親フォームが最前面でなくなった場合に透明フォームだけ残ってしまうという問題が解決できません。
最小化されたときはLeaveイベントで透明フォームも消したり移動したときはMoveで移動でうまくいったのですが
ほかのアプリが前面に出てきた場合(たとえばテキストエディタをほかからドラッグしてアプリの上においた場合)
どう判定したらいいのか・・・
もしくはtopMost=trueにしてしまっているからこその問題ですので topMostを使わずに透明フォームを
常に親フォームの一個前に表示する方法があればそれでもいいかもしれません。
なお透明フォーム表示後も 中止ボタンなど親フォームのボタンも押せる必要があるのでShowDialogは使えません。
あと↓の方法も試しましたがこの場合上の現象は解決しましたが 透明ではなくなってしまい使えませんでした。
フォーム内にフォームを表示する
http://dobon.net/vb/dotnet/form/formwithinform.html
なおご提示いただいた他のキャプチャして・・・は自動巡回ツールなので2,3秒ごとに切り替わるため
負荷的に厳しいかなということでやめました。
WebBrowserのイベント処理をキャンセルして・・・は 上記がダメだったらやるつもりですが
自作の自動巡回ライブラリのようなものを使っていて他のツールにも使ってるライブラリで修正範囲が大きくなるので
透明フォームでできれば・・・と思ってます。
よろしくお願いいたします。
やったことまとめたソース貼り付けたかったんだけど
ソースがスパム判定ひっかかって書き込めない(涙)
いろいろ試してて上の二つは誤って投稿してしまい また編集キー設定していなかったので削除できませんので無視していただけたら幸いです。
とりあえず半角を全て全角に変えたものを貼り付けます。
読みにくいですがすみません。
(どのワードがスパムフィルタにひっかかったかわかりませんが↓で投稿できるようスパム設定をゆるめていただけるとありがたいです)
■FrmTransparent
this.ControlBox = false;
this.FrmBorderStyle = System.Windows.Frms.FrmBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Opacity = 0.01;
this.TopMost = true;
んでプログラム内でゆーざーにいじらせたくない時に
if (frmTrans == null) {
frmTrans = new FrmTransparent();
}
FrmTransparentInit();
frmTrans.Show();
あとはフォーム移動した時用にMoveイベントで移動するたびに透明フォームも移動する
private void FrmMain_Move(object sender, EventArgs e) {
FrmTransparentInit();
}
private void FrmTransparentInit() {
if (frmTrans != null && frmTrans.Visible) {
frmTrans.Location = new Point(this.Location.X + webBrowser1.Location.X, this.Location.Y + webBrowser1.Location.Y);
frmTrans.Size = webBrowser1.Size;
}
}