掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Exitイベントにメッセージ表示後のバグ? (ID:25155)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
これは、DELPHI に限らず、 VB6,VC#,VB.NET でも起こります。 回避方法は、メッセージボックス関数を自作すること。 (CreateMessageDlg を使えばアホほど簡単に出来る) ShowModal 出なく、Show しているとこがポイント。 戻り待ちの処理はShowModal と同じですが、 親フォームをdisableにするところが少し違います。 TForm の ShowModal は プログラム内に存在するすべてのフォームを Disableにしますが、↓はメッセージ表示時にActiveだったフォームのみ Disableにします。 Function MsgBox(Const Msg : string; Const Title : String ;DlgType: TMsgDlgType; Buttons : TMsgDlgButtons;DefButton : TMsgDlgBtn) : Integer; Const BTNNAMES : Array [0..10] Of String = ( 'Yes', 'No', 'OK', 'Cancel', 'Abort', 'Ignore', 'Retry', 'All', 'NoToAll', 'YesToAll', 'Help' ); Var DForm : TMsgBox; DStrCaption : String; i : Integer; DBtn : TButton; ActiveWindow: HWnd; Begin DForm := TMsgBox(CreateMessageDialog(Msg,DlgType,Buttons)); DForm.Caption := Title; Case DefButton Of mbYes : Begin DStrCaption := 'Yes'; End; mbNo : Begin DStrCaption := 'No'; End; mbOK : Begin DStrCaption := 'OK'; End; mbCancel : Begin DStrCaption := 'Cancel'; End; mbAbort : Begin DStrCaption := 'Abort'; End; mbIgnore : Begin DStrCaption := 'Ignore'; End; mbRetry : Begin DStrCaption := 'Retry'; End; mbAll : Begin DStrCaption := 'All'; End; mbNoToAll : Begin DStrCaption := 'NoToAll'; End; mbYesToAll : Begin DStrCaption := 'YesToAll'; End; mbHelp : Begin DStrCaption := 'Help'; End; End; DForm.ActiveControl := TWinControl(DForm.FindComponent(DStrCaption)); DForm.BorderStyle := bsDialog; DForm.BorderIcons := []; For i := 0 To 10 Do Begin DBtn := TButton(DForm.FindComponent(BTNNAMES[i])); IF Assigned(DBtn) Then Begin DBtn.OnClick := DForm.BtnClick; End; End; ActiveWindow := GetActiveWindow; DForm.Show; IF ActiveWindow <> 0 Then Begin EnableWindow(ActiveWindow,False); end; while DForm.Visible Do Begin Application.HandleMessage; End; IF ActiveWindow <> 0 Then Begin EnableWindow(ActiveWindow,True); End; Result := DForm.ModalResult; DForm.Free; End;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.