首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 自訂圖示訊息框 (MessageBoxIndirect 封裝)

     編輯:Delphi

動機

標準 MessageBox/MessageDlg 無法使用自訂圖示。Windows API MessageBoxIndirect 支援 MB_USERICON 載入資源圖示,但參數結構 TMsgBoxParams 複雜。本文提供封裝函數 MessageEx 簡化呼叫。

修正 Windows.pas 必要步驟

  1. 開啟 Source\RTL\Win\Windows.pas。
  2. 找到 MessageBoxIndirect 宣告 (三處),將回傳型別 BOOL 改為 Integer。
  3. 刪除或重命名 Lib\Windows.dcu,將修改後的 Windows.pas 複製到 Lib 目錄 (或專案目錄) 重新編譯。

封裝函數 MessageEx


function MessageEx(lText, lCaption: PChar; lStyle: DWORD; lIcon: PChar): Integer;
var Msg: TMsgBoxParams;
begin
  FillChar(Msg, SizeOf(Msg), 0);
  Msg.cbSize := SizeOf(Msg);
  Msg.hwndOwner := Application.Handle;
  Msg.hInstance := HInstance;
  Msg.lpszText := lText;
  Msg.lpszCaption := lCaption;
  Msg.dwStyle := lStyle;
  Msg.lpszIcon := lIcon;      // 資源圖示名稱,或 nil
  Msg.dwContextHelpId := 1;
  Msg.lpfnMsgBoxCallback := nil;
  Msg.dwLanguageId := LANG_NEUTRAL;
  Result := MessageBoxIndirect(Msg);
end;

使用範例


// 專案引入資源檔 {$R MyRes.res},資源中有圖示 MYICON
MessageEx('自訂圖示訊息', '標題', MB_OK or MB_USERICON, 'MYICON');

// 不使用自訂圖示
MessageEx('一般訊息', '標題', MB_OK or MB_ICONINFORMATION, nil);

建議

  • 將 MessageEx 放入獨立單元 (如 MsgEx.pas) 置於 Library Path,專案只需 uses MsgEx 即可使用。
  • 相容 Delphi 4/5/6/7/2007+。
  • 若不想修改系統 Windows.pas,可自行宣告 external 'user32.dll' name 'MessageBoxIndirectA' 並定義 TMsgBoxParams 記錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved