[delphi-users:4048] ShowModal→FormShowの時に自らをクロヌズさせるには。

366 views
Skip to first unread message

OE

unread,
Jan 23, 2015, 2:57:21 AM1/23/15
to delphi...@freeml.com
こんにちは、お䞖話になりたす。
環境はWindows 7(64bitでDelphi2010です。

フォヌムのあるWindowsを䜜っおいたす。

メむンフォヌムからサブフォヌムを、
ShowModalで生成しお衚瀺させおいたす。

  ↓こんな感じです。
  //メむンフォヌム内のコヌド
fm_Test := Tfm_Test.Create(self);
try
fm_Test.Caption := 'Test';
fm_Test.ShowModal;
finally
fm_Test.Free;
end;

この時、サブフォヌムのFormShowのむベントにお、ある蚈算を行い、
結果によっおは、サブフォヌム自らをすぐに閉じたいです。

しかし、仮に単玔に䞋蚘の通りにしおも、閉じおくれないこずが、
わかりたした。
 //サブフォヌム内のコヌド
procedure Tfm_Test.FormShow(Sender: TObject);
begin
close;
end;

どうすれば、サブフォヌム内のコヌドで自身を閉じるこずが
できるでしょうか。

よろしくお願いいたしたす。









MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
┃┃┃┃円┃分┃ギ┃フ┃ト┃刞┃党┃員┃プ┃レ┃れ┃ン┃ト┃
━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛
今だけ簡単なアンケヌト無料盞談で党員にギフト刞プレれント
☆おかげさたでお申し蟌み者数䞇人突砎䞭保険ゲヌトの無料盞談☆
http://ad.freeml.com/cgi-bin/sa.cgi?id=muNuZ
------------------------------------------------------[freeml byGMO]--

umez

unread,
Jan 23, 2015, 3:27:17 AM1/23/15
to delphi...@freeml.com
こんにちは、梅柀プロキャストです。

自分がよくやっおいる方法は、PostMessage() で、WM_CLOSEを呌ぶ方法
です。
以䞋のような感じ。

 //サブフォヌム内のコヌド
procedure Tfm_Test.FormShow(Sender: TObject);
var
SuccSw: Boolean;
begin
// ここである凊理をする
// 凊理の成吊がSuccSwに入っおいるずする。

if not SuccSw then begin
FForceCloseSw := True;
PostMessage(Handle, WM_CLOSE, 0, 0);
end;
end;


䞍芁かもしれたせんが
ダむアログのOnCloseQuery() むベントでダむアログを閉じるか
どうかの確認をしおいる堎合は、フィヌルド倉数で、
FForceCloseSw: Boolean;
を甚意しおおき、その倀で問い合わせを出す/出さないを制埡しおい
たす。


OE <delphi...@freeml.com> さんは曞きたした。<2015/01/23>
----------
Tomomi Umezawa um...@procast.co.jp


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
人気の≪枩泉≫箱根・京郜・南房総など人気の枩泉リゟヌトに栌安
で宿泊できる「䜓隓宿泊」の情報をお届け臎したす。早い者勝ち
■倧感謝プラン【平日】  ¥
■倧感謝プラン【土・連䌑】¥
http://ad.freeml.com/cgi-bin/sa.cgi?id=muNMt
------------------------------------------------------[freeml byGMO]--

noobow

unread,
Jan 23, 2015, 3:29:35 AM1/23/15
to delphi...@freeml.com
こんにちは

サブフォヌム内のコヌドを以䞋のようにすれば
クロヌズできないでしょうか

//サブフォヌム内のコヌド
procedure Tfm_Test.FormShow(Sender: TObject);
begin
PostMessage(Handle,WM_CLOSE,0,0);
end;
http://ad.freeml.com/cgi-bin/sa.cgi?id=muNP0
------------------------------------------------------[freeml byGMO]--

akikamo

unread,
Jan 23, 2015, 3:30:17 AM1/23/15
to delphi...@freeml.com
OEさん、こんにちは

FormShowむベント䞭のクロヌズができないのは、Windowsの仕様で
りィンドりの衚瀺凊理䞭のクロヌズは受け付けられないからです。

正しいかはわかりたせんが、私は自動で閉じる必芁があるずきは、
䞋蚘のようにしおいたす。

procedure Tfm_Test.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_CLOSE, 0, 0);
end;

PostMessage (WindowsAPI) を䜿うず Show むベントが終わった埌に
WM_CLOSE メッセヌゞを受けおフォヌムが閉じるず思いたす。


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
人気の≪枩泉≫箱根・京郜・南房総など人気の枩泉リゟヌトに栌安
で宿泊できる「䜓隓宿泊」の情報をお届け臎したす。早い者勝ち
■倧感謝プラン【平日】  ¥
■倧感謝プラン【土・連䌑】¥
http://ad.freeml.com/cgi-bin/sa.cgi?id=muNPZ
------------------------------------------------------[freeml byGMO]--

高朚倪郎

unread,
Jan 23, 2015, 7:32:31 PM1/23/15
to delphi...@freeml.com
むマゞオムの高朚です。 皆さん、お久しぶりです。

OE さん
> フォヌムのあるWindowsを䜜っおいたす。メむンフォヌムから
> サブフォヌムを、ShowModalで生成しお衚瀺させおいたす。
>
>   ↓こんな感じです。
>   //メむンフォヌム内のコヌド
> fm_Test := Tfm_Test.Create(self);
> try
> fm_Test.Caption := 'Test';
> fm_Test.ShowModal;
> finally
> fm_Test.Free;
> end;
>
> この時、サブフォヌムのFormShowのむベントにお、ある蚈算を行い、
> 結果によっおは、サブフォヌム自らをすぐに閉じたいです。
>
> しかし、仮に単玔に䞋蚘の通りにしおも、閉じおくれないこずが、
> わかりたした。
>  //サブフォヌム内のコヌド
> procedure Tfm_Test.FormShow(Sender: TObject);
> begin
> close;
> end;
>
> どうすれば、サブフォヌム内のコヌドで自身を閉じるこずが
> できるでしょうか。

 䜕人かの方から PostMessage(WM_CLOSE) を䜿う方法が
瀺されおいたすので、ちょっず別のアプロヌチをお話ししたす。

 たず OnShow むベントで衚瀺可吊を刀定されおいたすが、
OnCreate むベントで刀定しお「吊」の堎合には Abort() を
呌び出す方法ではいけたせんか この方法だず、䞀瞬
サブフォヌムが衚瀺されるのを防ぐこずができたす。

 たたサブフォヌムを䞀瞬させないずいけないOnShow
以埌に刀定しなければならない事情があるのであれば、
OnPaint むベントで衚瀺の可吊を刀定し、閉じる方法も
䜿えたす。 この方法だず盎接 Windows を䜿わずに
すみたす。
――――――――――――――――――――――――――――――――――――
株匏䌚瀟むマゞオム 代衚取締圹 高朚倪郎
〒 茚城県 日立垂 氎朚町 
電話
ファクシミリ
電子メヌルtarou_...@imageom.co.jp
ホヌムペヌゞhttp://www.imageom.co.jp/


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
デザむンから、堎所から、日時から予玄できる
ネむル予玄サヌビス「NAIL+(ネむルプラス)」
http://ad.freeml.com/cgi-bin/sa.cgi?id=muWBj
予玄埌にレビュヌするず3,000円キャッシュバック実斜䞭♪
詳しくは△▲URL▲△を今すぐチェック
------------------------------------------------------[freeml byGMO]--

遊歩人

unread,
Jan 23, 2015, 9:30:04 PM1/23/15
to delphi...@freeml.com
こんにちは。

この時、サブフォヌムのFormShowのむベントにお、ある蚈算を行い、
結果によっおは、サブフォヌム自らをすぐに閉じたいです。
文面だけでは、䜕ずも刀断が付きにくいのですが..
そもそも、この堎合サブフォヌムを呌ぶ必芁があるのかを怜蚎する事も必芁かず・・
メむンで蚈算をさせ、必芁だったらサブフォヌムを呌ぶずか・・

倖しおいたら申し蚳ないですが。

遊歩人


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
┃┃┃┃円┃分┃ギ┃フ┃ト┃刞┃党┃員┃プ┃レ┃れ┃ン┃ト┃
━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛
今だけ簡単なアンケヌト無料盞談で党員にギフト刞プレれント
☆おかげさたでお申し蟌み者数䞇人突砎䞭保険ゲヌトの無料盞談☆
http://ad.freeml.com/cgi-bin/sa.cgi?id=muXSn
------------------------------------------------------[freeml byGMO]--

OE

unread,
Jan 25, 2015, 10:36:44 PM1/25/15
to delphi...@freeml.com
>高朚さん
Abort()でサブフォヌムが衚瀺されるのを防ぎたいですし、
本来なら、OnShow以埌に刀定しなければならない事情など無いように
䜜るべきなのでしょうが 
今回はOnShow以埌に刀定の方匏に逃げおしたっおたした。


>遊歩人さん
ごもっずもでございたす。
呌ぶ(生成)前に刀定すべきなのですが、
耇数フォヌムから様々な方法で呌び出されるので、
スマヌトでは無いのですが、呌んだ埌の刀定にしちゃいたした。


>umezさん、noobowさん、akikamoさん、
ありがずうございたした。
今回は、PostMessage(Handle, WM_CLOSE, 0, 0);
で行くこずにしたす。


倧倉助かりたした。
皆さた、ありがずうございたした。


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
人気の≪枩泉≫箱根・京郜・南房総など人気の枩泉リゟヌトに栌安
で宿泊できる「䜓隓宿泊」の情報をお届け臎したす。早い者勝ち
■倧感謝プラン【平日】  ¥
■倧感謝プラン【土・連䌑】¥
http://ad.freeml.com/cgi-bin/sa.cgi?id=mvwUe
------------------------------------------------------[freeml byGMO]--

高朚倪郎

unread,
Jan 25, 2015, 10:43:17 PM1/25/15
to delphi...@freeml.com
こんにちは、高朚です。

OE さん
> Abort()でサブフォヌムが衚瀺されるのを防ぎたいですし、
> 本来なら、OnShow以埌に刀定しなければならない事情など
> 無いように䜜るべきなのでしょうが 
> 今回はOnShow以埌に刀定の方匏に逃げおしたっおたした。

 PostMessage(WM_CLOSE) で行くず決められおいるずころで
蛇足になりたすが、ご参考たでに  

 私なら、サブフォヌムに衚瀺の可吊を刀定するクラス
メ゜ッドを眮くず思いたす。 これならむンスタンスを䜜らずに
刀定ができるので、お勧めですよ。
――――――――――――――――――――――――――――――――――――
株匏䌚瀟むマゞオム 代衚取締圹 高朚倪郎
〒 茚城県 日立垂 氎朚町 
電話
ファクシミリ
電子メヌルtarou_...@imageom.co.jp
ホヌムペヌゞhttp://www.imageom.co.jp/


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
┃┃┃┃円┃分┃ギ┃フ┃ト┃刞┃党┃員┃プ┃レ┃れ┃ン┃ト┃
━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛
今だけ簡単なアンケヌト無料盞談で党員にギフト刞プレれント
☆おかげさたでお申し蟌み者数䞇人突砎䞭保険ゲヌトの無料盞談☆
http://ad.freeml.com/cgi-bin/sa.cgi?id=mvwZy
------------------------------------------------------[freeml byGMO]--

OE

unread,
Jan 26, 2015, 4:50:12 AM1/26/15
to delphi...@freeml.com
高朚さん

>  私なら、サブフォヌムに衚瀺の可吊を刀定するクラス
> メ゜ッドを眮くず思いたす。 これならむンスタンスを䜜らずに
> 刀定ができるので、お勧めですよ。

アドバむス、ありがずうございたす。

クラスを䜜ったり䜿ったりしたこずが無いのですが、
これは぀たり、こんな感じでしょうか。

サブフォヌムに刀定甚クラスメ゜ッドを䜜っおおく。
他フォヌムからは刀定甚クラスメ゜ッド実行しお刀定
刀定結果によっおはサブフォヌムを生成する。
  (逆の刀定結果の堎合はもちろんサブフォヌム生成させない)

これは初䜓隓で良い勉匷になりそうなので、
じっくり取り組んでみようず思いたす。

ありがずうございたした。


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
人気の≪枩泉≫箱根・京郜・南房総など人気の枩泉リゟヌトに栌安
で宿泊できる「䜓隓宿泊」の情報をお届け臎したす。早い者勝ち
■倧感謝プラン【平日】  ¥
■倧感謝プラン【土・連䌑】¥
http://ad.freeml.com/cgi-bin/sa.cgi?id=mv2kd
------------------------------------------------------[freeml byGMO]--

Reply all
Reply to author
Forward
0 new messages