关于messagebox的问题 ( 积分: 45 )

  • 主题发起人 主题发起人 yx127
  • 开始时间 开始时间
Y

yx127

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:能否在程序中对messagebox在屏幕上的位置进行设置,
可不可以让messagebox在固定的秒数后自动消失。多谢![:)]
 
请问:能否在程序中对messagebox在屏幕上的位置进行设置,
可不可以让messagebox在固定的秒数后自动消失。多谢![:)]
 
MessageDlgPos('aaaaaa',mtConfirmation, mbYesNoCancel, 0, 100, 200);
 
可以让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;
 
关于 MessageBox 自动关闭可以参考:
http://www.2ccc.com/article.asp?articleid=1125
 
请问:如果主窗体处于隐藏状态,即不在任务栏出现,仅在状态栏(托盘位置),怎样使messagebox仍显示出现。[:)]
 
后退
顶部