已有定義的系統命令常數(感覺有些有問題):
SC_SIZE = 61440;SC_MOVE = 61456;SC_MINIMIZE = 61472;SC_MAXIMIZE = 61488;SC_NEXTWINDOW = 61504;SC_PREVWINDOW = 61520;SC_CLOSE = 61536;SC_VSCROLL = 61552;SC_HSCROLL = 61568;SC_MOUSEMENU = 61584;SC_KEYMENU = 61696;SC_ARRANGE = 61712;SC_RESTORE = 61728;SC_TASKLIST = 61744;SC_SCREENSAVE = 61760;SC_HOTKEY = 61776;SC_DEFAULT = 61792;SC_MONITORPOWER = 61808;SC_CONTEXTHELP = 61824;SC_SEPARATOR = 61455;SC_ICON = SC_MINIMIZE;SC_ZOOM = SC_MAXIMIZE;
未定義的系統命令常數:
61441: 拖動左邊框61442: 拖動右邊框61443: 拖動上邊框61444: 拖動左上方61445: 拖動右上方61446: 拖動下邊框61447: 拖動左下角61448: 拖動右下角61458: 拖動標題列61558: 橫向捲軸滾動61574: 雙擊橫向捲軸61575: 縱向捲軸滾動61559: 雙擊縱向捲軸61587: 點擊最小化表徵圖61490: 在非最大化時雙擊標題列61730: 在最大化時雙擊標題列//可能還有...
WM_SYSCOMMAND 是做什麼的? 咱們先看看把 WM_SYSCOMMAND 訊息封鎖掉是什麼樣子吧:
代碼檔案:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); procedure FormDblClick(Sender: TObject); protected procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND; end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);const br = #13#10;begin Label1.AutoSize := True; Label1.Caption := '此表單屏蔽了 SYSCOMMAND 訊息!' + br + '將無法改變表單大小;' + br + '將無法移動表單;' + br + '將無法最大、最小化表單;' + br + '也將無法通過常規途徑關閉表單.' + br + '' + br + '所以提供了雙擊表單關閉的功能.'; Label1.OnDblClick := OnDblClick;end;procedure TForm1.FormDblClick(Sender: TObject);begin Close;end;procedure TForm1.WMSysCommand(var Message: TWMSysCommand);begin// inherited; {取消這句的注釋, WM_SysCommand 就活了}end;end.
表單檔案:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 172 ClientWidth = 264 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate OnDblClick = FormDblClick PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 24 Top = 24 Width = 89 Height = 33 Caption = 'Label1' endend