2011-07-20 43 views

答えて

9

フォームがモーダルで表示されている場合は、ModalResultの値をテストするだけです。 mrCancelの値は、十字がクリックされたことを示します。

私は、あなたのボタンがModalResultプロパティを使用してフォームを閉じるように指示する傾向があります。 OKボタンのModalResultmrOKに設定し、キャンセルボタンの設定をmrCancelに設定します。

0

フォームのOnCloseQueryイベントを使用できます。あなたのボタンがそのmodalresultプロパティが設定されている場合は

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
begin 
    CanClose:= true; //or not 
    ButtonCancelClick(Self); 
end; 

、彼らはまた、OnCloseQueryを呼び出しますと、このコードは動作しません。その場合は、Davidの答えを使用してください。

+2

十字架のクリックを検出したい場合は、OnCloseを使用できません。それはOnCloseQueryを呼び出すだけです。 –

+2

うーん、私は、OnCloseQueryは、フォームが閉じたときに常に起動すると思います。つまり、ユーザーがOKボタンまたはCancelボタンを押してもフォームを閉じると起動します。だからあなたのコードでは、ButtonCancelClickは常に "起動"されます...あなたはそれを避けるためにいくつかの追加のフラグを使用する必要があります。 – ain

+0

@Marjan:私はちょうどチェックしました。 OnCloseQueryとOnCloseの両方が呼び出されます。私は何も期待していなかった。 –

4

その後、私が持っているものにもかかわらず、ウィンドウ枠の右上にある閉じるアイコンをクリックするとOnCloseQuery問い合わせが呼び出されない

procedure TForm1.WMSYSCommand(var MSG: TWMSysCommand); 
begin 
    if MSG.CmdType = SC_CLOSE then 
    begin 
    //Closing from border icon 
    end; 
    inherited; 
end; 
0

メソッドを追加するには、フォームのパブリック宣言

procedure WMSysCommand(var MSG: TWMSysCommand); message WM_SYSCOMMAND; 

にこれを追加上記に請求されている。 D2010を使用します。 FormCloseも呼び出されません。 Alt F4の場合、OnCloseQueryが呼び出され、CanCloseがtrueの場合はFormCloseが呼び出されます。

関連する問題