2016-09-18 40 views
4

DXベルリンでVCLスタイルの[閉じる]ボタンを無効にしたいと思います。Delphi - VCLスタイルの[閉じる]ボタンを無効にする

WyこのコードはVCLスタイルでは機能しませんか?あなたはcaNoneからFormCloseイベントでアクションを設定した場合

EnableMenuItem(GetSystemMenu(Form3.Handle, LongBool(False)),SC_CLOSE, MF_BYCOMMAND or MF_GRAYED); 
+1

あなたはスタイルエンジンのバグに遭ったようですか?上のように 'SC_CLOSE'を無効にすると、スタイルのないアプリケーションでさえも** Alt-F4は無効にならないことに注意してください。 –

+0

@Tom Delphi 10 Seattleでは、期待どおりに動作するようです。 10.1ベルリンをまだ試していない。 –

+0

@ジェリー期待どおりに動作しますか? Alt-F4に関するOPの問題やコメントを参照してください。私はシアトルとベルリンの両方でテストしました –

答えて

3

、あなたは何が起こるだろうされていない(赤い十字をクリック)フォームを閉じるようにしてください。このようにして、ボタンを無効にすることができます。

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
//You cannot type only caNone, otherwise you'll get a compiler error 
Action := TCloseAction.caNone; 
end; 

caNoneはSystem.UITypesです。詳細については、documentationをお読みください。

+0

[OK]を、しかし私は私のフォームを閉じることができますか?プログラムから出る?私がAction:= TCloseAction.caNoneを使用すると、完璧ですが、アプリを終了することはできません。 –

+0

@JuniorOliveiraフォームでは、プライベートブール値を宣言します。 'AllowToClose'を設定し、フォーム' OnClose'イベントを 'AllowToClose then Action:= TCloseAction.caNone;'に変更します。 .Close'。 –

+1

OK。どうもありがとう。 –

1

デフォルトでVCLスタイルを使用する場合は、使用するフォントの外観、フォームのクライアント領域、フォーム境界に影響します(最小化、最大化、閉じるボタンも含まれます)。

は、だから私が見るものから次の2つのオプションがあります:あなたはそのスタイルを意味[seFont, seClient]にフォームのStyleElementsプロパティを変更することができ

  1. のみを使用するフォントやフォームのクライアント領域が、境界線に適用されますあなたのフォームの領域は、OSによって構造化されずにレンダリングされます。
  2. 目的の効果を達成するために、実行時にスタイルを変更します。残念ながら、これを達成する方法の例をあなたに示すために、Stylesに十分な経験はありません。
+0

OK。どうもありがとう。 –

関連する問題