Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

А картиночку на MessageBox прорисовать можно?


koha ©   (2007-01-09 07:12:00) 

А картиночку на MessageBox прорисовать можно?


Desdechado   (2007-01-10 11:26:00) [1]

> Сперва я открыл справку и не хрена не понял так, как там языком Била Гейтса написано было
Ты бы почитал встроенную справку, там языком David Intersimone написано. Гораздо понятнее.


Германн   (2007-01-10 02:59:00) [2]


> Zorro2001 ©   (10.01.07 02:40) [11]
>
>
> > GrayFace ©   (10.01.07 00:55) [10]
>
> форум последнее дело... сначала справка.. потом кцуча справочников.
> . потом поиск в тырнете.. а уже потом форум...
> ИМХО.
>

Твоими бы молитвами! Да только "среднестатистические" идут другими путями.


Zorro2001   (2007-01-10 02:40:00) [3]


> GrayFace ©   (10.01.07 00:55) [10]

форум последнее дело... сначала справка.. потом кцуча справочников.. потом поиск в тырнете.. а уже потом форум...
ИМХО.


GrayFace   (2007-01-10 00:55:00) [4]

Впервые встречаю человека, который вначале гуглит, а потом спрашивает на форуме. Это ж нерационально, проще спросить и самому не мучаться. :)


koha   (2007-01-10 00:36:00) [5]

- А алгоритм моего поиска решения задачи не совсем верный, который вы представили. Все вовсе не так и было. Сперва я открыл справку и не хрена не понял так, как там языком Била Гейтса написано было, затем целое утро с 4:00 до 10:00 гуглил решение - нашел нетак уж много всяких способов и в основном у "птицеводов", что-  на вроде подобных:
1. способ
INT_PTR CALLBACK _CustomDialogProc
 ( HWND hwndDlg,
 UINT uMsg,
 WPARAM wParam,
 LPARAM lParam
 )
{
 if (WM_COMMAND == uMsg)
   ::EndDialog(hwndDlg, LOWORD(wParam));

 return FALSE;
}
int nRet = ::DialogBoxParam(hInstance, MAKEINTRESOURCE(ID_CUSTOMDIALOG),
   NULL, _CustomDialogProc, 0);


2. способ
LRESULT _CustomMessageBoxInit(HWND hwndDlg, _SCustomMessageBoxParam *pInit)
{
 // Расстояние между кнопками, а также бордюр
 const int  nBorder = 11;

 UINT    uType = pInit->m_uType;
 RECT    rect;
 RECT    rectButton;
 int    nVisibleButtons = 0;
 int    nVisibleButtonsWidth = 0;
 HDC    hdcDlg;
 HWND    hwndText = ::GetDlgItem(hwndDlg, ID_MSGBOXTEXT);

 // Заголовок окна
 if (pInit->m_lpCaption)
   ::SetWindowText(hwndDlg, pInit->m_lpCaption);

 // Текст окна
 ::SetWindowText(hwndText, pInit->m_lpText);

 // Включаем нужные кнопки
 nVisibleButtons = _CustomMessageBoxShowButtons(hwndDlg, uType);

 // Устанавливаем иконку
 _CustomMessageBoxSetIcon(hwndDlg, uType);

 // Подсчитываем размер текста
 ::GetClientRect(hwndText, &rect);
 rect.top = rect.left = nBorder;
 rect.right += nBorder;
 rect.bottom = 0;

 hdcDlg = ::GetWindowDC(hwndDlg);
 ::DrawText(hdcDlg, pInit->m_lpText, -1, &rect,
        DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK | DT_CALCRECT);
 ::ReleaseDC(hwndDlg, hdcDlg);

 ::SetWindowPos(hwndText, NULL, rect.left, rect.top,
   rect.right - rect.left, rect.bottom - rect.top,
   ((MB_ICONMASK & uType) ? SWP_NOMOVE : 0 )
   | SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE);

 if (MB_ICONMASK & uType)
 {
   int nIconHeight = ::GetSystemMetrics(SM_CYICON);
   if (rect.bottom - rect.top < nIconHeight)
     rect.bottom = rect.top + nIconHeight;
 }

 // Расставляем кнопки
 ::GetClientRect(::GetDlgItem(hwndDlg, IDOK), &rectButton);
 nVisibleButtonsWidth = (nVisibleButtons * (rectButton.right + nBorder));
 if (rect.right < nVisibleButtonsWidth)
 {
   rect.right = nVisibleButtonsWidth;
   _CustomMessageBoxInitPositionButtons(hwndDlg, nBorder, rect.bottom,
     nBorder + rectButton.right, (uType & MB_DEFMASK) >> 8);
 }
 else
 {
   _CustomMessageBoxInitPositionButtons(hwndDlg,
     (rect.right - nVisibleButtonsWidth) / 2, rect.bottom,
     nBorder + rectButton.right, (uType & MB_DEFMASK) >> 8);
 }

 // Пересчитываем размеры самого диалога
 rect.right += nBorder * 2;
 rect.bottom += (rectButton.bottom + nBorder * 2);

 ::AdjustWindowRectEx(&rect, ::GetWindowLong(hwndDlg, GWL_STYLE)
   , FALSE, ::GetWindowLong(hwndDlg, GWL_EXSTYLE));
 _CenterWindow(hwndDlg, &rect);

 return 0;
}


- и ни хрена не нашел на делфи  (теперь я понимаю почему они бедные люди), а потом уже я задал вопрос на форуме, а еще
через 15 минут и сам догнал


Anatoly Podgoretsky   (2007-01-09 14:17:00) [6]

> palva  (09.01.2007 12:42:07)  [7]

Нормальные герои всегда идут в обход.


palva   (2007-01-09 12:42:00) [7]

Справка - последнее дело.
Сначала нужно тыкать, потом спросить у соседа, потом спросить на форуме, потом поискать в интернете. И уж если все равно не работает, читать справку.


Джо   (2007-01-09 08:34:00) [8]

> [4] koha ©   (09.01.07 08:12)
> Победил - таки  методом научного втыка

Странный подход долго и нудно тыкать, когда есть Справка.


koha   (2007-01-09 08:13:00) [9]

Долго шло мое сообщение, жаль.


koha   (2007-01-09 08:12:00) [10]

Победил - таки  методом научного втыка
Диалог + юбая  Иконка, надо сделать так:

MessageBox(Handle, 'Иконка и диалог "да" "Нет" ', 'Внимание', MB_YESNO or MB_ICONWARNING );


Джо   (2007-01-09 08:11:00) [11]

> [2] koha ©   (09.01.07 08:03)
> Несовсем то..
> надо диаог
> Application.MessageBox('Получите!', 'Вам картиночку?',MB_YESNO)
>
> а иконку от MB_ICONWARNING

Application.MessageBox('Получите!', 'Вам картиночку?',MB_YESNO or MB_ICONWARNING)


koha   (2007-01-09 08:03:00) [12]

Несовсем то..
надо диаог
Application.MessageBox('Получите!', 'Вам картиночку?',MB_YESNO)
а иконку от MB_ICONWARNING


ЮЮ   (2007-01-09 07:50:00) [13]

Application.MessageBox('Получите!', 'Вам картиночку?', MB_ICONQUESTION);
А так жк можно несколько кнопочек и любую из них - по умолчанию.


Наверх

Титульная страница Поиск, карта сайта Написать письмо