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

Фотография

Как извлечь изображение из Grid?


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

#1 vitaliy4us

vitaliy4us

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

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

Отправлено 17 февраля 2012 - 08:20

Имеется Grid, в котором есть 3 колонки. В колонке с индексом 1 выводятся строки, а в колонках с индексами 0 и 2 - изображения в виде иконок. Текст извлекается через
str = p.win.Grid.Item(1,i).Value, а как можно извлечь изображение? Положение усугубляется тем, что в каждой строке колонки с индексом 2 может быть 1, 2 или 3 разных иконки, а может и не быть вовсе. Необходимо иметь возможность оценивать состояние каждой иконки по ее наличию и цвету.
  • 0

#2 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 17 февраля 2012 - 21:23

В общем ответ прост: высчитать координаты нужной ячейки и получить скриншот заданного участка (у метода Picture есть необязательные параметры, позволяющие задавать координаты и ширину/высоту скриншота).

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

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#3 vitaliy4us

vitaliy4us

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

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

Отправлено 18 февраля 2012 - 05:18

В общем ответ прост: высчитать координаты нужной ячейки и получить скриншот заданного участка (у метода Picture есть необязательные параметры, позволяющие задавать координаты и ширину/высоту скриншота).

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


Класс грида - DataGridViewEx, класс ячейки - DataGridViewImageCell, приложение открытое .NET. Должен также внести поправку в свое первоначальное сообщение - изменяется не количество изображений в ячейке, а количество столбцов грида. В каждой ячейке может находиться только одна картинка (или ячейка может быть пустой). Воспользоваться скриншотом вряд ли получится, поскольку строки грида сгруппированы в отдельные категории. Эти категории могут быть свернуты (и тогда строки данной категории не видны, а видно только название категории) или развернуты (и тогда их можно видеть).
  • 0

#4 vitaliy4us

vitaliy4us

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

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

Отправлено 18 февраля 2012 - 20:10

OK. Снимаю все свои вопросы по конкретной задаче и хочу получить ответ на элементарный вопрос: существует ли метод для передачи в лог изображения, находящегося в ячейке грида DataGridView?
  • 0

#5 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 18 февраля 2012 - 20:29

Вот пример кода, который помещает в лог скриншот ячейки (1, 1) (т.е. вторая колонка, вторая строка).
Обратите внимание, что свойство Bounds содержит абсолютные значения координат (Top и Left), поэтому для упрощения задачи я просто активировал окно и сделал снимок всего экрана. Если захотите работать с координатами ячейки относительно самого грида, то придется их пересчитывать

  Aliases.WindowsFormsApplication2.Form1.Activate();
  var grid = Aliases.WindowsFormsApplication2.Form1.dataGridView1;
  var cellBounds = grid.Item(1, 1).AccessibilityObject.Bounds;
  
  Log.Picture(Sys.Desktop.Picture(cellBounds.Left, cellBounds.Top, cellBounds.Width, cellBounds.Height)); 


  • 1

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#6 vitaliy4us

vitaliy4us

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

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

Отправлено 19 февраля 2012 - 06:44

  Aliases.WindowsFormsApplication2.Form1.Activate();
  var grid = Aliases.WindowsFormsApplication2.Form1.dataGridView1;
  var cellBounds = grid.Item(1, 1).AccessibilityObject.Bounds;
  
  Log.Picture(Sys.Desktop.Picture(cellBounds.Left, cellBounds.Top, cellBounds.Width, cellBounds.Height)); 

Так работает, но неужели нельзя взять изображение напрямую из ячейки? Пробую:
1 var PicObj = Utils.Picture;
2 PicObj = GridControl.Item(3, 3).FormattedValue;
3 Log.Picture(PicObj);

В отладчике вижу, что в PicObj сохранен объект с параметрами идентичными свойствам Item(3, 3), которые можно видеть в Object Browser (т.е. можно надеяться что это именно то изображение. А в логе не сохраняется, пишет "An exception occured in the Grid unit at line 3. Неизвестное имя").
  • 0


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

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