Теперь буду следить за базаром, Eugie, но все равно спасибо.
ЗАСТАВИТЬ Appl..->MessageBox пок-ть в любом месте экрана?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Есть некоторый ген с модальным окном, оно конечно устанавливается SetWindowPos(), но зараза, оно же перемешает родительскую форму в теже left и тор
, сейчас пытаюсь это устранить , но эта зараза (родительская форма) перерисовывается в новом месте и возвращается обратно не родину :twisted: ...
Теперь буду следить за базаром, Eugie, но все равно спасибо.
Теперь буду следить за базаром, Eugie, но все равно спасибо.
Ребята, я смотрю есть интерес к этой теме, тогда отдаю source (работате без глюков) - спасибо Euqie и другим ребятам...
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
TCHAR szContents[] = _T("Windows will now wipe your harddisk!");
TCHAR szTitle[] = _T("Hello");
HHOOK hMsgBoxHook;
HWND MBHandle;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
TCHAR ach[40];
HWND hwnd;
if(nCode < 0)
return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
switch(nCode)
{
case HCBT_ACTIVATE:
// Get handle to the message box!
hwnd = (HWND)wParam;
if (Form1->Handle!=hwnd){ //чтоб не хватало
//родительское окно
SetWindowPos(//перемещает окно
hwnd, // handle of window
HWND_TOP , // placement-order handle
10, // horizontal position
10, // vertical position
10, // width
10, // height
SWP_NOSIZE // window-positioning flags
);
return 0;
}
}
return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
}
//-----------------------------------------------------------------------
int MsgBoxEx( TCHAR *szText, TCHAR *szCaption, UINT uType)
{
int retval;
// Install a window hook, so we can intercept the message-box
// creation, and customize it
hMsgBoxHook = SetWindowsHookEx(
WH_CBT,
( HOOKPROC) (CBTProc),
NULL,
GetCurrentThreadId() // Only install for THIS thread!!!
);
// Display a standard message box
retval = Application->MessageBox(szText, szCaption, uType);
// remove the window hook
UnhookWindowsHookEx(hMsgBoxHook);
return retval;
}
//-----------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
MsgBoxEx( szContents, szTitle, MB_OK | MB_ICONSTOP);
}
//---------------------------------------------------------------------------
Пользуйтесь...

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
TCHAR szContents[] = _T("Windows will now wipe your harddisk!");
TCHAR szTitle[] = _T("Hello");
HHOOK hMsgBoxHook;
HWND MBHandle;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
TCHAR ach[40];
HWND hwnd;
if(nCode < 0)
return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
switch(nCode)
{
case HCBT_ACTIVATE:
// Get handle to the message box!
hwnd = (HWND)wParam;
if (Form1->Handle!=hwnd){ //чтоб не хватало
//родительское окно
SetWindowPos(//перемещает окно
hwnd, // handle of window
HWND_TOP , // placement-order handle
10, // horizontal position
10, // vertical position
10, // width
10, // height
SWP_NOSIZE // window-positioning flags
);
return 0;
}
}
return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
}
//-----------------------------------------------------------------------
int MsgBoxEx( TCHAR *szText, TCHAR *szCaption, UINT uType)
{
int retval;
// Install a window hook, so we can intercept the message-box
// creation, and customize it
hMsgBoxHook = SetWindowsHookEx(
WH_CBT,
( HOOKPROC) (CBTProc),
NULL,
GetCurrentThreadId() // Only install for THIS thread!!!
);
// Display a standard message box
retval = Application->MessageBox(szText, szCaption, uType);
// remove the window hook
UnhookWindowsHookEx(hMsgBoxHook);
return retval;
}
//-----------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
MsgBoxEx( szContents, szTitle, MB_OK | MB_ICONSTOP);
}
//---------------------------------------------------------------------------
Пользуйтесь...