Перейти к содержимому

Фотография

Win32TreeView.ExpandItem


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 Dart

Dart

    Новый участник

  • Members
  • Pip
  • 70 сообщений
  • Город:г. Севастополь

Отправлено 21 августа 2006 - 14:20

Здравствуйте,

У меня вопрос по объекту Win32TreeView.

Я делаю что-то вроде:

function Test_TreeView()
{
var w1;
w1 = NameMapping.Sys.pJavaW.Window("#32770", "New").Window("SWT_Window0").Window("SysTreeView32");
w1.DblClickItem("|RootItem|FirstLevel|Element");
}

Изначально TreeView выглядит вот так

[+] RootItem
т.е. элементы не развернуты.

запуск функции Test_TreeView() приводит к неудаче -
"The TreeView node 'FS Outbound connector' not found"

Если самостоятельно развернуть все дерево и после свернуть обратно, т.е. вернуть состояние
[+] RootItem

и после этого запустить Test_TreeView() - результат успех. Почему? Что проихошло? Т.е. чтобы кликнуть на ноду сначала необходимо хотябы один раз ее развернуть?

==========================================
Еще один вопрос как развернуть дерево полностью?

method .ExpandItem разворачивает только ноды следующего дочернего уровня, но не всех уровней. Т.е. происходит как бы нажатие назнак "+" Дополнительной клавиатуры. Если же на дополнительно клавиатуре нажать "*" то ветка развернется полностью, однако тут проблема объект TreeView не имеет метода ExpandAll (или что-то в этом духе) и в то же время такой вот вариатн

TreeViewObj.Keys("*") приведет к нажатю "*" на стандартной части клавиатуры т.е. это звездочка на клавише цифры 8 а не та звездочка что сама по себе над цифрой 9 справа.
Как быть ? как развернуть все дерево? Всмысле есть ли ершение помимо написания алгоритма рекурсивного спуска по дереву.
  • 0

#2 Dart

Dart

    Новый участник

  • Members
  • Pip
  • 70 сообщений
  • Город:г. Севастополь

Отправлено 21 августа 2006 - 15:40

Относительно второго вопроса - впринципе возможно вот такое решение -

[JScript]

function ExpandBranche(TreeViewObj, FullNodePath)
/*
Params:
TreeViewObj - [Object] - TreeView Control.
FullNodePath - [String] - Full path to node
*/

{
var restoredArray = FullNodePath.split("|");
var pathesArray = new Array(restoredArray.length);

pathesArray[0] = "";

for ( i = 1; i < restoredArray.length; i++)
{
pathesArray[i] = pathesArray[i-1]+"|"+restoredArray[i];

TreeViewObj.ExpandItem(pathesArray[i]);
}
}


пример использования:

function test_Expand()
{
TreeViewObj = NameMapping.Sys.pJavaW.Window("#32770", "New").Window("SWT_Window0").Window("SysTreeView32");
FullNodePath = "|root|firstlev|someval";
ExpandBranche(TreeViewObj, FullNodePath);
TreeViewObj.ClickItem(FullNodePath);
}


Однако не очень удобно каждый раз вызывть какую-то функцию которая подготовит TreeView к тому чтобы можно было непосредственно кликнуть на элемент по имени.
Может как-то проще можно сделать?
  • 0

#3 Gala

Gala

    Новый участник

  • Members
  • Pip
  • 34 сообщений
  • ФИО:-

Отправлено 22 августа 2006 - 09:27

Вместо TreeViewObj.Keys("*") надо написать TreeViewObj.Keys("[X106]"). 106 - виртуальный код клавиши "Серая *"
  • 0

#4 Dart

Dart

    Новый участник

  • Members
  • Pip
  • 70 сообщений
  • Город:г. Севастополь

Отправлено 22 августа 2006 - 12:40

Вместо TreeViewObj.Keys("*") надо написать TreeViewObj.Keys("[X106]"). 106 - виртуальный код клавиши "Серая *"

Просмотр сообщения


Спасибо, нашел коды в MSDN. TreeViewObj.Keys("[X"+VK_MULTIPLY+"]"); работет :)

Но первый вопрос все еще открыт. Почему необходимо один раз раскрвыть ноду перед кликом на нее и в то же время если после раскрытия ноды ее закрыть то TC все равно сможет на нее кликнуть.
  • 0

#5 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 22 августа 2006 - 16:59

Здравствуйте, Dart.

Я думаю дело в том, что узлы в вашем дереве создаются динамически при открытии родительских узлов. TestComplete проверяет путь, переданный в него перед совершением действия (двойного клика в данном случае), а так как некоторые объекты не существуют, то он генерирует ошибку.
  • 0
С уважением,
Дмитрий

#6 Dart

Dart

    Новый участник

  • Members
  • Pip
  • 70 сообщений
  • Город:г. Севастополь

Отправлено 22 августа 2006 - 17:47

Здравствуйте, Dart.

Я думаю дело в том, что узлы в вашем дереве создаются динамически при открытии родительских узлов. TestComplete проверяет путь, переданный в него перед совершением действия (двойного клика в данном случае), а так как некоторые объекты не существуют, то он генерирует ошибку.

Просмотр сообщения


Это все объясняет, спасибо!
  • 0

#7 Anny

Anny

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 01 марта 2007 - 10:11

Здравствуйте! А можно узнать как открыть ветки дерева на DelphiScript? Кто сможет мне подсказать?Я использовала метод Child(). Но он мне выдал совсем не то, что мне нужно. Допустим, существует такое дерево.
Объект дерева: w.SwingObject('JTree', '', 0);
Как можно добраться до его веток?
Заранее всем спасибо!!! :acute:
  • 0

#8 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 02 марта 2007 - 06:40

Здравсвуйте.

Открыть ветки Swing дерева можно используя нативный метод expandRow(<rowIndex>). Вот у меня есть пара примеров работы с деревом Swing, правда на JScript. Может, пригодится.

...
    SelectJTreeItemByIndex(w.JTree, "0|1|2")  
    SelectJTreeItem(w.JTree, "JTree|sports|football")
...

function SelectJTreeItemByIndex(Tree, Path)
{
  var index, current, i, j;
  var items = Path.split("|");

  current = 0;
  for (i=0; i<items.length; i++) {
    index = StrToInt(items[i]);
    for (j=0; j<index; j++) Tree.collapseRow(current++);
    Tree.expandRow(current++);
  }
  Tree.setSelectionRow(--current);
}

function SelectJTreeItem(Tree, Path)
{
    i = 0;
    ind = 0;
    item = Path.split("|");
    
    while (ind < item.length) {
      try {
        CurItem = Tree.getPathForRow(i).getLastPathComponent().toString();
      }
      catch(exception)
      {
        Log.Warning("The '" + Path + "' path was not found!")
        return false;
      }
      
      if (item[ind] != CurItem) i++;
      else { 
        Tree.expandRow(i++);
        ind++;
      }
    }
    Tree.setSelectionRow(i-1);
    return true;
}

function JRightClickSelectedItem(Tree) 
{
    Row = Tree.getMinSelectionRow()
    Rect = Tree.getRowBounds(Row)
    
    Sys.MouseDown(VK_RBUTTON, Tree.SLeft + Rect.centerX, Tree.STop +
Rect.centerY)
    Sys.MouseUp(VK_RBUTTON, Tree.SLeft + Rect.centerX, Tree.STop +
Rect.centerY) 
}

  • 0
С уважением,
Дмитрий

#9 *Angel*

*Angel*

    Новый участник

  • Members
  • Pip
  • 41 сообщений
  • ФИО:*Angel*

Отправлено 04 апреля 2007 - 11:06

А есть ли другая возможность помимо прохода всего дерева определить, существет ли определенная нода? :blush:
  • 0

#10 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 06 апреля 2007 - 11:48

Здравствуйте.

Боюсь, что нет. Для этого как минимум придётся иметь объект типа TreePath, указывающий на данную ноду, а создавать новые Java объекты из TestComplete'а пока нельзя.
  • 0
С уважением,
Дмитрий


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных