可以让messagebox居于主窗体的中央的代码(抄来的),改改就可以了,自动消失应该不难吧。
const
WM_CENTER_MESSAGEBOX = WM_USER + 1001; //自定义消息代码
var
//全局常量,统一的对话框标题在程序初始化时赋值
ipCaption: array[0..MAXBYTE] of Char;
//自定义信息框
//asText要显示的文字,uType与MessageBox中的uType参数相同
function MsgBox(asText: string; uType: UINT): Integer;
begin
PostMessage(Application.MainForm.Handle, WM_CENTER_MESSAGEBOX, 0, 0);
Result := MessageBox(GetActiveWindow, PChar(asText), ipCaption, uType);
end; //MsgBox
//主窗体捕获自定义消息的定义
type
TfrmFrame = class(TForm)
……
private
procedure WMCenterMessageBox(var Msg: TMessage); message WM_CENTER_MESSAGEBOX;
……
end;
//主窗体中捕获对话框,并调整位置的实现过程
procedure TfrmFrame.WMCenterMessageBox(var Msg: TMessage);
var
MBHwnd : THandle;
MBRect : TRect;
x, y, w, h : Integer;
begin
MBHwnd := FindWindow(MAKEINTRESOURCE(WC_DIALOG), ipCaption);
if (MBHwnd <> 0) then begin
GetWindowRect(MBHWnd, MBRect);
w := MBRect.Right -MBRect.Left;
h := MBRect.Bottom -MBRect.Top;
//计算水平位置
x := frmFrame.Left + ((frmFrame.Width - w) div 2);
if x < 0 then
x := 0
else if x + w > Screen.Width then
x := Screen.Width - w;
//计算垂直位置
y := frmFrame.Top + ((frmFrame.Height - h) div 2);
if y < 0 then
y := 0
else if y + h > Screen.Height then
y := Screen.Height - h;
//调整位置
SetWindowPos(MBHWnd, 0, x, y, 0, 0, SWP_NOACTIVATE OR SWP_NOSIZE OR SWP_NOZORDER);
end;
end;