Проблемы переключения фокуса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Проблемы переключения фокуса

Сообщение dima-pol » 31.01.2011 (Пн) 22:50

Приложение стартует с Form1 (невидима) и запускает ee таймер, который выдает в определенный момент (через 5сек) на экран Form2 с TextBox. Я хотел, чтобы в этот момент фокус ввода переместился в TextBox на Form2, даже если в этот момент он в другом приложении (например в NotePad). Как этого добиться? Спасибо.


Код: Выделить всё
Private Sub Form_Load()
Timer1.Interval = 5000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
Form2.Text1.SetFocus
End Sub


Заголовок Form2 моргает 3 раза, но TextBox не получает фокус ввода.
Вложения
myFocus.zip
(4.79 Кб) Скачиваний: 55

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Проблемы переключения фокуса

Сообщение Rody66 » 01.02.2011 (Вт) 1:11

Форма1:
Код: Выделить всё
Private Sub Form_Load()
Timer1.Interval = 5000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
End Sub

Форма2:
Сперва создайте таймер под именем Timer2
Private Sub Form_Load()
Timer2.Interval = 100
Timer2.Enabled = True
End Sub

Private Sub Timer2_Timer()
Timer2.Enabled = False
Text1.SetFocus
End Sub

dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Re: Проблемы переключения фокуса

Сообщение dima-pol » 01.02.2011 (Вт) 20:58

Rody66,

Ваш пример не работает - фокус ввода остается в Notepad
Вложения
myFocus.zip
(4.97 Кб) Скачиваний: 50

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Проблемы переключения фокуса

Сообщение Хакер » 01.02.2011 (Вт) 21:08

dima-pol, такое понятие как «foreground window» тебе о чём-нибудь говорит? Если нет, исправь эту ситуацию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Проблемы переключения фокуса

Сообщение Rody66 » 01.02.2011 (Вт) 21:30

dima-pol, только что проверил, все сработало, винда семера.
Или я вас не так или у вас иные проблемы.
Попробуйте тогда вот еще что:
Форма1:
Код: Выделить всё
Private Sub Form_Load()
Timer1.Interval = 5000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
Form2.SetFocus
End Sub


форма2:
Код: Выделить всё
Private Sub Form_Load()
Timer2.Interval = 100
Timer2.Enabled = True
End Sub

Private Sub Timer2_Timer()
Timer2.Enabled = False
me.SetFocus
Text1.SetFocus
End Sub

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Проблемы переключения фокуса

Сообщение Sam777e » 02.02.2011 (Ср) 13:14

Не имею возможности проверить, но не поможет ли волшебное слово vbModal ?
Здоровья и удачи

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Проблемы переключения фокуса

Сообщение Хакер » 02.02.2011 (Ср) 13:15

Гадание и волшебные слова — на другом форуме, пожалуйста.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Re: Проблемы переключения фокуса

Сообщение dima-pol » 03.02.2011 (Чт) 23:56

Rody66,
Я запускаю Ваш 2й пример, потом перевожу фокус на Notepad, через 5 сек появляется Form2, (но она на заднем плане, высовывается из-за Notepd, ), заголовок Form2 моргает 3 раза, я набираю текст и он появляется в Notepd, а мне надо чтобы - в TextBox из Form2.
Замечу, что при этом текстовый курсор мигает и в Notepd и в TextBox из Form2.
У меня WinXP.

Хакер,
Следущий код не меняет картину:
Код: Выделить всё
Private Sub Form_Load()
Timer1.Interval = 5000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
SetForegroundWindow Form2.hwnd
Form2.Text1.SetFocus
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Проблемы переключения фокуса

Сообщение Хакер » 04.02.2011 (Пт) 5:15

dima-pol писал(а):Следущий код не меняет картину:

И совершенно правильно.

В некоторый момент в Windows стало запрещено одному приложению перетягивать на себя одеяло фореграундность с другого приложения. И это правильно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Re: Проблемы переключения фокуса

Сообщение dima-pol » 04.02.2011 (Пт) 21:29

Ок, остается одно - имитировать клик мышки по TextBox

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Проблемы переключения фокуса

Сообщение Хакер » 05.02.2011 (Сб) 6:20

Откуда такая наглость?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Проблемы переключения фокуса

Сообщение FireFenix » 05.02.2011 (Сб) 16:15

Никогда не побывал такое, и меня тоже заинтересовал вопрос :)

Через SwitchToThisWindow мы можем вывести окно на передний план
Но т.к. МС проводит политику относительно SetForegroundWindow, то без неё нельзя установить фокус на своё окно?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Re: Проблемы переключения фокуса

Сообщение dima-pol » 10.02.2011 (Чт) 18:47

В моем случае нашлось очень простое решение - надо при запуске программы сделать Form1 (или Form2) видимой хотя-бы на мгновение. Т.е. в VB6 устанавливаем для Form1 Visible = True и ипользуем код:

Код: Выделить всё
Private Sub Form_Load()
Timer2.Interval = 10
Timer2.Enabled = True

Timer1.Interval = 5000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
Form2.Text1.SetFocus
End Sub

Private Sub Timer2_Timer()
Me.Visible = False
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 56

    TopList