Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 369
от 10.09.2006, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 196, Экспертов: 36
В номере:Вопросов: 4, Ответов: 14


Вопрос № 54339: Здравствуйте! Очередная проблемма! Как сделать окно модальным в Microsoft Visual Basic 6.0 Private Sub Command2_Click() Program.Show End Sub...
Вопрос № 54377: если есть 2 формы (первая наполовину закрыта второй) как сделать чтобы при нажатии на первую форму она не всплывала над второй...
Вопрос № 54400: Здраствуйте. Помогите плиз, нужны функции для генерации звуков(желательно из колонок) разной тональности(звуков разной высоты) и нужна функция(а лучше чтобы это было событие) для получения этих звуков и распознания с микрофона. Помогите плиз!...
Вопрос № 54413: Здравствуйте уважаемые эксперты Работая с Microsoft Excel и Microsoft Word, я столкнулся с одной проблемой: несколько VB операторов не работают в определенных версиях Microsoft Excel и Microsoft Word. Например: Sheets.Copy, Kill, Put (в Open test...

Вопрос № 54.339
Здравствуйте! Очередная проблемма! Как сделать окно модальным в Microsoft Visual Basic 6.0

Private Sub Command2_Click()
Program.Show
End Sub
Отправлен: 04.09.2006, 23:06
Вопрос задал: ataman (статус: 2-ой класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Неверов
Здравствуйте, ataman!
Очень просто: в команду Show добавьте слово vbModal, вот как в приложении:

Приложение:

Ответ отправил: Евгений Неверов (статус: Студент)
Ответ отправлен: 05.09.2006, 00:08
Оценка за ответ: 5

Отвечает: Александр Шевченко
Здравствуйте, ataman!
В дополнение к ответу Евгения Неверова:
[имя_формы].Show vbModal, Me
Ключевое слово Me сдесь указывает, что родителем модальной формы будет являться текущая форма. Также вместо Ме можно указать любую из форм вашего проекта.
---------
Вместо внутренней почты лучше стучитесь в аську - 299739804
Ответ отправил: Александр Шевченко (статус: Студент)
Ответ отправлен: 05.09.2006, 09:11

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, ataman!

Не оспаривая верности и полноты предыдущих ответов, предлагаю этот как пример еще одного решения:

Program.Show, 1

По умолчанию VB создает форму немодальной (0). Объявление "Program.Show" предполагает установку по умолчанию нуля, который опускается. Единицу же ставить обязательно, если форма должна быть модальной.
---------
Труд сделал обезьяну человеком, а лень человека - программистом !
Ответ отправил: Кокорич Вадим Леонидович (статус: 6-ой класс)
Ответ отправлен: 05.09.2006, 09:23

Отвечает: Митрофанов Артем Борисович
Здравствуйте, ataman!
После кода Program.Show добавьте 0(Program.Show 0). Есть еще другой уровень модальности(1), но лично его не использую. Удачи!
Ответ отправил: Митрофанов Артем Борисович (статус: 3-ий класс)
Ответ отправлен: 05.09.2006, 17:07

Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, ataman!
Form1.Show vbmodal
Form1.Show vbmodal, Form0
Form1.Show vbmodeless - этот вариант держит Вашу форму всегда наверху, но и позволяет работать с той, что под ней.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 09.09.2006, 14:50


Вопрос № 54.377
если есть 2 формы (первая наполовину закрыта второй) как сделать чтобы при нажатии на первую форму она не всплывала над второй
Отправлен: 05.09.2006, 10:57
Вопрос задал: Ars 11 www (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Михаил Александрович
Здравствуйте, Ars 11 www!
Если я правильно понял вторая форма должна быть модальной.
Тогда
Form2.Show 0, Me
---------
В Интернете всегда есть место подвигу ... даже в чатах!
Ответ отправил: Михаил Александрович (статус: 4-ый класс)
Ответ отправлен: 05.09.2006, 11:10
Оценка за ответ: 2

Отвечает: PsySex
Здравствуйте, Ars 11 www!
>>Fsl
>>Если я правильно понял вторая форма должна быть модальной.
Вы правильно поняли, но неправильно ответили кодом :-)
Вот правильный код, вызываем вторую форму из первой:

Form2.Show (1)
Ответ отправил: PsySex (статус: Студент)
Ответ отправлен: 05.09.2006, 11:26

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, Ars 11 www!

Можно сделать это и так: добавить в обработку событий Form1_Click и Form1_DbClick строку Form2.SetFocus.
Пример: в программе две формы Form1 и Form2. Сделайте Form1 побольше и установите свойство StartUpPosition = 2(CenterScreen), вторую - поменьше наполовину, StartUpPosition = 1(CenterOwner). Добавьте кнопку Command1, при нажатии на которую появляется Form2 (не модальная!).

Private Sub Command1_Click()
Form2.Show
End Sub

Private Sub Form_Click()
On Error GoTo 1
Form2.SetFocus
1:
Exit Sub
End Sub

Private Sub Form_DblClick()
On Error GoTo 1
Form2.SetFocus
1:
Exit Sub
End Sub

Самое интересное: если щелкать по первой форме где угодно, кроме заголовка - она не будет находиться поверх второй. Если щелкнуть по заголовку окна - она закроет вторую. Щелкнув после этого в любом месте Form1, кроме заголовка, Вы снова активируете Form2. Интересно в этом примере то, что немодальная форма производит впечатление модальной. Может, этот фокус Вам и пригодится где-нибудь.
---------
Труд сделал обезьяну человеком, а лень человека - программистом !
Ответ отправил: Кокорич Вадим Леонидович (статус: 6-ой класс)
Ответ отправлен: 05.09.2006, 20:28
Оценка за ответ: 4

Отвечает: Bonapart
Здравствуйте, Ars 11 www!
Через WinApi или просто
form2.setfocus иногда срабатывает

статья из учебника на эту тему
переведи

Приложение:

Ответ отправил: Bonapart (статус: 1-ый класс)
Ответ отправлен: 06.09.2006, 07:23
Оценка за ответ: 1

Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Ars 11 www!
Тут решений мало: либо выведите вторую форму модально (form2.show vbmodal,form1), либо обработайте Form_Activate, Form_Click первой формы или напишите в Form_deactivate второй формы form2.setfocus. Можно еще поизголяться на АПИ обработкой сообщений, но тут это лишнее. Лучше всего выведите форму модально либо в полумодальном режиме (form2.show vbmodeless,form1) - тогда первая форма не будет перекрывать вторую, а при необходимости еще и можно поработать с первой формой - первая форма активируется, но не перекрывает вторую форму (вторая всегда наверху).
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 09.09.2006, 14:43


Вопрос № 54.400
Здраствуйте. Помогите плиз, нужны функции для генерации звуков(желательно из колонок) разной тональности(звуков разной высоты) и нужна функция(а лучше чтобы это было событие) для получения этих звуков и распознания с микрофона. Помогите плиз!
Отправлен: 05.09.2006, 14:42
Вопрос задал: ElectronPRO (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, ElectronPRO!

Подобная задача просто решается в FoxPro для DOS (первая часть вопроса), однако в VB будут трудности с этим. Из функций VB для работы с генерацией звука мне припоминается только Beep, которая подает короткий звуковой сигнал через спикер системного блока (если он имеется). Если встроенного динамика нет - эффекта вообще никакого. Что касается второй части вопроса - все далеко не так просто, как, возможно, Вам кажется. Выход во втором случае, я думаю - функции API для работы со звуком, какие именно и как их применить - рассылка WinAPI.
---------
Труд сделал обезьяну человеком, а лень человека - программистом !
Ответ отправил: Кокорич Вадим Леонидович (статус: 6-ой класс)
Ответ отправлен: 05.09.2006, 20:23

Отвечает: Bonapart
Здравствуйте, ElectronPRO!
Поищи на VBstreets.ru
там есть такая темы
Захват звука при помощи DirectX8
DirectX7_ Введение в DirectSound
как раз по второму вопросу
а к первому хочется прибавить
этот текст из учебника по WinApi

не забудь перевести

Приложение:

Ответ отправил: Bonapart (статус: 1-ый класс)
Ответ отправлен: 06.09.2006, 07:20


Вопрос № 54.413
Здравствуйте уважаемые эксперты
Работая с Microsoft Excel и Microsoft Word, я столкнулся с одной проблемой: несколько VB операторов не работают в определенных версиях Microsoft Excel и Microsoft Word. Например: Sheets.Copy, Kill, Put (в Open test For Random As #1 Len = Len(val1)) операторы работают нормально в Office 2002 и Office 2007 хотя не работают Office 2003.
Подскажите в чем дело.
За ранее спасибо
Отправлен: 05.09.2006, 15:25
Вопрос задал: Malkhazi (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PsySex
Здравствуйте, Malkhazi!
Думаю, что в Office 2003 увеличен уровень безопасности, а опасность представляют команды для работы с файлами. Может если понизить уровень безопасности(Сервис/Макрос/Безопасность) команды и заработают.
Ответ отправил: PsySex (статус: Студент)
Ответ отправлен: 05.09.2006, 16:18

Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Malkhazi!
Тут с безопасностью проблемы. Понизьте уровень и все должно быть нормально.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 09.09.2006, 14:33


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное