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 пикселей.
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | 326SetAllX2 | .zip | 6,45 КБ |