Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 01:15   #1
AdrenalinE
Пользователь
 
Аватар для AdrenalinE
 
Регистрация: 29.09.2007
Сообщений: 95
По умолчанию Форма поверх всех окон (SetWindowPos)

Доброго времени суток!
Мне требуется сделать так, чтобы при открытии формы она всегда оставалась поверх всех окон в Windows. Я воспользовался функцией SetWindowPos, но никакого эффекта не последовало.
Код:
Option Compare Database
Option Explicit
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
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const SWP_SHOWWINDOW = &H40


Private Sub Form_Open()
    Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 100, 0, 100, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)
End Sub
Это на форме, которая должна открываться. А на другой форме просто кнопка и
Код:
DoCmd.OpenForm "form"
Еще вчера просто не было никакого результата, а сейчас открываю, а Access ругается, что не может выполнить DoCmd.OpenForm "form".

Подскажите, ЧЯДНТ?
Вложения
Тип файла: rar test.rar (31.8 Кб, 18 просмотров)
AdrenalinE вне форума Ответить с цитированием
Старый 17.04.2010, 17:28   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте AdrenalinE.
думаю поведение API в А2007 не сильно отличается от поведения в А2003, в котором выполнение подобного кода решает Вашу задачу
Код:
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
Public Function startForm()
    DoCmd.OpenForm "FormName"
    SetWindowPos Application.hWndAccessApp, -1, -30, -30, 0, 0, &H40
End Function
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 17.04.2010, 18:14   #3
AdrenalinE
Пользователь
 
Аватар для AdrenalinE
 
Регистрация: 29.09.2007
Сообщений: 95
По умолчанию

Teslenko_EA, большое спасибо!
Можно еще пару вопрос по параметрам?
В Вашем примере -30 и -30 - это x и y, т.е. смещение позиции окна, а 0 и 0 - cx и cy, т.е. координаты окна? Возможно сделать так, чтобы появившееся окно нельзя было перемещать и изменять размер? Я так понимаю, что надо установить флаги NOMOVE и NOSIZE, но что-то опять безрезультатно. И надо ли возвращать нормальное позиционирование окна при закрытии? А то у меня создается впечатление, что кроме открывшегося окна весь аксес начинает становиться поверх окон, потому что невозможно переключиться на редактор VBA, пока не закроешь форму с кнопкой.

P.S. Кстати, я тожеродом с Сургута, приятно услышать совет от земляка.

UPD: Да, точно, весь Аксес остается поверх всех окон при закрытии формы.

UPD2: Запретить перетаскивание формы нашел. А как запретить изменение размера? Уже понял, что был не прав насчет флагов.

Последний раз редактировалось AdrenalinE; 17.04.2010 в 19:16.
AdrenalinE вне форума Ответить с цитированием
Старый 17.04.2010, 22:45   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

AdrenalinE, если проблема с позиционированием окна решена, "..запретить изменение размера.." можно задав свойству формы Тип границы значение - Окна диалога
Евгений.

P.S. все свои сообщения я подписываю в надежде, что обращаться ко мне будут по имени, и я не "..тожеродом с Сургута.." я просто в нём живу.
Teslenko_EA вне форума Ответить с цитированием
Старый 18.04.2010, 00:07   #5
AdrenalinE
Пользователь
 
Аватар для AdrenalinE
 
Регистрация: 29.09.2007
Сообщений: 95
По умолчанию

Еще раз большое спасибо, Евгений, просто живущий в Сургуте. Все заработало. Теперь буду разбираться, как вернуть аксес в прежнее состояния после закрытия формы.
AdrenalinE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи. ФОрма поверх всех окон. Chudo4258 Помощь студентам 15 04.03.2010 19:38
Неглавная форма поверх всех окон Altera Общие вопросы Delphi 23 09.12.2009 05:52
Форма поверх всех окон LordTor Общие вопросы Delphi 5 18.11.2009 23:38
Форма поверх всех окон (!!!) Viteef Общие вопросы Delphi 12 29.06.2007 00:22
Форма поверх всех окон. Kamikadze_666 Общие вопросы Delphi 1 16.05.2007 07:10