Realmente no estoy seguro si el código que te proporcionaré funciona. Lo estoy escribiendo según mi conocimiento de la WinAPI y no tengo Delphi a mano.
El truco pasa por utilizar los Hooks que ofrece la API de Windows. Por eso yo mejor utilizaría la función nativa
MessageBox en lugar de
Application.MessageBox.
Código Delphi
[-]
use Windows, SysUtils;
var
hook_handle: HHOOK;
function CBTProc(nCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT stdcall;
var
message_wnd: HWND;
begin
if (nCode = HCBT_ACTIVATE) then
begin
message_wnd = HWND(wParam);
SetWindowsPos(message_wnd ... );
UnhookWindowsHookEx(hook_handle);
end
CallNextHookEx(hhk, nCode, wParam, lParam);
else
CallNextHookEx(hhk, nCode, wParam, lParam);
end;
hook_handle := SetWindowsHookEx(WH_CBT,
@CBTProc,
0,
GetCurrentThreadId());
Windows.MessageBox('Esta seguro de los datos...' .... );
Saludos!