ユーザーがタイトルバーをダブルクリックしてフォームを復元するときに処理する必要があります。WM_SYSCOMMANDウィンドウメッセージを処理しようとしましたが、これは、ユーザーがシステムメニューの復元ボタンをクリックしてフォームを復元した場合にのみ機能します。
これが重要な場合は、DevExpressリボンフォームコンポーネントを使用しています。
ありがとう。
ユーザーがタイトルバーをダブルクリックしてフォームを復元するときに処理する必要があります。WM_SYSCOMMANDウィンドウメッセージを処理しようとしましたが、これは、ユーザーがシステムメニューの復元ボタンをクリックしてフォームを復元した場合にのみ機能します。
これが重要な場合は、DevExpressリボンフォームコンポーネントを使用しています。
ありがとう。
システムメニューをダブルクリックするとフォームが閉じるので、タイトルバーをダブルクリックすることを意味していると思います。
フォームを復元するためにタイトルバーをダブルクリックしたときのメッセージのシーケンスは次のとおりであるため、WM_SYSCOMMANDは機能するはずです。
Message posted: hwnd=$004E0820 WM_NCLBUTTONDBLCLK wParam $00000002 lParam $000705D4 Process Project1.exe (2380)
=> Message sent: hwnd=$004E0820 WM_SYSCOMMAND restore cmd requested (-44,-44) Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_WINDOWPOSCHANGING wParam $00000000 lParam $0012F4CC Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_GETMINMAXINFO wParam $00000000 lParam $0012EF6C Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_NCCALCSIZE wParam $00000001 lParam $0012F4A0 Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_NCPAINT update region 40040F4B Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_ERASEBKGND wParam $31011DCA lParam $00000000 Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_WINDOWPOSCHANGED wParam $00000000 lParam $0012F4CC Process Project1.exe (2380)
問題は、CmdType const SC_RESTORE2 = 61730//0xF122がWindows.pasにないことです。
以下の作業コードを参照してください。
type
TForm7 = class(TForm)
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
end;
var
Form7: TForm7;
implementation
{$R *.dfm}
{ TForm7 }
const
SC_RESTORE2 = 61730; //0xF122
procedure TForm7.WMSysCommand(var Message: TWMSysCommand);
begin
case Message.CmdType of
SC_RESTORE2 : beep;
end;
inherited;
end;
更新: MSDNのWM_SYSCOMMAND通知SC_RESTORE2
からの参照(「C#の値」の部分を参照)
誰かが後で検索でこれを見つけた場合に備えて...
SC_RESTORE2が存在することは想定されていないため、問題はWindows.pasから欠落しているものではありません。Rob Kennedyが指摘したように、SC_RESTORE2の値はWinUser.hにもありません。問題は、Françoisのサンプルコード(およびおそらくJamesのコード)がビット単位で失敗することです-そしてwParam(Message.CmdType)は$FFF0です。これは、Françoisからの更新されたリンクで説明されており、「Values in C#」コミュニティコンテンツにも記載されており、SC_RESTORE2を使用しないように指示されています。SC_RESTORE2および$FFF0=SC_RESTOREであることに注意してください。