02.07.2003, 16:22 | #1 |
Гость
|
Модальный диалог
как вызвать ?
|
|
02.07.2003, 17:06 | #2 |
Участник
|
Это где-то на форуме уже было.
Только если я не ошибаюсь, при использовании этого способа, есть какой-то побочный эффект, он проявляется когда вызываешь из модальной формы другое модальное. PHP код:
|
|
02.07.2003, 23:22 | #3 |
Участник
|
Вай, кошмар какой!
Юрий, а проще разве никак нельзя? На самом деле я не знаю. Но точно надо обращаться к WinAPI? |
|
03.07.2003, 08:57 | #4 |
----------------
|
Проще можно только стандартный MessageBox через статические методы класса Box.
Box:: okCancel() |
|
03.07.2003, 10:12 | #5 |
Участник
|
2mazzy
Описан метод с помощью которого я в Аксапате делаю модальной любую форму. Другого метода я не знаю. И думаю что это правильно, так как соответствует концепции MDI. Иногда мне приходится применять этот метод. Но в принципе если конечный пользователь довольно продвинут, то можно вообще избежать модальных форм. 2Wamr Я про это знаю, но мне было не понятно, что под словосочетанием "Модальный диалог" подразумевает ahtoh. И поэтому я написал универсальный способ. |
|
03.07.2003, 10:17 | #6 |
Участник
|
Yuri Safronov, понял. Спасибо
Wamr, Box наследует от DialogBox, который в свою очередь вызывает WinAPI. Жалко, что стандартными средствами модального диалога сделать нельзя. Правда мне никогда он еще не нужен был. Но на всякий случай, все равно жалко |
|
03.07.2003, 10:29 | #7 |
----------------
|
2mazzy
практически любое действие в Windows приводит в конечном итгое к вызову WinAPI |
|
03.07.2003, 10:39 | #8 |
Участник
|
Wamr, так то так. Но где то вызовом АПИ занимается ядро, а где то ручками приходится писать... Ладно бог с ним.
Yuri Safronov, ahtoh, наверняка вы рассамтривали возможность просто взвести галочку Always on Top. Это не совсем модальность, но для пользователя особой разницы не ощущается. Почему не стали рассматривать возможность использования этой галочки вместо того, чтобы городить код? |
|
03.07.2003, 10:45 | #9 |
Участник
|
2mazzy
Это не модальность |
|
03.07.2003, 10:51 | #10 |
----------------
|
Always on top
2mazzy
Такая "модальность" легко приводит к случайным глюкам например таким http://www.axforum.info/forums/showt...=6437#post6437 |
|
03.07.2003, 11:27 | #11 |
Участник
|
Модальный диалог
Буквально дня два назад сделал то же самое (как мысли сходятся), если бы раньше опублиуовал не пришлось бы голову ломать))).
Правда есть еще одна задумка, как сделать форму модальной по отношению только к вызвашей ))) |
|
03.07.2003, 11:44 | #12 |
----------------
|
Пользуйтесь поиском
|
|
03.07.2003, 12:41 | #13 |
Участник
|
Модальное только по отношению к вызвавшему
А вот так еще можно ограничить модальность, т.е окно будет модальное только по отношению к окну которое его вызвало
public static void setFormModal_toPrevHWND(int thisHWND, int prevHWND, boolean bModal) { DLL winApiDLL; DLLFunction EnabledWindow; DLLFunction getNext; void local_enableWHND(int lhWnd) { while (lhWnd) { enabledWindow.call(prevHWND, (! bModal)); lhWnd = getNext.call(lhWnd, 2); } } ; winApiDLL = new DLL('user32'); getNext = new DLLFunction(winApiDLL, "GetWindow"); EnabledWindow = new DLLFunction(winApiDLL, "EnableWindow"); EnabledWindow.returns(ExtTypes::DWORD); EnabledWindow.arg(ExtTypes::DWORD, ExtTypes::DWORD); getNext.returns(ExtTypes::DWORD); getNext.arg(ExtTypes::DWORD, ExtTypes::DWORD); local_enableWHND(thisHWND); } |
|
|
За это сообщение автора поблагодарили: kashperuk (4). |
03.07.2003, 14:12 | #14 |
Участник
|
Re: Always on top
Цитата:
Изначально опубликовано Wamr
2mazzy Такая "модальность" легко приводит к случайным глюкам например таким http://www.axforum.info/forums/showt...=6437#post6437 Но я бы все же пользователей учить стал. Иначе всю Аксапту переписывать надо. Ок. Понял. Пошел за попкорном. Буду дальше смотреть на интересную дискуссию. |
|
13.08.2003, 07:58 | #15 |
Участник
|
Функция "GetWindow" находится в "user32"
например PHP код:
PHP код:
А где находится функция "CreateProcess" ? |
|
13.08.2003, 08:00 | #16 |
Участник
|
А также функция "WaitForSingleObject" ?
|
|
13.08.2003, 10:32 | #17 |
Участник
|
PHP код:
Просто функции CreateProcess нет, а есть CreateProcessA CreateProcessW Про различия между A и W можно прочитать здесь: http://www.axforum.info/forums/showt...7471#post17471 А вот функция WaitForSingleObject есть, без всяких там A и W. В ней они просто не нужны. |
|
13.08.2003, 10:35 | #18 |
----------------
|
MSDN
|
|
13.08.2003, 12:35 | #19 |
Banned
|
И еще немного о DialogBox
Маленький комментарий ко второму варианту модального окна согласно Wamr (с помощью MessageBox). Передо мной встала задача создать такое модальное окно, при котором бы в Axapty не посылалось бы вообще никаких сообщений. Стандарно так ведет себя только Box::stop(), но в этом варианте диалога только одна кнопка. Вот код, который эмулирует аксартовский DialogBox, причем создает диалоги, полностью блокирующие окно Аксапты:
PHP код:
|
|
27.08.2007, 07:10 | #20 |
Постигающий
|
А я сделал проще...У меня есть форма с кнопкой, по которой вызывается диалог. Стало необходимо сделать этот диалог "модальным". Сделал следующим хитрым способом:
1) в методо dialog добавил dialog.windowType(FormWindowType::PopUp), теперь диалог всегда поверх остальных окон. 2) по клику кнопки, вызывающей диалог отрабатывает метод, выключающий enabled всех контролов формы. X++: void enabled(boolean _enabled) { int ctrlCount, i; ctrlCount = element.design().controlCount(); for (i = 1; i <= ctrlCount; i++) { element.design().controlNum(i).enabled(_enabled); } } |
|
|
Похожие темы | ||||
Тема | Ответов | |||
финансовые аналитики в диалог | 6 | |||
Диалог на отчете, то работает, то нет | 6 | |||
Диалог в наследнике SalesReport_Invoice_RU | 21 | |||
Диалог открытия файлов | 1 | |||
Свой диалог фильтра | 7 |
|