SetAllX2 by IK – расширенная групповая работа со свойствами/методами объектов

Стандартному методу фоксовых контейнеров SetAll не всегда хватает гибкости, что и подвигло разработчиков из MS написать FFC класс SetAllX (имеется начиная с VFP7), но и там не были реализованы некоторые возможности, и имелось несколько ошибок/странностей, что и подвигло меня к усовершенствованию этого класса.

SetAllX2 by IK - расширенная групповая работа со свойствами/методами объектов

Инструкция по использованию:

1) Создайте экземпляр класса SetAllX2 - например так:

_SCREEN.NewObject ("SetAllX2", "SetAllX2", "SetAllX.vcx")

2) Теперь можно пользоваться методом SetAllX созданного объекта из любого метода вашей программы, например так:

_SCREEN.SetAllX2.SetAllX (параметры...)

Синтаксис метода SetAllX:

SetAllX (toParent, tcProperty, [tcExpr], [tcBaseClassList], [tlNoContainerMode], [tlErrorWait])

Параметры:

toParent - объектная ссылка на обрабатываемый контейнер, например ThisForm или This.cntSomeContainer из метода некоторого объекта, или m.goFormRef из процедуры.

tcProperty - Название устанавливаемого свойства, например "BackColor" или "ReadOnly". Или имя исполняемого метода, например "MyHookMethod ()" или скажем "Refresh ()" признаком различения свойства/метода является закрывающая круглая скобка в самой правой позиции.

tcExpr - Выражение или значение, присваиваемое указанному свойству. Например: число - 0 или скажем 2^8+2^4, строка - "Caption" или "Сегодня " + TRANSFORM (DATE()), тип даты - {^2003.12.06} или вычисляемое выражение - "(m.goApp.Caption + ' и ' + This.Caption)"
Если всё выражение заключено в круглые скобки (естественно для этого оно должно быть строковым), то производится его вычисление при присвоении, помимо этого производится корректное преобразование ссылок This и This.Parent (а значит и производных от них). Т.е. можно присвоить свойству значение, полученное путём вычисления выражения содержащего это же и/или другие свойства целевого объекта, подробнее см. в Примерах.
Может быть пропущен, если второй параметр указывает на исполнение метода.
tcBaseClassList Список имён базовых классов VFP (через запятую, регист и пробелы не учитывается), с объектами которых идёт работа. Напимер "CommandButton, Header, Label" По умолчанию - пустая строка, что означает обработку объектов всех классов.

tlNoContainerMode - Флажок, отключающий разбор иерархии вложенности объектов. Т.е. если передано .T. то будут обработаны только объекты непосредственно расположенные в указанном контейнере, иначе - и во всех вложенных контейнерах. По умолчанию установлено .F. - т.е. разбор иерархии включен.

tlErrorWait - Флажок, отключающий поглощение ошибок данным классом. Суть работы данного класса предполагает отсуствие каких-бы то ни было проверок (на наличие того или иного свойства/метода, корректнось типов данных и т.п.), а просто поглощение всех возникающих ошибок. Установка этого параметра в .T. отменяет это поведение и чаще всего вызывает возникновение массы сообщений об ошибках 🙂 По умолчанию установлено .F. - т.е. ошибки поглощаются.

Всё вышеуказанное есть и в стандартном классе SetAllX из библиотеки FFC (естественно не учитывая несколько мелких ошибок реализации :)) А теперь нечто новое:

Свойство cClassNames - при его задействовании (помещении туда непустой строки - списка имён классов) включается разбор иерархии наследования - т.е. будут обработаны только объекты указанных классов ИЛИ КЛАССОВ ПРОИЗВОДНЫХ ОТ УКАЗАННЫХ. Т.е. если имеется иерархия вида

TextBox - txt - txtSuper - txtSuperPuper
- txtAnother - txtCool

То указав в списке имя класса txt мы будем работать с объектами всех этих классов, кроме базового (TextBox), а указав txtSuper, мы будем работать только с классами txtSuper и txtSuperPuper. Список имеет такой же формат как и параметр tcBaseClassList - имена перечислены через запятую, регист и пробелы не учитываются.
ВНИМАНИЕ - это свойство не отменяет параметров метода SetAllX, а дополняет их - т.е. если при вызове метода указан параметр tcBaseClassList - то будет осуществляться фильтрация как по именам базовых классов, так и по этому свойству. Свойство само по себе не сбрасывается, т.е. при необходимости это должен сделать программист - присвоив свойству пустую строку.

Примеры:
1) _SCREEN.SetAllX2.SetAllX (m.oFormRef, "BackColor", 255) - установит для всех объектов расположенных на форме oFormRef цвет фона в красный.

2) _SCREEN.SetAllX2.SetAllX (m.oFormRef, "ForeColor", RGB (0, 255, 0), "Label,CommandButton") - установит для всех надписей и кнопок расположенных на форме oFormRef цвет шрифта в зелёный.

3) _SCREEN.SetAllX2.SetAllX (m.oFormRef.Cnt1, "FontSize", 20, "", .T.) - установит для всех объектов расположенных _именно_ в контейнере Cnt1 (т.е. не учитывая иные вложенные контенйнеры, например PageFrame или Grid) размер шрифта в 20 пунктов.

4) _SCREEN.SetAllX2.SetAllX (m.oFormRef, "SomeMethod ()", "", "", .T.)
Выполнит метод SomeMethod для _всех_ объектов расположенных _именно_ на форме oFormRef, не учитывая объекты на вложенных контейнерах.

5) ASELOBJ (m.laTemp, 1)
* Получим ссылка на форму, открытую в Форм дизайнере...
_SCREEN.SetAllX2.cClassNames = "txtSuper,lblSuper"
_SCREEN.SetAllX2.SetAllX (m.laTemp, "FontName", "Arial")
Установит для всех объектов производных от классов txtSuper, lblSuper и их наследников, расположенных на форме открытой в дизайнере, шрифт Arial.

6) _SCREEN.SetAllX2.SetAllX (m.oFormRef, "FontSize", "(This.FontSize + 1)")
Увеличит для всех объектов расположенных на форме oFormRef размер шрифта на единицу.

7) _SCREEN.SetAllX2.SetAllX (m.oFormRef, "Top", "(This.Top + 10), "", .T.)
Сдвинет объекты расположенные непосредственно на форме oFormRef вниз на 10 пикселей.

Автор: Igor Korolyov

Автор публикации

не в сети 4 года

Igor Korolyov

Комментарии: 0Публикации: 4Регистрация: 28-05-2002
Вложенные файлы
#
Название
Тип файла
Размер
1 326SetAllX2 .zip 6,45 КБ
Материалы по теме
Оставить комментарий
//////////////// ///////////////
Авторизация
*
*
Генерация пароля