Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/65: Рейтинг темы: голосов - 65, средняя оценка - 4.85
2 / 2 / 0
Регистрация: 21.05.2015
Сообщений: 35
1

Форма на весь экран (с учётом параметров монитора компьютера)

29.07.2015, 21:38. Показов 13248. Ответов 26

Author24 — интернет-сервис помощи студентам
Здравия желаю! как всё-таки сделать форму на весь экран (с учётом параметров монитора компьютера)? Не могу разобраться и понять (без "растягивания")!
Миниатюры
Форма на весь экран (с учётом параметров монитора компьютера)  
Вложения
Тип файла: rar Слава ВМФ!.rar (295.9 Кб, 48 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2015, 21:38
Ответы с готовыми решениями:

Форма растягивается на весь экран, как задать фиксированный размер?
autoresize -no :gscratch:

Форма во весь экран
1 Как сделать что бы прога запускалась чисто во весь экран что б пуск,часов и всего другого не было...

Составить программу рисования шахматной доски во весь экран монитора
Составить программу рисования шахматной доски во весь экран монитора.

Jtable на весь экран по ширине при разных разрешениях монитора
Скажите мне нужно получить JTable на всю ширину , тоесть чтобы таблица сама растягивалась по...

26
451 / 239 / 14
Регистрация: 29.10.2014
Сообщений: 1,016
01.08.2015, 10:53 21
Author24 — интернет-сервис помощи студентам
А еще можно в свойствах формы сделать всплывающее окно и разделенную форму
1
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 10
30.01.2016, 15:11 22
mobile , в который раз хотел использовать Ваши решения для создаваемой БД. Но Access ругается уже при открытии (1 и 2-ой скрины). Если макросы отключить и попробовать открыть форму "Телефоны", то скрин 3.
Может настройки какие-то надо установить (Access 2013, Win 8.1)?
Миниатюры
Форма на весь экран (с учётом параметров монитора компьютера)   Форма на весь экран (с учётом параметров монитора компьютера)   Форма на весь экран (с учётом параметров монитора компьютера)  

0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
30.01.2016, 15:55 23
У Вас 64-битный Access. Для него апишные функции имеют несколько иной синтаксис и переменные другой разрядности. Перед Fuction надо написать ключевое слово PtrSafe, указывающее, что выполнение в 64-битной среде. Кроме того, переменные типа Long должны быть указаны с типом LongPtr
Visual Basic
1
2
3
4
Private Declare PtrSafe Function SetWindowPos Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal hwndInsertAfter As LongPtr, _
ByVal X As LongPtr, ByVal Y As LongPtr, _
ByVal cx As LongPtr, ByVal cy As LongPtr, ByVal wFlags As LongPtr) As LongPtr
Известным аксцессником Joss были суммированы правила перехода 64-битный вариант. Почитайте
Access. Переход с 32-х разрядной системы на 64-х разрядную
Access. Переход с 32-х разрядной системы на 64-х разрядную.

Начиная с версии Office 2010, офис стал выпускаться в двух вариантах 32-х разрядный и 64-х разрядный. Причём, если 32-х разрядный офис может спокойно устанавливаться как на 32-х, так и на 64-х разрядную системы, то 64-х разрядный офис может ставиться только на 64-х разрядную операционку.

Хотя 32-разрядные приложения могут работать прозрачно, смешивание двух типов кода в одном процессе не поддерживается. 64-разрядное приложение не может подключаться к 32-разрядной системной библиотеке (DLL); аналогичным образом 32-разрядное приложение не может подключаться к 64-разрядной системной библиотеке.

ВНИМАНИЕ! При попытке запустить 32-разрядный код в 64-разрядной версии Access возникнут ошибки времени выполнения. Например, из-за несоответствия версий пользовательского приложения (32-разрядный код) и одного из 64-разрядных поставщиков ACE, установленных с 64-разрядной версией Microsoft Access, может возникнуть ошибка "Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальном компьютере". Чтобы устранить эту проблему, либо обновите пользовательский код до 64-разрядной версии, либо удалите 64-разрядную версию Access и установите 32-разрядную.

Параллельная установка 64-х и 32-х разрядных выпусков Office 2010 не поддерживается. Это относится и к Access.

Перед развертыванием 64-разрядной версии Access определите, подходит ли такой вариант развертывания для конкретной среды. На совместимость с текущим 32-разрядным решением для Access влияет ряд факторов. Например, при использовании баз данных с удаленным исходным кодом (MDE-, ADE- и ACCDE-файлов) либо при использовании VBA-кода с операторами Declare, надстройками COM и элементами ActiveX необходимо приложить определенные усилия, чтобы эти функции заработали с 64-разрядной версией Access. Для устранения этой проблемы также можно установить 32-разрядную версию Access в 32-разрядной версии Windows либо 32-разрядную версию Access (WOW64) в 64-разрядной версии Windows.

Если Вы собираетесь использовать 64-х разрядные базы данных Access, и в будущем ситуация не изменится, самым естественным вариантом для работы с данными будет выбор драйвера ACE DAO, поскольку он предоставляет наиболее полный набор функций. В конце концов, собственные технологии доступа к данным, как правило, позволяют сократить время разработки, упростить код и обеспечить более высокую производительность. Если будут использоваться расширенные возможности работы с наборами данных и подключения к вспомогательным внешним источникам, рассмотрите возможность использования ADO.NET (или ADO) либо OLE DB. Полную поддержку устаревших возможностей, таких как связанные таблицы и сохраненные запросы, а также новых сложных типов данных, появившихся в Access 2007, обеспечивает только драйвер ACE DAO. Драйвер ACE OLE DB обеспечивает ограниченную поддержку сложных данных. Например, для более эффективной поддержки сложного набора данных (для извлечения наборов записей в наборах данных) необходимо задать параметр подключения "JET OLE DB: Support Complex Data". Если этого не сделать, по умолчанию для сложных полей будут возвращаться списки разделенных значений. Технологии ADO.NET, ADO и ACE ODBC всегда возвращают для сложных полей списки разделенных значений.

Выполнение кода VBA, который был написан до выпуска Office 2010 (VBA версии 6 и более ранних версий), на 64-разрядной платформе может приводить к возникновению ошибок, если код не был модифицирован для работы в 64-разрядных версиях Office. Ошибки будут возникать по той причине, что язык VBA версии 6 и более ранних версий неявно ориентирован на 32-разрядные платформы и обычно содержит операторы объявления, которые запускают в действие функции API Microsoft Windows, использующие 32-разрядные типы данных для указателей и дескрипторов. Так как язык VBA версии 6 и более ранних версий не имеет специального типа данных для указателей и дескрипторов, им используется тип данных Long, который является 32-разрядным 4-байтным типом данных, предназначенным для ссылки на указатели и дескрипторы. Указатели и дескрипторы в 64-разрядных средах являются 8-байтными 64-разрядными числами. Эти 64-разрядные числа не могут храниться в 32-разрядных типах данных.

Проблема с выполнением унаследованного программного кода VBA в 64-разрядном пакете Office заключается в том, что при попытке загрузить 64-разрядные значения в 32-разрядный тип данных 64-разрядные числа усекаются. Это может приводить к переполнениям памяти, неожиданным результатам в коде и возможным сбоям приложения.

Для устранения этой проблемы и обеспечения правильной работы кода VBA как в 32-разрядных, так и в 64-разрядных средах в язык VBA добавлен ряд функциональных возможностей. Три важных добавления: псевдоним типа LongPtr, тип данных LongLong и ключевое слово PtrSafe.

LongPtr — теперь язык VBA включает псевдоним типа переменной: LongPtr. Фактический тип данных, в который разрешается тип LongPtr, зависит от версии пакета Office, в котором он используется: тип LongPtr разрешается в тип Long в 32-разрядных пакетах Office, и тип LongPtr разрешается в тип LongLong в 64-разрядных версиях пакета Office. Используйте тип LongPtr для указателей и дескрипторов.

LongLong — тип данных LongLong — это 64-разрядные целые числа со знаком, которые доступны только в 64-разрядных версиях пакета Office. Используйте тип LongLong для 64-разрядных целых чисел. Для явного присвоения значений типа LongLong (включая тип LongPtr на 64-разрядных платформах) целочисленным типам данных меньшего размера должны использоваться функции преобразования. Неявное преобразование типа LongLong в целочисленные данные меньшего размера не допускается.

PtrSafe — ключевое слово PtrSafe декларирует, что оператор Declare безотказно выполняется в 64-разрядных версиях пакета Office.

Теперь все операторы Declare должны содержать ключевое слово PtrSafe, когда выполняются в 64-разрядных версиях пакета Office. Важно понимать, что просто добавление ключевого слова PtrSafe в оператор Declare означает только, что оператор Declare явно ориентирован на 64-разрядные данные, все типы данных в операторе, которые предназначены для хранения 64 разрядов (включая возвращаемые значения и параметры), все еще нуждаются в изменении, чтобы хранить 64-разрядные числа.

Начиная с Access 2010 для программирования стал доступен VBA7.

Операторы Declare, содержащие слово PtrSafe, работают корректно в среде разработки VBA7 как на 32-разрядных, так и на 64 разрядных платформах. Чтобы обеспечить обратную совместимость в VBA7 и более ранних версиях, используйте следующую структуру:

#If Vba7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf

Примечание. Я писал текст программ в Access 2003, а уже потом отлаживал в Access 2010. В Access 2003 строки с этой переменной подсвечивались красным, но компилятор Access 2003 их спокойно обрабатывал. В Access 2010 ничего не подсвечивалось.

Пример не модифицированного унаследованного оператора Declare в языке VBA5/6 версий Access 97/2000/2002/2003/2007

Declare Function GetActiveWindow Lib "user32" () As Long

Пример оператора Declare языка VBA модифицированного для включения спецификатора PtrSafe, но по-прежнему используется 32-разрядное возвращаемое значение в языке VBA7 версий Access 2007/2010/2013/2016

Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long

Пример оператора Declare языка VBA, модифицированный для включения ключевого слова PtrSafe и обновленный для использования 64-разрядного типа данных (LongPtr)

Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr

Итак, для правильной работы кода в 64-разрядных версиях пакета Office необходимо найти и модифицировать все существующие операторы Declare, чтобы они использовали спецификатор PtrSafe. А внутри этих операторов Declare необходимо найти и модифицировать все типы данных, которые ссылаются на дескрипторы или указатели, чтобы использовать псевдоним нового 64-разрядного совместимого типа LongPtr и типы, необходимые для хранения 64-разрядных целых чисел с новым типом данных LongLong. Кроме того, следует обновить все определенные пользователем типы, содержащие указатели или дескрипторы и 64-разрядные целые числа, чтобы использовать 64-разрядные типы данных, и убедиться в правильности присвоений всех переменных, чтобы предотвратить появление ошибок несоответствия типов.

Чтобы написать код, переносимый между 32-разрядными и 64-разрядными версиями Office, требуется лишь использовать для всех указателей и значений дескрипторов псевдоним нового типа LongPtr вместо типа Long или LongLong. Псевдоним типа LongPtr разрешается в правильный тип данных Long или LongLong в зависимости от того, какая версия пакета Office используется.
Обратите внимание, что если требуется реализовать другую логику, можно использовать константу условной компиляции Win64

Код с её использованием будет выглядеть следующим образом.

#if Win64 then
' Code is running in 64-bit version of Microsoft Office
#else
' Code is running in 32-bit version of Microsoft Office
#end if

Чтобы написать код, работоспособный как в новой, так и в старой версиях Office, можно использовать комбинацию новых условных констант компилятора VBA7 и Win64.

#if Vba7 then
' Code is running in the new VBA7 editor
#if Win64 then
' Code is running in 64-bit version of Microsoft Office
#else
' Code is running in 32-bit version of Microsoft Office
#end if
#else
' Code is running in VBA version 6 or earlier
#end if

#If Vba7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf


Добавлено через 1 минуту
К сожалению сам проверить не могу. Нет 64-битного акса...
2
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 10
30.01.2016, 17:19 24
mobile , спасибо огромное за помощь!
Текст про Access перечитал, но т.к. не программист, сами понимаете, местами, как китайская грамота.
Приведенный Вами код помог. Почти. Access еще немного поругался.
Надо в обоих модулях сделать так, как Вы указали:
Цитата Сообщение от mobile Посмотреть сообщение
Перед Fuction надо написать ключевое слово PtrSafe, указывающее, что выполнение в 64-битной среде. Кроме того, переменные типа Long должны быть указаны с типом LongPtr
И все заработало!
Разворачивается почти полноценно (скрин 4). Если кликнуть дважды по верхней синей полоске формы, все вписывается в экран идеально (скрин 5).
Базу с внесенными исправлениями выкладываю. Вдруг кому-то понадобится.
Теперь буду думать, как тоже самое "прикрутить" к своей БД.
Миниатюры
Форма на весь экран (с учётом параметров монитора компьютера)   Форма на весь экран (с учётом параметров монитора компьютера)  
Вложения
Тип файла: rar Слава ВМФ! 64x.rar (306.8 Кб, 68 просмотров)
0
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
30.01.2016, 20:29 25
Я, в принципе, уже понял, как здесь на форуме относятся к "новинкам" Access))), но все-таки рискну написать).
Так вот, насколько я помню, начиная с 2007 (или с 2010) Акса, в формах и отчетах появился режим макета, а так же кнопка "Привязка", которая позволяет, на мой взгляд, организовать "резиновые" формы без малейших заморочек с кодом.
Что имею в виду.
Изначально берем и делаем форму из расчета на минимальное разрешение монитора. Конечно, в наше время нет смысла брать 800 на 600, мониторы кругом уже более-менее нормальные, поэтому можно делать формы, все элементы которых умещались бы в пределах разрешения например 1280 на 800.
Затем настраиваем привязку каждого элемента формы (т.е. его растягивание вниз, вниз и в ширину и т.д.) - и получаем на выходе форму, элементы которой занимают весь экран независимо от разрешения монитора, на котором открыта эта форма. Сам очень часто пользуюсь этой возможностью, формы при любых раскладах открываются на весь доступный экран и т.д.
Например, если есть форма, у которой сверху идут несколько полей и элементов управления, а ниже - окно подформы с подчиненной таблицей, то просто в привязке верхние элементы закрепляем с растягиванием вдоль верхнего края, а подформу - с растягиванием вниз и по горизонтали. И все смотрится замечательно. И, опять же, без кода))
Само собой, наработки, связанные с созданием резиновых форм в более ранних версиях - тоже очень ценная штука, ничуть не умаляю их ценность. Но мне вот тьфу-тьфу пока ни разу не пришлось ими воспользоваться.

Добавлено через 1 минуту
mobile, Спасибо за очень ценную инструкцию по переходу с 32 на 64, сохраню себе обязательно, очень пригодится.
3
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,023
01.02.2016, 03:19 26
Цитата Сообщение от Kkarn Посмотреть сообщение
И, опять же, без кода))
И опять же без "получения каких-либо знаний" вы хотели сказать?

docmd.maximize поставьте на открытие всех форм и будут они у вас на весь экран отображаться.
0
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
01.02.2016, 09:20 27
Цитата Сообщение от alvk Посмотреть сообщение
И опять же без "получения каких-либо знаний" вы хотели сказать?
Ну, не все знания одинаково полезны))) Особенно для начинающих. В принципе, совсем не обязательно в детальностях понимать, как работает кофеварка, чтобы сварить себе кофе) Сугубо мое мнение.

Цитата Сообщение от alvk Посмотреть сообщение
docmd.maximize поставьте на открытие всех форм и будут они у вас на весь экран отображаться.
Насколько я понимаю, суть "резиновых" форм, о которых я написал выше - не просто в том, чтобы они открылись на весь экран, а в том, чтобы элементы управления в них автоматически сами заняли оптимальное экранное место на мониторе, всю доступную полезную площадь. Об это же и говорил mobile в своем примере с кодом. И я - в своем примере без кода.
3
01.02.2016, 09:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2016, 09:20
Помогаю со студенческими работами здесь

Не разворачивается форма на весь экран
Добрый день уважаемые форумчане! Windows 7 x64; Delphi XE7 Вот я создал некую форму и при...

Форма на весь экран => местоположение объектов
Форма открывается на весь экран через код. Но в результате положение объектов (эдитов, лэйблов) не...

Зависание компьютера с артефактами на весь экран
Проблема случается под нагрузкой на видеокарту (игры, стресс-тест gpu), просто через какое-то...

Форма на весь экран с учетом масштаба компонентов
Как сделать, чтобы при растягивании формы размер компонентов так же менялся пропорционально форме?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru