Страница: 1 |
А ты отображаи форму не по процедуре, а по функций При нажатий на одну из кнопок присваиваи переменнои определенное значение и возвращаи его из функций Понял или нет? Я именно так и хочу сделать, но я не сталкивался с такими вещами и не знаю как правильно заблокировать выполнение программы на время отображения формы "MessageBox" и вернуть переменную в процедуру. У меня: 1. Запрос в процедуру на отображения формы "MessageBox" с кнопками "Да" и "Нет" и текстом "Выйти?" 2. Процедура настраивает форму "MessageBox" с нужными параметрами и отображает ее. 3. И вот тут продолжает выполняться следующий за процедурой оператор. Т.е. процедура не ждет даже, пока я кнопку нажму на форме "MessageBox" Какие будут предложения? Зараннее благодарен. В свою процедуру - Do: DoEvents: Call Sleep(10&): Loop, и проверяй переменную, по нажатию на кнопку, изменяй эту переменную на индекс (номер) кнопки и передавай в качестве возвращаемого значения функции, возможно и мною предложеный способ не будет работать, но то что предложил 2San, работать не будет точно, видимо он не понял сути вопроса... 2 2San: Вот так, возможно, будет, видимо я немножко не понял что ты имел в виду... Приношу извинения Зря... все-ж на них, родимых, висит Висит то на них, но лишний создавать все равно не стоит. Тем более на VB ) Для сего существуют модальные окна. Способов передать индекс нажатой клавиши от модальной к основной форме множество, но я всегда старался вынести в модальную форму и те процедуры, которые по нажатии выполняются. Затем - unload me... Страница: 1 |
Вопрос: Собственное MsgBox
Добавлено: 21.03.04 10:54
Автор вопроса: S.W.I.F.T.
Решил создать свое MsgBox, но возник вопрос. Мой MsgBox - отдельная форма
с кнопками и надписями. По процедуре я настраиваю кнопки, размеры и
т.д. Отображаю форму. Но, как получить ответ в процедуру на вопрос "Какая кнопка
была нажата?"
Либо, если есть такие предметы подскажите где взять (ведь не думаю что
только мне приходила в голову такая идея). Спасибо!
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 21.03.04 11:02
Номер ответа: 2
Автор ответа:
S.W.I.F.T.
Вопросов: 8
Ответов: 6
Профиль | | #2
Добавлено: 21.03.04 13:05
Номер ответа: 3
Автор ответа:
2San
Вопросов: 11
Ответов: 68
Профиль | | #3
Добавлено: 21.03.04 13:14
Показывай свою форму (мессаджбокс которая) так: Form1.Show 1, frmMainForm
При этом она станет модальной по отношению к frmMainForm и пока ты ее не
закроеш делать ничего в frmMainForm не сможеш
Сан Саныч
mailto:apexsun@narod.ru -=•=- http://apexsun.narod.ru -=•=- ICQ:273825121
> Origin: Полковники не бегают, так как в мирное время это вызывает смех, а в военное - панику.
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 21.03.04 14:10
Номер ответа: 5
Автор ответа:
S.W.I.F.T.
Вопросов: 8
Ответов: 6
Профиль | | #5
Добавлено: 21.03.04 14:20
Да, наверное, прийдется воспользоваться этим вариантом, хотя очень
нелюблю такие вечные циклы использовать. Ладно, спасибо Sne!
Номер ответа: 6
Автор ответа:
2San
Вопросов: 11
Ответов: 68
Профиль | | #6
Добавлено: 21.03.04 14:32
>> возможно и мною предложеный способ не будет работать, но то что предложил 2San, работать не будет точно, видимо он не понял сути вопроса...
Может твой способ и будет работать, но проц при этом будет делать "дурную
работу" (чит. ни кому не нужную).
Короче, расписываю чего я имел ввиду:
'на уровне модуля пишешь:
Public cmdRet As Long
Public Function MyMsgBox(.... parameters ....)
cmdRet = 0
frmMsgBox.Show 1, frmMainForm
MyMsgBox = cmdRet
End Function
'в форме frmMsgBox пишешь:
Private Sub cmd_Click(Index As Integer)
cmdRet = Index
Unload Me
End Sub
'на форме (Yes, No, Cancel etc.) - кнопки (массив кнопок) с именами "cmd" и соотв. индексами.
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 21.03.04 15:10
А вот на счет цикла бесконечного, ты не прав! Если был бы ты более внимателен, то заметил функцию Sleep(10&). Это по любому не будет загружать процессор.
А теперь на счет любви к бесконечным циклам:
Ты знаешь почему одна форма, без всякого кода остается на экране а не выгружается сама собой, при при завершении процедуры, как, например, Sub Main ?
Посмотри MSDN, например, функцию TranslateMessage, и глянь пример... Ну как теперь ты относишься к бесконечным циклам ???
Для тех у кого нет MSDN, а например глянуть хочется, описание уж сюда не стану кидать, но пример собственно вот:HWND hwndMain;
HWND hwndDlgModeless = NULL;
MSG msg;
BOOL bRet;
HACCEL haccel;
//
// Perform initialization and create a main window.
//
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
if (hwndDlgModeless == (HWND) NULL ||
!IsDialogMessage(hwndDlgModeless, &msg) &&
!TranslateAccelerator(hwndMain, haccel,
&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
Номер ответа: 8
Автор ответа:
2San
Вопросов: 11
Ответов: 68
Профиль | | #8
Добавлено: 21.03.04 16:22
> Ну как теперь ты относишься к бесконечным циклам ???
Так же, как и раньше - лучше когда без них
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 21.03.04 22:44
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 22.03.04 09:57