📄 modalles.pas
字号:
unit Modalles;
interface
uses Windows;
// 建立modalless对话框(Ansi版)
function Modalless_CreateDlgA(szTemplateName: PChar;
hWndOwner: HWND; pfnDlgProc: TFNDlgProc; lParamInit: LPARAM): HWND; stdcall;
// 建立modalless对话框(Unicode版)
function Modalless_CreateDlgW(szTemplateName: PWideChar;
hWndOwner: HWND; pfnDlgProc: TFNDlgProc; lParamInit: LPARAM): HWND; stdcall;
// 显示modalless对话框
function Modalless_ShowDlg(hWnd: HWND): Integer; stdcall;
// 隐藏modalless对话框
function Modalless_EndDlg(hWnd: HWND; nResult: Integer): BOOL; stdcall;
// 删除modalless对话框
function Modalless_DestroyDlg(hWnd: HWND): BOOL; stdcall;
implementation
const
g_szModallessResult = 'ModallessResult'; // Properties 字符串
// 建立modalless对话框(Ansi版)
function Modalless_CreateDlgA(szTemplateName: PChar;
hWndOwner: HWND; pfnDlgProc: TFNDlgProc; lParamInit: LPARAM): HWND; stdcall;
begin
Result := CreateDialogParamA(HInstance, szTemplateName, hWndOwner, pfnDlgProc, lParamInit);
end;
// 建立modalless对话框(Unicode版)
function Modalless_CreateDlgW(szTemplateName: PWideChar;
hWndOwner: HWND; pfnDlgProc: TFNDlgProc; lParamInit: LPARAM): HWND; stdcall;
begin
Result := CreateDialogParamW(HInstance, szTemplateName, hWndOwner, pfnDlgProc, lParamInit);
end;
// 显示modalless对话框
function Modalless_ShowDlg(hWnd: HWND): Integer; stdcall;
var
hWndOwner: LongWord; // HWND
Msg: TMsg;
begin
hWndOwner := GetParent(hWnd);
// 禁止属主窗口响应鼠标键盘消息
if IsWindow(hWndOwner) then EnableWindow(hWndOwner, FALSE);
// 显示 modalless 对话框
ShowWindow(hWnd, SW_SHOW);
// 下面进行消息循环,
// 直至EndModalLessDlg()将'ModallessResult'与对话框相关联
repeat
// 取出消息并处理, 如果当前消息队列为空, 则GetMessage()会挂起调用线程, 直至有消息进入队列
GetMessage(Msg, 0, 0, 0);
if (not IsDialogMessage(hWnd, Msg)) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
// 取'ModallessResult'属性, 如果出错, 则返回0
Result := Integer(GetProp(hWnd, g_szModallessResult));
// 尝试删除和对话框窗体关联的'ModallessResult'属性,
// 如果出错, 说明EndModalLessDlg()还未调用, 则继续循环
until (RemoveProp(hWnd, g_szModallessResult) <> 0);
// 允许属主窗口响应鼠标键盘消息
if IsWindow(hWndOwner) then EnableWindow(hWndOwner, TRUE);
// 隐藏 modalless 对话框
ShowWindow(hWnd, SW_HIDE);
end;
// 隐藏modalless对话框
function Modalless_EndDlg(hWnd: HWND; nResult: Integer): BOOL; stdcall;
begin
// 关联'ModallessResult'属性, 使得Modalless_ShowDlg()内的消息循环停止
Result := SetProp(hWnd, g_szModallessResult, nResult);
end;
// 删除modalless对话框
function Modalless_DestroyDlg(hWnd: HWND): BOOL; stdcall;
begin
Result := DestroyWindow(hWnd);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -