Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > Свой ShowMessage |
Автор: mspuz 3.2.2007, 21:13 |
Решил написать свой вариант ShowMessage, но добавив некоторые украшательства ![]() Создал модуль, в который поместил код создания API окна. 1. Какой стиль нужно указать, чтобы окно было дочерним и желательно без заголовка. 2. Как закрыть именно это окошко при нажатии на кнопку (расположенную на этом окне). Сейчас я использую WS_POPUP и закрытие Halt (закрывается все приложение). В CreateWindowEx есть параметр(WndParent), который отвечает за отношение к главному окну, как его использовать? |
Автор: mspuz 3.2.2007, 21:58 |
Разобрался, как вызвать окно, как дочернее. Но как сделать, чтобы родительское окно в это время стало недоступным, т.е. вызвать окно, как модальное. И еще как правильно использовать DestroyWindow. |
Автор: RideX 3.2.2007, 22:04 |
Нет такой API функции, это всё происки Delphi. Используйте MessageBoxA/MessageBoxW, MessageBoxTimeoutA/MessageBoxTimeoutW, там есть и стандартные значки ошибки, предупреждения, вопроса, информации и кнопки какие хочешь в разном сочетании. Извините, но то что Вы задумали выглядит просто как-то несерьёзно, ИМХО ![]() |
Автор: mspuz 3.2.2007, 22:08 |
RideX, А если я хочу добавить возможность изменить цвет формы, цвет текста, прозрачность и форму окна - как мне поможет MessageBox? Я использую DestroyWindow для созданного окна, но после этого мне нужно ДВАЖДЫ нажать на кнопку закрытия для главного окна, чтобы приложение завершилось!!!! И что это значит??? |
Автор: RideX 3.2.2007, 22:37 | ||
В таком случае конечно MessageBox не поможет.. Зачем всё это информационному сообщению? Программа, конечно, должна выглядеть стильно и выдержанно, а разукрашенные в разные цвета и нестандартные формы и шрифты выглядят по клоунски и больше самхивают на поделки какого-нибудь пятиклассника вызывают только раздражение. Всё это, конечно, только моё ИМХО.
Parameters hWnd [in] Handle to the window to be destroyed. Return Value If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. |
Автор: RideX 3.2.2007, 22:47 | ||||||
Вообще, конечно непонятно, зачем Вы это делаете? Посылайте сообщение
и
После WinMain не забудьте про ExitProcess
|
Автор: mspuz 3.2.2007, 23:36 |
RideX, Мне нужно что бы закрылось только лишь дочернее окно. Если использовать ExitProcess(0), то завершается всё приложение. Использую SendMessage(hMainWnd, WM_CLOSE, 0, 0) - окно исчезает, но сам процесс видимо остаётся, потому что для закрытия основного окна требуется выполнить комманду Close дважды!!! |
Автор: VladBD 4.2.2007, 11:02 | ||
Посмотри Dialogs.pas - может имеет смысл сделать также как там, только со своими цветами и примочками. Вот как рисуется InputQuery.
|
Автор: mspuz 4.2.2007, 11:44 |
А как сделать, чтобы родительское окно стало недоступным? Нашел в справке: wm_Activate Уведомляет окно, что оно становится активным или неактивным. Паpаметpы: wParam: Если wParam=0, окно активно. Если wParam=1, окно активизиpуется чем то дpугим, а не щелчком мыши. Если wParam=2, окно активизиpуется щелчком мыши. Посылаю сообщение с wParam=1, но окно становится активным при щелчке мыши! Кстати, чтобы закрыть дочернее окно помогло: PostQuitMessage(0); DestroyWindow(DHwn); |
Автор: mspuz 4.2.2007, 12:54 |
При регистрации класса окна задаётся параметр hbrBackground, определяющий фон окна. Можно ли использовать любой цвет(и как его конвертировать, например $00FF000000), или только системные константы COLOR_? |
Автор: VladBD 4.2.2007, 13:11 |
При создании формы сообщения там указан ShowModal - это скорей всего и есть то, что указывает на недоступность главной формы пока не закрыто это окно. А при создании формы - есть canvas на котором можно рисовать и заливать цветом. |
Автор: Damarus 4.2.2007, 13:15 | ||
http://msdn.microsoft.com/library/en-us/gdi/brushes_52y0.asp |
Автор: mspuz 4.2.2007, 13:27 |
Damarus, Т.е. hbrBackground := CreateSolidBrush($00FFFFFF)? Не помогает!!! |