Как можно в VB вытащить своё окошко поверх всех других?
От: Marlboro Россия http://www.kronsh.h11.ru
Дата: 18.01.03 17:10
Оценка:
Проблема в том, что Form.SetFocus активизирует окошко, но не поднимает его над другими окнами. Может можно както монополизировать экран(сделать так чтоб другие приложения вобще не могли вылезти), или хотя-б показывать свое окно всегда поверх других?-это было бы идеально. VB вроде как 6-ой версии, во всяком случае не .Net. Да и еще одна интересная заморочка: выставляю св-во ShowInTaskBar — значек формы на панели задач не появляется, и даже не возможно при этом переключиться на задачу Alt+tabом(во всплывающем при этом окошке иконка задачи отсутствует напрочь). Может кто знает как это лечится?
Re: Как можно в VB вытащить своё окошко поверх всех других?
От: KirBab  
Дата: 18.01.03 23:17
Оценка:
Есть такая функция API BringWindowToTop, которая устанавливает указанное окно поверх других.

описание функции:
Declare Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As Long) As Long
Параметры
hwnd — дескриптор окна
В успешном случае функция возвращает значение отличное от нуля.

' Установим окно Form2 поверх окна Form1.
Dim retval As Long ' возвращаемое значение

' Очевидно, это будет работать, если другие окна — уже поверх Form2.
retval = BringWindowToTop(Form2.hWnd)
Re[2]: Как можно в VB вытащить своё окошко поверх всех други
От: Marlboro Россия http://www.kronsh.h11.ru
Дата: 21.01.03 23:56
Оценка:
Прошу меня извинить за мои дилетантские вопросы, но всеже проблема теперь предстала в несколько ином свете: после активизации окна(с вытаскиванием на верх) его caption начинает мигать, но фокус на окно не перемещается. Мне бы хотелось перевести фокус на моё окно без всякого мигания принудительно из кода программы. Хотя этот вопрос и может показаться пустяковым, но для меня он очень важен, тк приложение моё планируется для машин без мыши и с нестандартной клавиатурой(без alt+taba), и у пользователям будет проблемно переключиться на него в нужный момент. Может дело вовсе не в коде а версии виндов или их настройках? Вобщем если кто сталкивался с подобным, то напишите, очень буду ждать.
Re[3]: Как можно в VB вытащить своё окошко поверх всех други
От: SCS  
Дата: 22.01.03 06:01
Оценка:
Здравствуйте, Marlboro, Вы писали:
посмотри здесь + немного описания API
SCS
Re: Как можно в VB вытащить своё окошко поверх всех других?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 01.02.03 13:56
Оценка:
Здравствуйте, Marlboro, Вы писали:

M>Проблема в том, что Form.SetFocus активизирует окошко, но не поднимает его над другими окнами. Может можно както монополизировать экран(сделать так чтоб другие приложения вобще не могли вылезти), или хотя-б показывать свое окно всегда поверх других?-это было бы идеально. VB вроде как 6-ой версии, во всяком случае не .Net. Да и еще одна интересная заморочка: выставляю св-во ShowInTaskBar — значек формы на панели задач не появляется, и даже не возможно при этом переключиться на задачу Alt+tabом(во всплывающем при этом окошке иконка задачи отсутствует напрочь). Может кто знает как это лечится?

Экран можно монополизировать активизировав свое окно, и после чего запретить переключение ALT+TAB. А лечить это легко и просто. Сначала всплываем поверх всех окон а потом снимаем стиль окна поверх_всех_окон

Option Explicit
Private Declare Function 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) As Long
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1

Private Sub Command1_Click()
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
Aml Pages Home
Re: Как можно в VB вытащить своё окошко поверх всех других?
От: Аноним  
Дата: 07.02.03 06:38
Оценка:
Здравствуйте, Marlboro, Вы писали:

M>Проблема в том, что Form.SetFocus активизирует окошко, но не поднимает его над другими окнами. Может можно както монополизировать экран(сделать так чтоб другие приложения вобще не могли вылезти), или хотя-б показывать свое окно всегда поверх других?-это было бы идеально. VB вроде как 6-ой версии, во всяком случае не .Net. Да и еще одна интересная заморочка: выставляю св-во ShowInTaskBar — значек формы на панели задач не появляется, и даже не возможно при этом переключиться на задачу Alt+tabом(во всплывающем при этом окошке иконка задачи отсутствует напрочь). Может кто знает как это лечится?





'Поместите в модуль
Public Declare Function 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) As Long
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOPMOST = -1
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1

Public Sub SetFormPosition(frmHandl As Long, TopPosition As Boolean)
If TopPosition Then
SetWindowPos frmHandl, HWND_TOPMOST, 0, 0, 0, 0, _
SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
Else
SetWindowPos frmHandl, HWND_NOTOPMOST, 0, 0, 0, 0, _
SWP_NOSIZE Or SWP_NOMOVE
End If
End Sub
'Поместите на форму в любой процедуре
call SetFormPosition(Me.hwnd, True)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.