TC 7.50 JScript
Добрый день!
Подскажите пожалуйста новичку, вот какое дело!
Хотел написать универсальную функцию нажатия на кнопку в приложении, для этого использовал FindChild.
function BtnPress(param)
{
var process = Sys.Process("vfp8");
if(!Sys.WaitProcess("vfp8",100).Exists)
{
Log.Message("Приложение закрыто");
}
var form = Sys.Process("vfp8").Form("SCREEN");
var button = form.FindChild("Caption",param,100);
button.Click();
}
function Test()
{
BtnPress("cmd4");// свойство объекта-Caption(кнопки в данном случае)
}
Вот таким образом функция работает очень медленно, т.к. путь к кнопкам может отличаться, к примеру:
Sys.Process("vfp8").Form("SCREEN").Dialog("show_login").Button("cmd2")
Sys.Process("vfp8").Form("SCREEN").Panel("show_sprspr_e").Button("cmd11")
Sys.Process("vfp8").Form("SCREEN").Dialog("show_zkr_edt").Button("cmd6")
Если вот таким образом действовать, работает быстрее, но пропадает универсальность, и я не смогу нажимать кнопку на Panel:
var dialog = Sys.Process("vfp8").Form("SCREEN").Dialog("*");
var button = dialog.FindChild("Caption",param,100);
button.Click();
Т.е. родителем кнопки может быть Dialog, Panel и в последствии еще что-ндь найдется.
Подскажите, пожалуйста, как мне сделать чтобы ТС быстро отрабатывал данный скрипт, но при этом не пропала универсальность функции???
Заранее, спасибо!!!
Медленно работает метод FindChild
Автор mdv121314, 18 ноя 2011 13:36
Сообщений в теме: 3
#1
Отправлено 18 ноября 2011 - 13:36
#2
Отправлено 18 ноября 2011 - 14:57
я не уверен, но наверное так:
var Form = Sys.Process("vfp8").Form("SCREEN");
var button = Form.FindChild("Caption",param,100);
button.Click();
var Form = Sys.Process("vfp8").Form("SCREEN");
var button = Form.FindChild("Caption",param,100);
button.Click();
#3
Отправлено 18 ноября 2011 - 15:08
Подозреваю, что тормоза из-за того, что вы используете глубину поиска 100. Попробуйте свести это число к минимуму. Например, если вы точно знаете, что между Form("SCREEN") и Button(caption_кнопки) всего 1 контейнер, то используйте глубину поиска 1. Если не более 2х контейнеров - 2 и т.п.var form = Sys.Process("vfp8").Form("SCREEN"); var button = form.FindChild("Caption",param,100);
#4
Отправлено 21 ноября 2011 - 06:05
Подозреваю, что тормоза из-за того, что вы используете глубину поиска 100. Попробуйте свести это число к минимуму. Например, если вы точно знаете, что между Form("SCREEN") и Button(caption_кнопки) всего 1 контейнер, то используйте глубину поиска 1. Если не более 2х контейнеров - 2 и т.п.var form = Sys.Process("vfp8").Form("SCREEN"); var button = form.FindChild("Caption",param,100);
При использовании Flat модели у меня действительно только 1 контейнер, изменил глубину до 1, на выполнение функции уходит 4 секунды, до этого от 30 секунд до минуты, т.ч. проблема решена!
Как-же это я сам не дошел :(
Большое спасибо!
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных