Xボタンを淡色表示ではなく、押してもcloseしないようにするには?

解決


朝子  2005-05-24 19:21:56  No: 14998

すみません!!フォーム右上のXボタン(close)を淡色表示ではなく、押しても
何もおこらないようにしたいのですが???いろんなサイトを見て淡色表示に
する方法はわかったんですが・・・


りおりお  2005-05-24 19:54:40  No: 14999

type
  TForm1 = class(TForm)
  private
    { Private 宣言 }
  public
    procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand(var Msg:TWMSysCommand);
begin
  case  Msg.CmdType and $FFF0 of
    SC_CLOSE: ; // なにもしない
  else
    inherited;
  end;
end;


朝子  2005-05-24 20:37:34  No: 15000

ありがとうございます。りおりおさん!!


ベル  2005-05-25 00:15:07  No: 15001

上記以外のやり方でもっと簡単な方法はないのですか?


もっと簡単?  2005-05-25 06:04:28  No: 15002

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := False;
end;


Mr.XRAY  URL  2005-05-25 07:42:01  No: 15003

>procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: >Boolean);
>begin
>  CanClose := False;
>end;

ちょっと捕捉.このコードは確かに閉じなくなりますが,条件によっては
閉じる様にしておかないと,永久に閉じなくなりますので,利用にあたっ
ては注意が必要です.

>上記以外のやり方でもっと簡単な方法はないのですか?

結構簡単だとは思いますが...  たった数行です.


@っしー  2005-05-25 08:43:09  No: 15004

>上記以外のやり方でもっと簡単な方法はないのですか?

フラグを利用するとか?


朝子  2005-05-25 17:51:37  No: 15005

ありがとうございます。解決することが出来ました!!


朝子  2005-05-25 22:34:45  No: 15006

>条件によっては閉じる様にしておかないと,永久に閉じなくなりますので
>利用にあたっては注意が必要です.
コマンドボタンを押した場合は終了させたい時はどうすればよいのですか???


強制終了  2005-05-25 22:41:06  No: 15007

Ctrl+Alt+Delete 以外で強制終了させたいなら、

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;


いきなりです  2005-05-25 23:58:14  No: 15008

いきなりで質問なんですが
Application.Terminate;ではなく
フォーム名.Close;  
で終了させるにはどうしたらよいのですか?


MrXRAY  URL  2005-05-26 03:48:06  No: 15009

>コマンドボタンを押した場合は終了させたい時はどうすればよいのですか???

たまたま
CanClose := False;
というコードがでてきたので,先のレスを付けたのですが,すなおに,
りおりおさんのコードを使用した方が無難です.

もし,CanClose:=Falseのコードを使うとしても,×ボタンをクリックした
ことを検出して,フラグを使用して条件分岐をする必要があります.そこ
でまた,りおりおさんと同様のコードが必要になってしまいます.この時,
このフラグは,グローバルな変数としなければいけません.

先のりおりおさんのコードであれば,そのようなことが必要ありません.


朝子  2005-05-27 03:52:11  No: 15010

CanClose := False;と記述して、それをすり抜けることが出来るような
ものはないのですか???


Mr.XRAY  URL  2005-05-29 03:51:37  No: 15011

>それをすり抜けることが出来るような

意味がよくわかりませんが...
元々CanClose:=Falseは閉じないために使用すのですから.既に述べた
ように,どうしてもCanCloseを使用したいのであれば,りおりおさん
のコードを修正して,フラグを使用し,そのフラグをFormCloseQueryの
CanCloseの判断に使用すればいいでしょう.

目的が×ボタンでのことですからわざわざそんなことをする必要はないと
思いますが... どうしてもなら...

参考までに,CanCloseは例えば以下の様な使い方が考えられます.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
     Flag: Integer;
begin
     Flag:=Application.MessageBox('本当に終了していいですか',
                                  'アプリの終了',
                                  MB_OKCANCEL);
     if Flag=IDCANCEL then CanClose:=False;

end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加