Задать вопрос
@Vladizzzlove
Начинающий Java-разработчик

Access: скрытая предзагрузка форм без мелькания?

Добрый день.
В ERP-системе на Microsoft Access есть несколько форм, которые открываются очень долго (связанные таблицы, сложные подчинённые формы, объёмные данные). Я хочу предзагружать эти формы при запуске приложения, чтобы в дальнейшем они открывались мгновенно. Пользователь один раз подождёт при запуске — и всё.
Проблема: при предзагрузке окна форм мелькают на экране (появляются и исчезают), причём довольно долго (10–15 секунд). Это выглядит некрасиво и раздражает.
Что пробовал:
DoCmd.OpenForm "Форма", acNormal, , , , acHidden — формы всё равно мелькают, так как окно физически создаётся, прежде чем скрыться.
Application.Echo = False — не помогает, окна всё равно создаются.
Сворачивание главного окна Access через API (ShowWindow) — формы всё равно мелькают в свёрнутом окне, а форма входа становится невидимой.
Форма-заставка с acDialog — блокирует выполнение кода, предзагрузка не происходит.
Нужно:
При запуске Access предзагрузить несколько форм в память.
Пользователь не должен видеть процесс их загрузки (никакого мелькания).
После предзагрузки открывается рабочая форма (видимая).
Предзагруженные формы остаются в памяти и открываются мгновенно.
Подскажите, есть ли способ реализовать такое? Может быть, есть обходной путь через API Windows, скрытые окна, другой подход?
Заранее спасибо.
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по информационной безопасности
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@rPman
попробуй задать неправильные размеры или положение для окна за границами десктопа, так же его можно делать сминимизированным
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
LockWindowUpdate через WinAPI — один из рабочих хаков для этого:

Private Declare PtrSafe Function LockWindowUpdate Lib "user32" _
    (ByVal hwndLock As LongPtr) As Long

Sub PreloadForms()
    On Error GoTo Cleanup
    LockWindowUpdate Application.hWndAccessApp
    DoCmd.OpenForm "Form1", acNormal, , , , acHidden
    DoCmd.OpenForm "Form2", acNormal, , , , acHidden
Cleanup:
    LockWindowUpdate 0
End Sub


Экран замораживается на время загрузки — мелькания нет. PtrSafe нужен для 64-бит Office; на 32-бит убери его и замени LongPtr на Long. On Error GoTo Cleanup обязателен — иначе при ошибке UI зависнет намертво.

p.s. если формы тормозят именно из-за данных — кста проще грузить с WHERE "1=0" (0 записей, мгновенно) и подменять RecordSource уже когда юзер реально откроет форму.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы