|
Управление формами
|
|||
---|---|---|---|
#18+
Имеется приложение которое при запуске выводит Форму 1 которая должна иметь некоторый размер, возможность передвигаться по экрану, минимизироваться на панель задач и восстанавливаться до своего фиксированного размера (вместе с окном Access потому как по другому минимизировать на панель задач не получается). Из этой формы открывается Форма 2 которая по умолчанию разворачивается на весь экран и тоже должна минимизироваться и восстанавливаться. При закрытии кнопкой закрытия Access Формы 2, она закрывается, передавая управление на Форму 1 а при её закрытии закрывается всё приложение. Всё это удалось реализовать более-менее нормально. Но осталась одна проблема. Как сделать чтобы невозможно было развернуть или изменить размеры Формы 1 а у Формы 2 эти возможности оставались. То есть в режиме когда на экране Форма 1, была не активна кнопка разворачивания окна и мышкой невозможно было вцепится для изменения размера формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 00:54 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOVкогда на экране Форма 1, была не активна кнопка разворачивания окна и мышкой невозможно было вцепится для изменения размера формы. Поменяйте тип границы окна с изменяемого на другой и отключите кнопки минимизации-максимизации в свойствах окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 04:52 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Панург, Похожим вариантом для решения технического задания на данный момент пользуюсь и я но есть очень существенный недостаток из за которого и пытаюсь отказаться от скрытого окна Access. В вашем примере минусы: 1. Невозможно минимизировать формы на панель задач, в лучшем случае в левый нижний угол 2. Проблемы с максимизацией Формы 2. Она не держит весь экран, и надо или точно задавать размеры или будут варианты нежелательного восстановления при получении фокуса программы. Один плюс этого способа в том что получается более красивая рамка формы потому как окно самого Accessа имеет вдавленый контур. Но минусы в сравнении с этим огромные. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 11:24 |
|
Управление формами
|
|||
---|---|---|---|
#18+
MrShin, Ваше предложение не проходит из за того что в моём примере имеем дело не с окном формы а окном самого Accessa. В том то и задача чтобы это сделать с его окном. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 11:25 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOV, я не стесняюсь Access и не пользуюсь скрытием окна приложения. Чего и тебе желаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 12:09 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOV, да, остальное мелочи и решаемо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 12:10 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOV2. Проблемы с максимизацией Формы 2. Она не держит весь экран, и надо или точно задавать размеры или будут варианты нежелательного восстановления при получении фокуса программы.С этим проблем в сделанном мной примере не обнаружил (только что посмотрел) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 12:21 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Панург, Согласен на 100%. Я тоже не стесняюсь. Но со временем уже начинаю замечать эти мелочи. К примеру пользователь хочет скрыть программу чтобы временно перейти в другую. В принципе есть много способов это сделать и это не проблема, но я замечал что большинство пользователей моей программы лезут в правый верхний угол её свернуть (хотя можно минимизировать все окна или просто переключится в другую интересующую программу). Если не скрывать окно Access (а по факту у меня сейчас так и есть) то программа минимизируется в окне но рабочее пространство не очищается, потому как надо ещё минимизовать и сам Access, а это опять щёлкать, пользователи начинают нервничать и теряться (ну они не сильно продвинутые в таком деле). То же и при разворачивании. Почему так действуют пользователи трудно сказать, возможно потому что остальные программы таким образом отлично улетают на панель задач а потом так же красиво возвращаются. Из за этого и решил каким-то образом побороть это неудобство (конечно же оно не критическое но всё равно имеет своё влияние на субъективное восприятие программы) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 12:30 |
|
Управление формами
|
|||
---|---|---|---|
#18+
ПанургGVOV2. Проблемы с максимизацией Формы 2. Она не держит весь экран, и надо или точно задавать размеры или будут варианты нежелательного восстановления при получении фокуса программы.С этим проблем в сделанном мной примере не обнаружил (только что посмотрел) В вашем примере она принимает размер экрана но не минимизируется из за чего у меня чуточку вылазит за левую кромку монитора и немного перекрывает панель задач. Вин 7 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 12:32 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Поиском нашёл способ заблокировать изменение окна Access с помошью АРI но то ли криво прицепил (к сожалению в АРI не разбираюсь) то ли сам способ кривоватый но вылезли побочные эффекты. При запуске всё отлично. Форма стабильного размера и ведёт себя как и надо, минимизируется и восстанавливается как по кнопке минимизации так и по щелчку на панели задач. Но когда запустить Форму 2 то она почему то не максимизируется а опять таки принимает форму разрешения экрана. А когда её закрыть то у Формы 1 появляются проблемы с перемещением по экрану. Соответственно задача почти решена но появилась нестабильность поведения форм в процессе пользования ими. Как стабилизовать эти две формы чтобы их открытие- закрытие и перемещение первой происходило без посторонних эффектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 12:56 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOVВаше предложение не проходит из за того что в моём примере имеем дело не с окном формы а окном самого Accessa Ну и где было упоминание того, что речь идет об окне Акцесса, а не о Форме 1? Спрячьте окно Акцесса за формой 1. Я буквально на днях публиковал код для этого ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 19:49 |
|
Управление формами
|
|||
---|---|---|---|
#18+
MrShinGVOVВаше предложение не проходит из за того что в моём примере имеем дело не с окном формы а окном самого Accessa Ну и где было упоминание того, что речь идет об окне Акцесса, а не о Форме 1? Спрячьте окно Акцесса за формой 1. Я буквально на днях публиковал код для этого Об окне Акцесса было упоминание в первом посте. Прятать за формой 1 неплохая идея, надо бы попробовать, будут ли побочные эффекты. А в какой теме код, не подскажите? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 20:35 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Но как будет с минимизациями на панель задач если окно будет спрятано? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 20:37 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOVА в какой теме код, не подскажите? Сорри, это я не здесь публиковал. Вот сам код, только объявления API функций отсутствуют, долго было вычленять их из общего списка объявлений. Приложил полный список объявлений для 64 битной версии, может пригодиться. Легко преобразовать в 32-х разрядную форму. Если не справитесь, выдерну эти несколько функций завтра. Минимизации-максимизации также обрабатываются. Private Sub Form_Resize() 'main form 'Let us know when Form is Maximized... If CBool(IsZoomed(Me.hwnd)) = True Then funSetAccessWindow (SW_SHOWMAXIMIZED) DoCmd.Maximize Me.TimerInterval = 0 ElseIf CBool(IsIconic(Me.hwnd)) = True Then funSetAccessWindow (SW_SHOWMINIMIZED) Me.TimerInterval = 0 Else 'enable constant size sync Me.TimerInterval = 100 SyncMainWindowSize Me, True End If End Sub Private Sub Form_Timer() SyncMainWindowSize Me End Sub Public Function SyncMainWindowSize(frm As Form, Optional blnForce As Boolean = False) Dim rctForm As RECT Dim iRtn As Integer Dim blnMoved As Boolean Static x As Integer Static y As Integer Static cx As Integer Static cy As Integer #If VBA7 And Win64 Then Dim hWndAccess As LongPtr #Else Dim hWndAccess As Long #End If If GetWindowRect(frm.hwnd, rctForm) Then If x <> rctForm.Left Then x = rctForm.Left blnMoved = True End If If y <> rctForm.Top Then y = rctForm.Top blnMoved = True End If If cx <> rctForm.Right - rctForm.Left Then cx = rctForm.Right - rctForm.Left blnMoved = True End If If cy <> rctForm.Bottom - rctForm.Top Then cy = rctForm.Bottom - rctForm.Top blnMoved = True End If If blnMoved Or blnForce Then 'move/resize main window hWndAccess = Application.hWndAccessApp iRtn = apiShowWindow(hWndAccess, WM_SW_RESTORE) Call SetWindowPos(hWndAccess, 0, x, y, cx, cy, WM_SWP_NOZORDER Or WM_SWP_SHOWWINDOW) End If End If End Function Function funSetAccessWindow(nCmdShow As Long) 'Usage Examples 'Maximize window: ' ?funSetAccessWindow(SW_SHOWMAXIMIZED) 'Minimize window: ' ?funSetAccessWindow(SW_SHOWMINIMIZED) 'Hide window: ' ?funSetAccessWindow(SW_HIDE) 'Normal window: ' ?funfSetAccessWindow(SW_SHOWNORMAL) Dim loX As Long On Error GoTo ErrorHandler loX = apiShowWindow(hWndAccessApp, nCmdShow) funSetAccessWindow = (loX <> 0) End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 21:44 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Вот так покрасивее будет: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 21:46 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Спасибо. Действительно так понятнее. Обьявлять API я не умею, но думаю, что с помощью поиска разберусь. Результат, если что получится, покажу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2016, 21:49 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Пробовал осилить API. С трудом объявил все функции и запустил предложенный код, но наверное у меня не достаточно знаний так как при запуске приложения остаётся только на панели кнопка Access и больше ни чего (окно скрывается но и формы не видно). Попробую более точно сформулировать что хочется получить: 1. При запуске выводится форма 1 фиксированного размера с кнопкой минимизации. Свободно перемещается по экрану. 2. По нажатии кнопки минимизации формы или щелчке на панели задач она сворачивается на панель задач и по щелчку разворачивается. 3. Запускаем форму 2. Она разворачивается на весь экран и так же при щелчке на панели задач она сворачивается на панель задач и по щелчку разворачивается. 4. При закрытии формы 2 остаётся форма 1 со свойствами описанными пункте 1. Помогите, если не трудно, кто в этом лучше разбирается. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2016, 22:55 |
|
Управление формами
|
|||
---|---|---|---|
#18+
У меня в Form_Open стоит максимизация формы, для начала это добавьте, если заработает, то вместо максимизации поставьте разворачивание в оконном режиме и установку необходимого размера/положения. В помощь примеры работы с окнами "Window Manipulation Examples" с сайта http://www.peterssoftware.com/ Там много других интересных примеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 05:38 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOV, потестируй. У меня вроде работает на 2003 2007 как ты просил. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 08:21 |
|
Управление формами
|
|||
---|---|---|---|
#18+
ПанургGVOV, потестируй. У меня вроде работает на 2003 2007 как ты просил. Всё почти так как хотелось за исключением того что формы запускаются в режиме диалогового окна и убрать с экрана их можно только минимизировав (согласен это как и просилось) но перключится в другую програму с помощью панели задач или Alt+Tab не получается, форма всё равно висит сверху. А если убрать диалоговый режим, форма пропадает (то же что было и у меня при экспериментах). Это можно как то решить оставив этот механизм скрытия окна? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 09:41 |
|
Управление формами
|
|||
---|---|---|---|
#18+
MrShinУ меня в Form_Open стоит максимизация формы, для начала это добавьте, если заработает, то вместо максимизации поставьте разворачивание в оконном режиме и установку необходимого размера/положения. В помощь примеры работы с окнами "Window Manipulation Examples" с сайта http://www.peterssoftware.com/ Там много других интересных примеров. Спасибо за ссылку, действительно пример работы с окном Аксеса очень познавательный. Буду изучать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 09:45 |
|
Управление формами
|
|||
---|---|---|---|
#18+
GVOVА если убрать диалоговый режим, форма пропадает (то же что было и у меня при экспериментах).На, сделал чтобы перемещалось в Z-последовательности ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 09:50 |
|
Управление формами
|
|||
---|---|---|---|
#18+
ПанургGVOVА если убрать диалоговый режим, форма пропадает (то же что было и у меня при экспериментах).На, сделал чтобы перемещалось в Z-последовательности О, вот это то что надо. Спасисбо! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 09:54 |
|
Управление формами
|
|||
---|---|---|---|
#18+
Продолжаю тестировать управление. Добавились задачи: 1. Форма 2 имеет интерфейс разработанный под мониторы 800*600 (для совместимости с старыми компьютерами). При разворачивании будет применятся ресайзинг, но для проверки работы в минимальном (оригинальном) разрешении нужна возможность восстановления формы до 800*600. 2. Из формы 2 должны запускаться диалоговые формы. 3. Из формы 2 должны запускаться отчёты для просмотра, в диалоговом режиме развёрнутые на весь экран с возможностью только закрытия. Проблемы в их решении: 1. Функцию реализовал, подкорректировав код открытия формы. Форма при восстановлении принимает нужный размер но вот восстанавливается она не по центру экрана. Как заставить её восстанавливаться по центру. При скрытом окне Аксеса я так понимаю что свойства формы "По центру" не работают и положение нужно высчитывать программно? 2. Функцию реализовал но проблема такая же как и в предыдущей задаче. 3. Запускаю отчёт и потом разворачиваю его. Получается нормально, но проблема в том что убрать кнопки размера окна безболезненно не получается. Если их убираю, оставляя саму кнопку закрытия то отчёт начинает запускаться на всю рабочую область экрана перекрывая панель задач а это неудобно. Если оставить одну только кнопку развёртывания то при сворачивании (которое и само по себе в принципе не желательно) отчёт часто восстанавливается в верхнем угле. Программу прилагаю. Если кто может, помогите решить проблемные вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 16:26 |
|
|
start [/forum/topic.php?fid=45&msg=39298909&tid=1609803]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
96ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 195ms |
0 / 0 |