Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
|
ключи - значения объекта
8н
Скрытый текст
2-я версия, добавлена поддержка перебора TJSIndexedProperty.
Иногда это не работает, или нет гарантии что выведен весь массив, у этого объекта неизвестно кол-во полей, обращение к несуществующему полю может привести к зависанию, отлов ошибки не работает. В таких случаях кол-во можно ввести в ручную, если массив уже открыт, можно нажать Update.
Предыдущий пост можно удалить.
[свернуть]
Выводит в свойства ключи - значения объекта, значения можно изменить и применить. Если значение является объектом, можно перейти к нему по ссылке. Можно переходить к родительскому объекту, и возвращаться обратно. Выводит путь в подсказке (но это не точно).
Если у функции есть параметры, сначала появятся поля для ввода параметров и кнопка Call - вызвать с указанными параметрами, Cancel - отменить вызов, иначе функция запустится сразу (к функциям без параметров в начале на кнопке добавлены ">>"), будет выведен возврат функции, если функция вернёт объект, будет предложено перейти к нему.
Есть вывод результатов в файл и открытие файла в редакторе по умолчанию.
CODE
Код:
/*
http://promebelclub.ru/forum/showthread.php?p=501450#post501450
Просмотр свойств объекта
typeobject - объект исследования
1 - выделенный
2 - по указанию
3 - указанный в переменной myobject
FunctionInclude - нужно ли отображать функции в результатах
Элементы управления на панели инструментов
Owner - перейти к родительскому объекту
Return - вернутся к предыдущему
Update - обновить данные о объекте
Export - сохраняет данные в файл, и открывает его в редакторе по умолчанию
Highlighted - подсветить объект
Exit - завершить скрипт
IPCount - кол-во элементов для TJSIndexedProperty.
Если автоматически определяет неправильно, то можно указать своё значение.
*/
var typeobject = 3
if (typeobject == 3) {
var myobject = Model
}
var FunctionInclude = 1
// -------------------------------------------------
if (typeobject == 1 && !Model.Selected) {
alert('Нужно выделить панели')
Action.Finish();
}
if (typeobject == 1)
var targetobject = Model.Selected
else if (typeobject == 2)
var targetobject = GetObject("Укажите объект")
else if (typeobject == 3)
var targetobject = myobject
if (!(targetobject instanceof Object))
Action.Cancel();
var history = [];
var InputParam = [];
var argslenght = 0;
var text = '';
var Path = []
var Prop = Action.Properties;
ViewPath(1, targetobject)
parse();
NewButtonInput('Owner').OnChange = ButtonOwner
NewButtonInput('Return').OnChange = ButtonReturn
NewButtonInput('Update').OnChange = function () {OnClickObject(targetobject, '', 1)}
NewButtonInput('Export').OnChange = ButtonExport
NewButtonInput('Highlighted').OnChange = OnHighlighted
NewButtonInput('Exit').OnChange = function () {Action.Finish()}
ButtonCallDelimiter = NewButtonInput(' | ')
IndexedCount = NewNumberInput('IPCount');
ButtonCallDelimiter = NewButtonInput(' | ')
ButtonCallDelimiter.Visible = 0
ButtonCallCancel = NewButtonInput('Cancel')
ButtonCallCancel.Visible = 0
ButtonCallCancel.OnChange = CallBarHide
ButtonCall = NewButtonInput('Call')
ButtonCall.Visible = 0
ButtonCall.OnChange = OnButtonCall
Action.Continue();
function AddItem(key, obj) {
if (!FunctionInclude && (obj instanceof Function))
return
if ((obj instanceof Function)) {
c = Prop.NewButton((!obj.length ? ' >> ' : ' ') + obj.toString().replace("\n", ""))
c.Name = key
c.OnClick = OnClickFunction.bind(c, obj)
} else if (obj instanceof Object) {
c = Prop.NewButton(obj)
c.Name = key
c.OnClick = OnClickObject.bind(c, obj, key, 0)
} else {
c = Prop.NewString(key, obj)
c.OnChange = OnChange.bind(c, key)
}
text += key + '\t\t\t' + obj + '\r\n'
}
function parse(Count) {
text = ''
Prop.Capacity = 0
cString = Prop.NewString(targetobject)
cString.ReadOnly = 1
if (Count) {
for (var i = 0; i < Count; ++i) {
AddItem('[' + i + (targetobject[i].Name === undefined || targetobject[i].Name == '' ? ']' : ' - ' + targetobject[i].Name + ']'), targetobject[i])
}
} else {
Count = 0
for (var key in targetobject) {
++Count
AddItem(key, targetobject[key])
}
}
text = targetobject + ' Count: ' + Count + ' Path: ' + Path.join('.') + '\r\n\r\n' + text
cString.Value = 'Count: ' + Count
}
function OnChange(key) {
if (isNaN(Number(this.Value)))
Value = this.Value
else
Value = parseFloat(this.Value)
targetobject[key] = Value
if (typeof targetobject.Build == 'function')
targetobject.Build()
Action.Commit();
}
function OnClickObject(obj, name, nopath) {
if (!(obj instanceof Object))
return
Count = 0
try {
_Count = (IndexedCount.Value || obj.___Count || targetobject[name.slice(0, -1) + 'Count']
|| targetobject[name + 'Count'] || targetobject['Count'])
if ((obj instanceof TJSIndexedProperty) && _Count) {
Count = _Count
obj.___Count = Count
}
}
catch (e) {}
if (nopath !== 1) {
ViewPath(1, name)
history.push(targetobject)
targetobject = obj
}
parse(Count)
}
function ButtonReturn() {
if (!history.length)
return alert('история пуста')
targetobject = history.pop()
ViewPath(0)
if (targetobject.___Count)
parse(targetobject.___Count)
else
parse();
}
function ButtonOwner() {
if (!targetobject.Owner)
return alert('родительский объект отсутствует')
OnClickObject(targetobject.Owner, 'Owner', 0)
}
function OnClickFunction(obj) {
CallBarHide()
if (obj.length > 0)
return CallBarShow(obj)
argslenght = 0;
FunctionCall(obj, this.Name)
}
function FunctionCall(obj, Name) {
try {
if (argslenght) {
args = []
for (var k = 0; k < argslenght; k++) {
args.push(InputParam[k].Value)
}
r = obj.apply(targetobject, args);
}
else
r = obj.call(targetobject)
}
catch (e) {
alert(e)
return 1
}
if (r instanceof Object) {
b = confirm('Перейти к ' + r);
if (b)
return OnClickObject(r, Name + '()', 0)
return 1
}
alert(r)
}
function CallBarShow(obj) {
CallBarObj = obj
CallBarCheck(obj.length)
for (var k = 0; k < obj.length; k++) {
InputParam[k].Value = 0
InputParam[k].Visible = 1;
}
ButtonCallDelimiter.Visible = 1
ButtonCall.Visible = 1;
ButtonCallCancel.Visible = 1;
}
function CallBarCheck(i) {
argslenght = i;
if (InputParam.length >= i)
return
for (var k = InputParam.length; k < i; k++) {
InputParam[k] = NewNumberInput('arg ' + (k + 1));
InputParam[k].Visible = 0;
}
}
function CallBarHide() {
for (var k = 0; k < InputParam.length; k++) {
InputParam[k].Visible = 0
}
ButtonCallDelimiter.Visible = 0
ButtonCall.Visible = 0
ButtonCallCancel.Visible = 0
}
function OnButtonCall() {
CallBarHide()
FunctionCall(CallBarObj)
}
function OnHighlighted() {
Model.UnHighlightAll()
targetobject.Highlighted = 1
}
function ButtonExport() {
system.writeTextFile('export.txt', text);
var file = '"' + Action.Properties.AbsolutePath() + 'export.txt"'
NewCOMObject('WScript.Shell').run(file);
}
function ViewPath(add, key) {
if (add)
Path.push(key == '' ? targetobject : key)
else
Path.pop()
Action.Hint = Path.join('.')
}
[свернуть]
Последний раз редактировалось sergio1982; 19.10.2020 в 19:36.
|