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

Фотография

Грид. Клик на конкретной строке.


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

#1 Натали

Натали

    Активный участник

  • Members
  • PipPip
  • 84 сообщений

Отправлено 27 декабря 2004 - 08:56

Помогите пожалуйста...
Надо записать процесс открытия редактора на конкретной строке в гриде.
В обычном виде все просто - кликом мыши выбираем строчку в гриде, потом кликаем на меню.
Когда записываю скрипт средствами Робота, получаю
Window SetContext, "Caption=Пользователи", ""
PSGrid Click, "ObjectIndex=1", "Coords=72,87"
Toolbar Click, "Text=tb_Main;\;ItemID=2", "Coords=8,7"

Меня не устраивала вторая строка, потому что фактически записался координатный клик, а мне необходимо выбирать конкретные данные.
Смотрю в хелп.
Переписываю вот так
PSGrid Click, "ObjectIndex=1", "Col=1;Value=Tester;Col=2;Value=Test"
Не работает. :(
Беру пример из хелпа, переписываю вот так
PSGrid Сlick, "ObjectIndex=1", "ColTitle=Пользователи;Value=Tester;ColTitle=Логин;Value=Test"
Опять не работает. :(
И так тоже.
PSGrid Click, "ObjectIndex=1", "Text=Tester|Test"

Я уже всю голову сломала - как мне обратиться к строке...
  • 0

#2 Petr

Petr

    Опытный участник

  • Members
  • PipPipPipPip
  • 317 сообщений
  • ФИО:Можаев Петр
  • Город:Москва

Отправлено 27 декабря 2004 - 09:05

Данная команда (PSGrid) предназначена для "Performs an action on a PeopleTools grid". У Вас грид именно такой? Возможно, что у Вас нестандартный грид. Я лично из такой ситуации выкрутился следующим образом: отказался от мыши и работал только с помощью клавиатуры - недостатков у такого способа много (главный - если грид немного поменяли, порядок столбцов например, то придется править скрипт), но проблему решить можно.
  • 0

#3 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 27 декабря 2004 - 09:51

Я эту ситуацию обошла следующим ообразом: вам надо конкретный пользователь, вы заранее знаете какой. Заносите его в какую-нить переменную. Потом делаете сет контекст на окне с данным гридом. Тут мышью пльзоваться действительно неудобно - попробуйте с помощью кавиатуры активизировать работу с гридом (вниз, ввод и т.п.) вам надо попасть именно на записи - на первую в частности. Потом копируйте каждую запись в буфер и сравниваете в цикле с вашей конкретной переменной. Как только запись найдена - переходите к следующим действиям. Здесь и привязки к координатам не будет и пользователя нужного выберите.
А просто по записи (как вы пробовали) редко получается - не может робот понять запись в гриде((
  • 0

#4 Натали

Натали

    Активный участник

  • Members
  • PipPip
  • 84 сообщений

Отправлено 27 декабря 2004 - 10:08

СПасибо большое за помощь - буду пробовать с клавиатурой.

Грид может у меня действительно не PSGrid.
Я тестирую систему, написанную на Дельфи. Причем многие контролы, хоть и имеют корни в стандартных дельфевых, являются переделанными.
И, соответственно, хоть какой-то ближайших вид грида - TDBGrid, в Роботе ассоциирован с Generic объектом, который завязан только на координатах (если я правильно понимаю).

Я, честно говоря, совсем расстроена, потому что не могу правильно обратиться ни к одному нужному мне контролу.
Т.е. клик координатный отрабатывается, а получить какие-либо свойства не реально - даже у комболистбокса, потому что он тоже переделанный.
  • 0

#5 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 27 декабря 2004 - 10:43

Я, честно говоря, совсем расстроена, потому что не могу правильно обратиться ни к одному нужному мне контролу.

Вот уж чего действительно делать не стоит -так это расстраиваться)) Наоборот - это даже интеренсо - выкрутится как-нить - придумать обходной путь - было бы скучно, если бы все получалось с первого раза.

Насчет комбобоксов -и у меня та же проблема - нахожу записи так же как и в гриде
  • 0

#6 Petr

Petr

    Опытный участник

  • Members
  • PipPipPipPip
  • 317 сообщений
  • ФИО:Можаев Петр
  • Город:Москва

Отправлено 27 декабря 2004 - 10:44

А object mapping не помогает работать с комбобоксами и т.п.?
Inspector что определяет у Вашего комбобокса?
  • 0

#7 Натали

Натали

    Активный участник

  • Members
  • PipPip
  • 84 сообщений

Отправлено 27 декабря 2004 - 10:57

даже интеренсо - выкрутится как-нить - придумать обходной путь - было бы скучно, если бы все получалось с первого раза.


На меня давят ожидания...
Т.е. ждут, что я сейчас быстренько накликаю скрипты, которые потом рраз - и можно будет запускать едва ли не отдельно от меня.

И еще - объясните мне, что имеется в виду под "копированием в буфер"?
Обычное классическое Ctrl+C?
Дело в том, что в моем проекте на всех гридах запрещена отработка этого сочетания клавиш.
Т.е. считывать значения придется по-другому. :(

А object mapping не помогает работать с комбобоксами и т.п.?


У меня не совсем комбобокс, скорее ComboEditbox.
Он предлагает мне роботовский ComboEditbox.
Но потом, в процессе , когда я пытаюсь отработать
Result=SQAGetProperty("Type=ComboEditBox;ObjectIndex=1", "Text", TextEBop) все заканчивается с результатом Fail.
  • 0

#8 Petr

Petr

    Опытный участник

  • Members
  • PipPipPipPip
  • 317 сообщений
  • ФИО:Можаев Петр
  • Город:Москва

Отправлено 27 декабря 2004 - 11:06

Копировать в буфер можно также с помощью комбинации "ctrl+Ins", обычно реализуют оба способа, но хотя бы один должен быть. Если такого способа нет, то стоит попросить разработчиков добавить такую возможность.
Попробуйте поработать с Вашим ComboEditbox как с EditBox при вводе данных и как с ComboBox при выборе из списка - вдруг получится. А также попробуйте работать с Вашим элементом как с ComboListBox.
  • 0

#9 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 27 декабря 2004 - 11:08

А по -другому в буфер никак не считать. Разве что не считывать в буфер а вытаскивать из записи свойство , например Item - или какие там есть
  • 0

#10 Натали

Натали

    Активный участник

  • Members
  • PipPip
  • 84 сообщений

Отправлено 28 декабря 2004 - 08:27

Ффуф, с комбобоксами вроде разобралась.
На гриде считывание в буфер не работает, но нашелся путь в большой обход.
Только чтобы этот путь совершить, нужно количество строк в гриде.
Помогите плиз, как определить это количество?
  • 0

#11 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 28 декабря 2004 - 08:55

Количество это, я так понимаю, нужно для постороения цикла. Я в таком случае коннектилась к базе, в котрой находиться таблица (записи грида) - и делала селект count(*) - т.е. подсчитывала количество записей в таблице.

Ещё мне кажется можно как-то с while поработать... типа пока активна кнопка Вниз - т.е. пока есть записи- то делать то-то.. но я в свое время не смогла найти нжную функцию - может у вас получится
  • 0

#12 Petr

Petr

    Опытный участник

  • Members
  • PipPipPipPip
  • 317 сообщений
  • ФИО:Можаев Петр
  • Город:Москва

Отправлено 28 декабря 2004 - 09:00

Количество это, я так понимаю, нужно для постороения цикла. Я в таком случае коннектилась к базе, в котрой находиться таблица (записи грида) - и делала селект count(*) - т.е. подсчитывала количество записей в таблице.

А как Вы поступали в ситуациях, когда число строк в таблице на базе не соответствовало числу строк в гриде? (например выполнялась сортировка выборки на гриде или что-то подобное)
По моему самое простое - попросить программистов добавить возможность считывания в буфер из грида, без этого у Вашего приложения плохая testability.
  • 0

#13 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 28 декабря 2004 - 09:15

так при ччем тут считываение в буфер - вопрос в другом - как определить количество строк..... можно и без таблицы - считывать каждое значение - и "Down" - и так далее - но как написать цикл? от чего до чего?
  • 0

#14 Натали

Натали

    Активный участник

  • Members
  • PipPip
  • 84 сообщений

Отправлено 28 декабря 2004 - 09:28

У меня все получилось сильно замороченней.
В программе есть служебная функция вызова окна с содержимым строки (все поля и данные в них) посредством сочетания клавиш и кликов мыши.
Так вот я построила последовательность - выбрали строку, нажали сочетание, вышло окно, считали значение, сравнили с эталоном.
Поскольку окно со значением вызывается только через мышь, то от Down и InputKeys пришлось отказаться. Гриды по высоте неизменны (пока вроде) и координатный сдвиг вниз на 20ед. дает как раз следующую строку. Оставалось только зациклить на нужное количество строк (не вышло) или на условие "пока кликаем в гриде".
Появилась новая проблема -даже когда грид (визуально-логически) закончился, то все равно эмуляция нажатия выбирала последнюю строку грида.
Пришлось кусать левое ухо - считываемое значение сохраняется и сравнивается с последующим. Если они совпадают, значит мы опять на последней строке и надо делать принудительный выход из цикла по Exit Do.
Я, конечно, понимаю, что это весьма неуклюжая конструкция. но пока не вижу других вариантов.
  • 0

#15 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 28 декабря 2004 - 09:46

хм... :blink:

а скролл есть у этого списка?
  • 0

#16 Petr

Petr

    Опытный участник

  • Members
  • PipPipPipPip
  • 317 сообщений
  • ФИО:Можаев Петр
  • Город:Москва

Отправлено 28 декабря 2004 - 09:55

так при ччем тут считываение в буфер - вопрос в другом - как определить количество строк..... можно и без таблицы - считывать каждое значение - и "Down" - и так далее - но как написать цикл? от чего до чего?

Определение количества строк - это уже следствие, причина в том, что более простого способа нет. И я думаю, что это только средствами робота не реализовать.
Роботу все равно, что произойдет после нажатия кнопки. Т.е. к примеру у вас есть editbox, который нельзя редактировать (свойство readonly = true). Вы устанавливаете на него курсор и нажимаете кнопки. Сможете Вы таким способом узнать вводятся данные или нет? Считаем, что свойства элемента недоступны.


координатный сдвиг вниз на 20ед. дает как раз следующую строку

А если у Вас разрешение экрана поменяется, то что получится? Скрипт по возможности должен быть универсальным, а в данном варианте дастаточно жесткое ограничение получается.

а скролл есть у этого списка?

Даже если он и есть, то скорее всего встроен в грид, т.е. свойства скрола узнать не получится. Хотя может быть в данном случае по другому сделано.
  • 0

#17 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 28 декабря 2004 - 10:15

2 Petr
Допустим, что копирование в буфер работает. Ок-и что дальше вы предлагаете делать?
  • 0

#18 Petr

Petr

    Опытный участник

  • Members
  • PipPipPipPip
  • 317 сообщений
  • ФИО:Можаев Петр
  • Город:Москва

Отправлено 28 декабря 2004 - 10:37

2 Petr
Допустим, что копирование в буфер работает. Ок-и что дальше вы предлагаете делать?

Без проблем, если копирование в буфер работает - то после ввода данных в editbox и занесения значения в буфер в случае, если editbox редактируемый в буфере будет значение, если же он не редактируемый - в буфере будет пусто.

Для работы с буфером есть такая вещь - Clipboard (см. SQABasic help).
  • 0

#19 Натали

Натали

    Активный участник

  • Members
  • PipPip
  • 84 сообщений

Отправлено 28 декабря 2004 - 11:17

А если у Вас разрешение экрана поменяется, то что получится? Скрипт по возможности должен быть универсальным, а в данном варианте дастаточно жесткое ограничение получается.



Тогда буду думать. Я же понимаю, что это не самый лучший вариант.
Но ближайшие полгода это не грозит - потому что на своем компе менять разрешение я не собираюсь, а больше никого нет.

Без проблем, если копирование в буфер работает - то после ввода данных в editbox и занесения значения в буфер в случае, если editbox редактируемый в буфере будет значение, если же он не редактируемый - в буфере будет пусто.


Так - это касается одной строки - а как перейти дальше?
И как понять - где грид заканчивается?

а скролл есть у этого списка?


Отдельный? Наверно нет. А как узнать - есть он или нет?
  • 0

#20 Doveangel

Doveangel

    Постоянный участник

  • Members
  • PipPipPip
  • 221 сообщений
  • ФИО:Дроздова Анжелика
  • Город:Беларусь

Отправлено 28 декабря 2004 - 11:26

2 Petr
Допустим, что копирование в буфер работает. Ок-и что дальше вы предлагаете делать?

Без проблем, если копирование в буфер работает - то после ввода данных в editbox и занесения значения в буфер в случае, если editbox редактируемый в буфере будет значение, если же он не редактируемый - в буфере будет пусто.

Для работы с буфером есть такая вещь - Clipboard (см. SQABasic help).

про клипборд знаем - основы как никак...

такая ситуация: есть грид, в нем n строк, работает копирование в буфер. Как вы проверите есть ли в гриде строка "строка". Все записи заполнены, но среди них где-то есть нужная запись. Записей может быть несколько. Т.е. зациклить while нельзя
  • 0


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

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