ENG GER GER pl
PCproxy mail RSS




Регистрация | Вход

Меню сайта

Форма входа

Последние новости

Наши друзья

Наш опрос
Вы часто бываете на ITsecure.org.ua?
Всего ответов: 453

Наши друзья



Главная » Статьи » СУБД » MS Access |

Статьи, посвященные СУБД Caché DB2 FoxPro
Informix InterBase/Firebird Microsoft SQL Server MySQL
Oracle Postgres (PostgreSQL) Sybase ЛИНТЕР
MS Access



Запрет вывода окна свойств объекта в режиме формы MS Acces

В процессе разработки формы очень интенсивно используется окно задания свойств оъекта. Но когда разработка закончена, то появление этого окна в рабочей версии программы нежелательно. Намекает на низкую квалификацию разработчика. В Access 2000 (и старше), в форме появилось свойство AllowDesignChanges, которое управляет выводом окна свойств на экран. Оно имеет тип Boolean.

Значения:

  • True (-1) - (По умолчанию) Изменения свойств объектов могут быть сделаны во всех режимах формы.
  • False (0) - Изменения свойств объектов могут быть сделаны только в режиме конструктора. Его можно изменить на вкладке "Другие" в самом низу списка параметров. В русской версии оно называется "Разрешить изменение макета" и имеет значения - "Все режимы" (True) и "Только режим конструктора" (False).

Конечно, значение этого параметра можно установить вручную. Если форм несколько, то это сделать легко. А если их несколько десятков? Сразу возникает предложение: вставить в отдельный модуль глобальную переменную blnDesignForm и присвоить ей значение True на время разработки программы.

Public Const blnDesignForm As Boolean = True

В каждой форме, в секции Form_Load вставить строку

Me.AllowDesignChanges = blnDesignForm

После окончания разработки изменить значение blnDesignForm с True на False.

К сожалению оказалось, что всё не так просто. Попытка программно изменить параметр формы AllowDesignChanges, выдает ошибку 2448 "Невозможно присвоить значение объекту". Оказалось, что это свойство можно изменять только в режиме конструктора. Поэтому пришлось пойти по другому пути и написать следующую подпрограмму.

Public Sub SetChangeDesignDAO()

' Подпрограмма изменения параметра формы AllowDesignChanges -
' разрешение на вывод окна параметров на экран во всех режимах - True
' или только в режиме конструктора - False
' В подпрограмме использованы некоторые идеи Юрия Шермана
' Для запуска подпрограммы установите на неё маркер и нажмите F5

Dim MN As String, j As Integer, n As Integer
Dim ContainerName As String
Dim blnChange As Boolean

On Error GoTo SetChangeDesignDAO_Error

ContainerName = "Forms"

' Выбор режима вывода окна свойств

Select Case MsgBox("Разрешить вывод окна параметров на экран только в режиме конструктора?" _
& vbCrLf & "(Нет(No) - во всех режимах)" _
, vbYesNoCancel Or vbQuestion Or vbDefaultButton1, _
"Установка режима вывода окна параметров на экран")
      Case vbYes

' разрешение на вывод окна параметров на экран только в режиме конструктора
            blnChange = False
      Case vbNo

' разрешение на вывод окна параметров на экран во всех режимах
            blnChange = True
      Case vbCancel

' отмена выполнения подпрограммы
            Exit Sub
End Select


' определяем количество форм

n = CurrentDb.Containers(ContainerName).Documents.Count - 1
' подготавливаем статусную строку для вывода прогрессбара
If n >= 0 Then
' выводит в статусной строке слово Forms
      SysCmd acSysCmdSetStatus, ContainerName
' выводит в статусной строке количество форм
      SysCmd acSysCmdInitMeter, ContainerName, (n + 1)
else

' выход из процедуры если форм нет
      Exit Sub
end if

' перебор форм
For j = 0 To n
      MN = CurrentDb.Containers(ContainerName).Documents(j).Name

' открываем форму в режиме конструктора
      DoCmd.OpenForm MN, acDesign, , , , acHidden
' изменяем параметр AllowDesignChanges
      Forms(MN).AllowDesignChanges = blnChange
' закрываем форму с сохранением
      DoCmd.Close acForm, MN, acSaveYes
' изменяем значение прогрессбара в статусной строке
      SysCmd acSysCmdUpdateMeter, (j + 1)
Next

' очищаем статусную строку
SysCmd acSysCmdClearStatus

On Error GoTo 0
Exit Sub

SetChangeDesignDAO_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure SetChangeDesignDAO"

End Sub

Всё это хорошо работало, но когда я перешел на ADP, подпрограмму пришлось переработать. Дело в том, что для ADP CurrentDB не действует. Пришлось немного посидеть над подпрограммой. Теперь её можно применять и в MDB и в ADP.

Public Sub SetChangeDesignADO() 'blnChange As Boolean)

' Подпрограмма изменения параметра формы AllowDesignChanges -
' разрешение на вывод окна параметров на экран во всех режимах - True
' или только в режиме конструктора - False
' В подпрограмме использованы некоторые идеи Юрия Шермана

Dim FormName As String, j As Integer, n As Integer
Dim ContainerName As String
Dim blnChange As Boolean

On Error GoTo SetChangeDesignADO_Error

ContainerName = "Forms"

' Выбор режима вывода окна свойств
Select Case MsgBox("Разрешить вывод окна параметров на экран только в режиме конструктора?" _
& vbCrLf & "(Нет(No) - во всех режимах)" _
, vbYesNoCancel Or vbCritical Or vbDefaultButton1, _
"Установка режима вывода окна параметров на экран")
      Case vbYes

' разрешение на вывод окна параметров на экран только в режиме конструктора
            blnChange = False
      Case vbNo

' разрешение на вывод окна параметров на экран во всех режимах
            blnChange = True
      Case vbCancel

' отмена выполнения подпрограммы
            Exit Sub
End Select


' определяем количество форм
n = CurrentProject.AllForms.Count - 1
' подготавливаем статусную строку для вывода прогрессбара
If n >= 0 Then
' выводит в статусной строке слово Forms
      SysCmd acSysCmdSetStatus, ContainerName
' выводит в статусной строке количество форм
      SysCmd acSysCmdInitMeter, ContainerName, (n + 1)
else
' выход из процедуры если форм нет
      Exit Sub
end if

' перебор форм
For j = 0 To n
      FormName = CurrentProject.AllForms(j).Name

' открываем форму в режиме конструктора
      DoCmd.OpenForm FormName, acDesign, , , , acHidden
' изменяем параметр AllowDesignChanges
      Forms(FormName).AllowDesignChanges = blnChange
' закрываем форму с сохранением
      DoCmd.Close acForm, FormName, acSaveYes
' изменяем значение прогрессбара в статусной строке
      SysCmd acSysCmdUpdateMeter, (j + 1)
Next

' очищаем статусную строку
SysCmd acSysCmdClearStatus

On Error GoTo 0
Exit Sub

SetChangeDesignADO_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure SetChangeDesignADO"

End Sub

Примечание: в Access 97 я не смог найти аналог свойству AllowDesignChanges, хотя при преобразовании из Access 2000, возможность открыть окно свойств объектов в режиме формы блокируется.

Категория: MS Access | Добавил: admin (22.07.2008)
Просмотров: 929 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Реклама на сайте

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Наши друзья

Счетчики
  • Каталог Луганских сайтов
  • МЕТА - Украина. Рейтинг сайтов
  • Rambler's Top100
Ваш IP: 216.73.216.140

При полном или частичном копировании материалов с сайта, ссылка на ITsecure.org.ua обязательна!
ITsecure.org.ua ©2008-2025