Без потери фокуса.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Без потери фокуса.

Сообщение Крост » 15.08.2005 (Пн) 1:55

Есть две формы, одна что-то вроде главной, вторая дополнительная (ну и объяснил %)). Нужно показать вторую форму НЕ модально, без потери фокуса первой и НЕ отображения второй формы в панели задач.
Заранее благодарю. =)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 2:08

В frmMain frmOne.Show vbModeless, Me
В frmOne при загрузке frmMain.SetFocus
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.08.2005 (Пн) 2:09

Form2 поставь BorderStyle = 4.
Потом
Код: Выделить всё
Private Sub Command1_Click()
  With New Form2
    .Show , Me
  End With
  Me.SetFocus
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 2:11

И тут я понял что ступил...
2BV - не пойдёт, потому что вторая фокус теряет...
а мне надо: чтобы у первой в панели задач был фокус, т.е. как у выбранного окна, а у самой формы фокуса не было, фокус должен быть у второй открытой формы..
Млин..видать сильно загнул..если кто не поймёт, постараюсь по-русски объяснить..=)

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 2:14

Да, у второй формы чтобы можно было менять размеры...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 3:05

Две формы в фокусе - это глюк.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 3:24

Не...я не про две формы в фокусе...главная форма имеет вид выделенного окна в панели задач, но внешний вид окна как при потере фокуса, а второе окно не отображается в панели задач, но внешний вид выделенного окна. по-крайней мере на дельфях так мона, но ненаю как...=(

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 4:06

За видимость формы на панели задач отвечает Me.ShowInTaskbar, за второе...
Код: Выделить всё
Private Declare Function FlashWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 4:07

Такс....а если ещё дальше пойти, т.е. примерчик...буду благодарен..=)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 4:07

hWnd соответственно как hWnd главного окна.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 4:20

Не, попробовал...не то..

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 4:20

...
Вложения
Example.rar
(1.41 Кб) Скачиваний: 46
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 4:26

Не...не то...не то..=(

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 4:58

постараюсь объяснить так, как меня понял BV.
Все окна программы как одно окно программы в таскбаре. Т.е. при появлении любого окна, стиль отображения "прямоугольника" в таске не меняеться, а остаётся таким же, т.е. выделеным.

Может кто примером поможет?

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 16:54

Не верю, что никто не знает как решить эту проблему...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 16:58

Ох... Создавай окно через CreateWindowEx, или используй SetWindowLong, будет работать именно так, как если вызовешь окно общего диалога из VB.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 15.08.2005 (Пн) 18:52

2Крост:Ты можешь задать свой вопрос на десятке форумов, но если ты не будешь читать все ответы, то толку не будет :evil:
Вот пример:
Код: Выделить всё
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const WS_CHILD = &H40000000
Private Const GWL_STYLE = (-16)

Private Sub Form_Load()
    Form2.Show
    SetWindowLong Form2.hwnd, GWL_STYLE, GetWindowLong(Form2.hwnd, GWL_STYLE) Or WS_CHILD
End Sub

Тебе это надо???
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 19:55

Или...

Код: Выделить всё
Option Explicit

Private Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub cmdShowForm_Click()
    frmOne.Show
    Call SetParent(frmOne.hwnd, frmMain.hwnd)
End Sub
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 23:04

ANDLL
Задал всего на двух, ответы читаю на всех.
Ваши примеры не работают так как надо..пробовал уже.

Постараюсь опять по-другому объяснить....
Вызов..например msgbox. Появляется окно, при этом фокус на ней, а в панели задач фокус на окне из которого вызвано msgbox. Вот мне это и надо, только чтобы можно было переключатся спокойно между двух окон.

или так...
Когда в дельфях есть две формы, и одна вызывается из другой, то при "компиляции", спрашивают...бла-бла-бла.(переводить долго). Дык вот, когда приложение дельфи запущенно, можно спокойно переключатся между формами, а "прямоугольник" в панели задач не меняет стиль, т.е. выделен... Когда закрываешь первую форму (в дельфях) этого приложения, приложение закрывается полностью.

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 15.08.2005 (Пн) 23:06

И ещё, в дельфи, в панели задач отображается caption не формы, а самого приложения.
Короче, если так сделать низя, как в дельфи, то так и скажите, не буду больше мучать.

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 15.08.2005 (Пн) 23:49

Я немного поэксперементировал и добился может быть того, что ты хочешь :arrow:

Допустим имеется 3 формы (Form1, Form2, Form3)

В свойствах Form2 и Form3 убираем видимость в таскбаре

В форме 1 пишем:

Private Sub Form_Load()
App.TaskVisible = False

Form2.Show
Form3.Show

End Sub

Проверь .... :idea:
No comments ...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.08.2005 (Пн) 23:59

Что же ты на Delphi и не пишешь, если для тебя состояние кнопки окна в TaskBar так жизненно важно?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

dorido
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 107
Зарегистрирован: 27.02.2005 (Вс) 17:10
Откуда: Angarsk

Сообщение dorido » 16.08.2005 (Вт) 5:17

если я правильно понял, то челу надо что-то подобное
By oppression’s woes and pains,
By your sons in servile chains,
We will drain our dearest veins
But they shall be free!

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 17.08.2005 (Ср) 0:05

BV
Дельфи незнаю.
dorido
Что подобное?

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 17.08.2005 (Ср) 0:06

VERITAS
Ну эт совсем не то...

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 17.08.2005 (Ср) 0:11

Вот как это выглядит на дельфях. Качаем прикреплённый файл.
Вложения
Project1.rar
(157.31 Кб) Скачиваний: 42

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 17.08.2005 (Ср) 0:22

Крост писал(а):VERITAS
Ну эт совсем не то...


Чего не то то, тоже само что у тебя и в примере, вот смотри

Мысли. Вслух.: Неужели даже трудно проверить... :roll:
Вложения
Project1.zip
Project1
(4.76 Кб) Скачиваний: 33
No comments ...

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 17.08.2005 (Ср) 2:12

VERITAS
Проверял...

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 17.08.2005 (Ср) 2:19

VERITAS
Скачал твой пример...то ли я дурак, то ли действительно у сарая пять стен...
Спасибо тебе большое, проблема решена. Но появилась другая - приложение не отображается в списке запущенных приложений в диспетчере задач... =( А надо бы..

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.08.2005 (Ср) 3:02

1. Мой пример с SetParent ты вообще смотрел? То же самое + в задачах видим. Посмотри, посмотри ещё раз. А потом ещё и ещё.
2. Что значит "Когда закрываешь первую форму (в дельфях) этого приложения, приложение закрывается полностью."? Что мешает использовать Unload или End?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

След.

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

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

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

    TopList