Ver la Versión Completa : Mover un Application.MessageBox
Efren2006
10-08-2013, 00:45:30
Saludos
Tengo el siguiente problema ,, tengo un Formulario con una especia de planilla que el usuario debe llenar, cuando termina el usuario de incluir los datos y pulsa un boton de OK :
Application.MessageBox('Esta Conforme con los Datos..?','VALIDAR',MB_YESNO+MB_ICONQUESTION)
El Problema es cuando se muestra la ventana en el medio de la Pantalla la misma TAPA o no deja ver un dato que necesito que el usuario verifique visualmente antes de conformar, entonces el usuario se la pasa moviendo la ventana,, mi pregunta simplemente es;
Se puede mover esta ventana a otras coordenadas... ?
ecfisa
10-08-2013, 05:07:22
Hola Efren2006.
Podes hacerte un hook CBT, crear tu propio cuadro de dialogo o más simple, usar la función MessageDlgPos (http://www.delphibasics.co.uk/RTL.asp?Name=MessageDlgPos):
if MessageDlgPos('Esta Conforme con los Datos..?', // Msg
mtConfirmation, // Dialog Type
[mbYes,mbNo], // Buttons
0, // Help context
10, // Pos X
10 // Pos Y
) = mrNo then
...
Saludos :)
movorack
10-08-2013, 05:12:40
prueba agregando los flags
MB_SYSTEMMODAL flag ensures that the user must respond to the message box before continuing work in the window identified by the hWnd parameter.
MB_TOPMOST flag specifies that the message box should be placed above all non-topmost windows and should stay above them, even when the window is deactivated.
MB_SETFOREGROUND flag ensures that the message box becomes the foreground window.
link: http://delphi.about.com/od/windowsshellapi/a/notactive_modal.htm
Chris
10-08-2013, 05:19:46
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.
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);
// Movemos la ventana del messagebox con SetWindowPos
SetWindowsPos(message_wnd ... );
// quitamos el hook
UnhookWindowsHookEx(hook_handle);
end
CallNextHookEx(hhk, nCode, wParam, lParam);
else
CallNextHookEx(hhk, nCode, wParam, lParam);
end;
// instalamos el hook
hook_handle := SetWindowsHookEx(WH_CBT,
@CBTProc,
0,
GetCurrentThreadId());
// hacemos nuestra llamada a messagebox
Windows.MessageBox('Esta seguro de los datos...' .... );
Saludos!
Efren2006
10-08-2013, 05:47:15
Buenas Noches
Gracias a Todos por sus valiosos aporte y conocimientos,,, me funciono a la perfección la solución que me dio ecfisa
Saludos
movorack
10-08-2013, 05:49:23
and the winner is... :D
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.