1

ユーザーがフォームのサイズを変更したときに、それに比例してフォームのサイズを変更したいと考えています。OnCanResize次のコードを使用して、イベントでこれを行いました。

NewHeight := Round(Height / Width* NewWidth);

ユーザーが最大化ボタンをクリックしてフォームを最大化するのを防ぐためにWMSysCommand、次のコードでメッセージを処理して無効にすることができました。

if (AMsg.CmdType = SC_MAXIMIZE) then MessageBeep(0);

私ができなかったことは、ユーザーがタイトルバーをダブルクリックしたときにフォームが最大化されないようにすることです。Delphiでそれを行う方法はありますか?

ユーザーがフォームのサイズを変更できないようにしたくないことは明らかです。最大化ボタンをクリックしてタイトルバーをダブルクリックしたときにサイズが変更されないようにしたいだけです。

4

2 に答える 2

7

最初に、WM_SYSCOMMANDメッセージ ハンドラーで使用した回避策を削除してから、フォームのプロパティbiMaximizeからオプションを削除するか、つまり、オブジェクト インスペクターで False に設定して、最大化ボタンとフォーム タイトルを取得します。ダブルクリック最大化無効。BorderIconsBorderIcons.biMaximize

実行時には、次のように簡単に使用できます。

BorderIcons := BorderIcons - [biMaximize]
于 2013-03-19T13:16:49.487 に答える
7

@TLamaの明白な答えの代替:

SetWindowLong(Handle, GWL_STYLE, 
  GetWindowLong(Handle, GWL_STYLE) and not WS_MAXIMIZEBOX);

の設定とは対照的にBorderIcons、これはウィンドウ ハンドルの再作成を強制しません (への呼び出しは行われませんRecreateWnd)。これは、ウィンドウの状態/ハンドルを失うことなく、ウィンドウ スタイルを動的に切り替え/変更する場合に役立ちます。

于 2013-03-19T13:19:03.250 に答える