Form AlwaysOnTop, что бы не брала на себя фокус.

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

Form AlwaysOnTop, что бы не брала на себя фокус.

Сообщение Memfivosfey » 03.10.2006 (Вт) 23:43

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

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

Сообщение BV » 04.10.2006 (Ср) 0:40

WS_EX_NOACTIVATE?
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;

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 04.10.2006 (Ср) 4:03

Я конечно извиняюсь, но я даже не представляю, что это и где его взять :) Если не сложно, кусок кода.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 04.10.2006 (Ср) 5:33

рылся, рылся, нашёл... но не работает :(

Вобщем, у меня две формы, одна главная вторая просто лог соытий.
Вторая форма расположена в правом нижнем углу экрана, прямо над системным треем. На второй есть ListBox. Когда происходят события в первой форме Form1, они как "трассировка" добавляются в Form2.ListBox, но при этом Form1 теряет фокус. Благодаря вашей BV подсказке, я так понял что стал на верный путь и нашёл такой код:

Код: Выделить всё
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40

Private Declare Sub SetWindowPos Lib "User32" _
         (ByVal hWnd As Long, _
         ByVal hWndInsertAfter As Long, _
         ByVal X As Long, _
         ByVal Y As Long, _
         ByVal cx As Long, _
         ByVal cy As Long, _
         ByVal wFlags As Long)

Private Sub Form_Activate()
    'Set the window position to topmost
    SetWindowPos Me.hWnd, _
         HWND_TOPMOST, 0, 0, 0, 0, _
         SWP_NOACTIVATE Or SWP_SHOWWINDOW Or _
         SWP_NOMOVE Or SWP_NOSIZE


но он у меня почему-то не пахает :( когда я делаю по любому событию Form1 добавление в Form2.ListBox строки, Form1 теряет фокус. :( чиво не так? :cry:

вот непосредственно строка кода в моей программе, как я её записал:

Код: Выделить всё
SetWindowPos frmListMsg.Hwnd, -1, (Screen.Width - frmListMsg.Width) / 15, ((tmpRect.Top * 15) - frmListMsg.Height) / 15, frmListMsg.Width / 15, frmListMsg.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 04.10.2006 (Ср) 9:06

Memfivosfey
WS_EX_NOACTIVATE - стиль окна, изменяемый при помощи SetWindowLong. Но вот только при выставлении окно всё равно получать может фокус. Вот при выставлении WS_DISABLED окно полностью перестаёт реагировать на нажатия пользователя на него.
Если всё делать своими ручками, они скоро отвалятся !

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 04.10.2006 (Ср) 14:11

Kovu писал(а):Memfivosfey
WS_EX_NOACTIVATE - стиль окна, изменяемый при помощи SetWindowLong. Но вот только при выставлении окно всё равно получать может фокус. Вот при выставлении WS_DISABLED окно полностью перестаёт реагировать на нажатия пользователя на него.



дак я же на него и ненажимаю, я только добавляю записи в ListBox находящийся в нём.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 04.10.2006 (Ср) 18:24

Да...., помоему жизнь подошла к концу.... неуж-то всё настока суръёзно...
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 04.10.2006 (Ср) 19:58

Memfivosfey
Ну дык окно кстати фокус не получает при добавлении в его листбокс новых записей). По крайней мере у меня. Выставь окну WS_DISABLED и не заморачивайся)
Если всё делать своими ручками, они скоро отвалятся !


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110

    TopList