Контроль размера форм в Access - PullRequest
1 голос
/ 20 октября 2008

Итак, у меня есть приложение Access, и я хотел бы, чтобы некоторые формы были максимально развернуты при их открытии, а другие - среднего размера при их открытии. Однако, если я попробую что-то вроде этого:

Private Sub Form_Activate()
  DoCmd.Maximize
End Sub

или

Private Sub Form_Activate()
  DoCmd.Restore
End Sub

имеет эффект максимизации или восстановления каждого открытого окна, а это не то, что я ищу.

Есть ли способ обойти это?

Я использую Access 2003.

Ответы [ 4 ]

2 голосов
/ 20 октября 2008

ΤΖΩΤΖΙΟΥ на 100% верно, когда говорят, что либо все развернуто, либо нет. Если вы действительно хотите решить эту проблему, вам придется прочитать немного здесь (посмотрите на предложенный код и способ его вызова), поймите, что сделано, и в конечном итоге построить собственное решение в зависимости от ваших потребностей.

2 голосов
/ 20 октября 2008

Access - это приложение MDI (Multiple Document Interface), и вот как они работают: все подокна развернуты или не развернуты.

Что вам нужно сделать, так это найти способ обнаружить размеры окна приложения Access, а затем программно установить свойства формы .InsideWidth и .InsideHeight. У объекта Application есть hwndAccessApp, который, вероятно, можно использовать с некоторым вызовом Windows API для определения его ширины и высоты.

дополнение

Спасибо Philippe Grondier за поиск соответствующего образца кода, общая идея из образца кода :

  • объявляет следующие элементы Win32 API:
    • struct Rect (Type Rect… в VBA)
    • const SW_SHOWNORMAL = 1 (для ShowWindow)
    • GetParent (с указанием hwnd, получить hwnd его родителя)
    • GetClientRect (получить позицию и размер от hwnd)
    • IsZoomed (логическое; true, если окно развернуто)
    • ShowWindow (изменить состояние окна)
    • MoveWindow (для изменения положения и размера окна)
  • если ваша форма развернута (IsZoomed(frm.hWnd) = True), то восстановите ее (ShowWindow frm.hWnd, SW_SHOWNORMAL)
  • получить область клиентов MDI из hWnd вашей формы (GetClientRect GetParent(frm.hWnd, rect))
  • используйте данные прямоугольника, чтобы изменить положение и размер вашего окна (MoveWindow frm.hWnd, 0, 0, rect.x2-rect.x1, rect.y2-rect.y1)

(Выше приведено объяснение примера кода; я не копировал и не вставлял код, потому что не был уверен, разрешил ли его автор).

0 голосов
/ 20 октября 2008

Здесь есть несколько вариантов: http://www.jamiessoftware.tk/articles/resolution.html

В прошлом я использовал ADHResize, и он выполнил свою работу.

0 голосов
/ 20 октября 2008

Вы можете использовать MoveSize:

DoCmd.MoveSize 100,100

Дополнительная информация: http://msdn.microsoft.com/en-us/library/aa141514(office.10).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...