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

Фотография

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


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

#21 Petr

Petr

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

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

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

Ну во-первых давайте определим, что у нас имеется:
1. порядок столбцов фиксирован?
2. переход от одного столбца к другому реализован каким образом (табуляция или по другому)?
3. если мы находимся на последней строке в последней колонке и нажимаем переход к другому столбцу, то куда мы попадем (останемся в этой ячейке или попадем на другой элемент формы)?
4. если мы находимся в последней колонке, но строка не последняяи и нажимаем переход к другому столбцу, то куда мы попадем (останемся в этой ячейке или попадем на следующую строку)?

Если мы знаем порядок столбцов, то мы сможем попасть туда, куда нам требуется (при условии, что переход из столбца в столбец возможен).

Как вы проверите есть ли в гриде строка "строка".

Вместо сравнения "строка - строка" можно сравнивать "ячейка - значение".

Наличие скрола проверяется визуально - если он есть, то его видно.
  • 0

#22 Натали

Натали

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

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

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

Скроллбары есть - и горизонтальный, и вертикальный.
  • 0

#23 Doveangel

Doveangel

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

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

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

Скроллбары есть - и горизонтальный, и вертикальный.

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

#24 Натали

Натали

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

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

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

Doveangel, во-первых - предлагаю на "ты".
Во-вторых - не подумала. :( Пока работала с гридами, количество строк в которых не превышало размер окна. :(
  • 0

#25 Doveangel

Doveangel

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

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

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

Ну во-первых давайте определим, что у нас имеется:
1. порядок столбцов фиксирован?
2. переход от одного столбца к другому реализован каким образом (табуляция или по другому)?
3. если мы находимся на последней строке в последней колонке и нажимаем переход к другому столбцу, то куда мы попадем (останемся в этой ячейке или попадем на другой элемент формы)?
4. если мы находимся в последней колонке, но строка не последняяи и нажимаем переход к другому столбцу, то куда мы попадем (останемся в этой ячейке или попадем на следующую строку)?

Если мы знаем порядок столбцов, то мы сможем попасть туда, куда нам требуется (при условии, что переход из столбца в столбец возможен).

Как вы проверите есть ли в гриде строка "строка".

Вместо сравнения "строка - строка" можно сравнивать "ячейка - значение".

Давайте определим)
1. порядок фиксирован
2. переход с помощью табуляции
3. в третьем случае ничего не происходит - никуда не попадаем
4. попадаем на след строку


но - грид не фиксирован по отношению к количеству строк. среди них есть ячейки "ячейка". Как нам их определить для дальнейших действий над ними. как нам построить цикл?
  • 0

#26 Doveangel

Doveangel

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

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

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

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

Ра скролл бар есть, то (даю 80 %) у него есть параметр Position. Попробуйте записать простенький скрипт - прокрутите скролл -что выдаст робот.
Предлагаю определить на сколько реально сдвигается грид при прокрутке Position = N... N-какое-нить число приемлемое - подобрать надо для конкретно вашего случая. В принципе можно найтитакое число, тчо не надо будет сдвигать мышь на 20 ед - достаточно будет прокрутить скролл на определенную позицию - и кликать все время по одним координатам - скролл будет менять записи - сдвигать их в окне. Попробуйте) т.е. Попробуй :)
потом расскажешь - что получится
  • 0

#27 Petr

Petr

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

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

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

3. в третьем случае ничего не происходит - никуда не попадаем

Я это понимаю так: жмем на кнопку, но остаемся там, где были до этого.
В таком случае можно поступать следующим образом:
1. Перед тем как переходить к следующей ячейке (читай нажимать tab) запоминать координаты курсора (допустим переменная OldCoord)
2. После нажатия tab снова запоминать координаты (NewCoord)
3. If NewCoord = OldCoord - мы находимся в последней ячейке последней строки, в противном случае - можно работать с ячейкой
4. Goto 1

Со скролами конечно хорошо, но только если они отдельно от грида, в противном случае их использовать не получится, т.к. они просто не определятся.
  • 0

#28 Натали

Натали

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

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

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

Хм. Записала скрипт РОботом.
Первое нажатие скроллбара перемещает курсор с первой записи в гриде на последнюю видимую в окне. Последующие нажатия перемещают курсор по одной записи.
Сам скрипт записался
Window SetContext, "Caption=Тестовое окно;ChildWindow", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""
PSGrid ScrollLineDown, "ObjectIndex=1", ""

Никакой Position. :(
  • 0

#29 Doveangel

Doveangel

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

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

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

[1. Перед тем как переходить к следующей ячейке (читай нажимать tab) запоминать координаты курсора (допустим переменная OldCoord)
2. После нажатия tab снова запоминать координаты (NewCoord)
3. If NewCoord = OldCoord - мы находимся в последней ячейке последней строки, в противном случае - можно работать с ячейкой
4. Goto 1

Мне нравится))
Но теперь другой вопрос-относительно того, что если бы у Натали работало копирование в буфер -
у нас есть комбобокс со скроллом. Когда мы доходим до записи самой нижней без прокрутки -то в последствии записи не будут менять координаты... запись прокрученная все время находится как бы последней.. скролл двигается, записи меняются но координаты - нет. Как бы вы послупили?
  • 0

#30 Doveangel

Doveangel

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

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

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

Первое нажатие скроллбара перемещает курсор с первой записи в гриде на последнюю видимую в окне. Последующие нажатия перемещают курсор по одной записи.

а вы прокрутите скролл а не кликайте на перемещение вниз
  • 0

#31 Petr

Petr

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

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

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

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

При чем тут комбобокс со скролом?
Если он у Вас в ячейке таблицы находится, то перемещение по строкам этого комбобокса не является переходом в новую ячейку (табуляции нет) => координаты в такие моменты не сравниваются.
  • 0

#32 Doveangel

Doveangel

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

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

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

При чем тут комбобокс со скролом?
Если он у Вас в ячейке таблицы находится, то перемещение по строкам этого комбобокса не является переходом в новую ячейку (табуляции нет) => координаты в такие моменты не сравниваются.

Прошлое мое сообщение не относилось к примеру с гридом - рассматриваю другую ситуацию. С гридом понятно, как быть с комбобоксом? Со скролом :P меня уже на смех пробирает :lol:
  • 0

#33 Натали

Натали

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

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

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

(сидит, пригорюнившись)
Хорошо тем, кому с гридом все ясно...

Грид.
Сдвиг скролла дает в записи вот такой вариант.
Window SetContext, "Caption=операции", ""
PSGrid VScrollTo, "ObjectIndex=1", "Position=2"
PSGrid VScrollTo, "ObjectIndex=1", "Position=3"
PSGrid VScrollTo, "ObjectIndex=1", "Position=4"
и так далее...

Но! Если при записи скрипта курсор двигался в гриде, перемещаясь с записи на запись, то воспроизведение скрипта курсор не перемещает, но скрипт завершается с Pass.
Может я чего-то не понимаю?
И потом - откуда я буду знать максимальную Position, которая доступна в каждом конкретном гриде?
  • 0

#34 Petr

Petr

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

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

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

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

2Doveangel:

Прошлое мое сообщение не относилось к примеру с гридом - рассматриваю другую ситуацию. С гридом понятно, как быть с комбобоксом? Со скролом  меня уже на смех пробирает

В таком случае просьба уточнять о чем идет речь :)
Теперь расмотрим комбобокс со скролом.
Предполагаем, что мы не знаем число строк в комбобоксе, считаем, что мы можем развернуть комбобокс и перемещаться по нему с помощью стрелок "Up" и "Down", выбор строки - "Enter". Если стоим на последней записи, то нажатие "Down" ни к чему не приводит. Также считаем, что значения в комбобоксе уникальны.
Алгоритм:
1. Заводим переменную-счетчик (count = 0) - в ней будет храниться номер уже обработанной строки, NewValue = "", OldValue = "".
2. Разворачиваем комбобокс, нажимаем "Down" (count + 1) раз, затем "Enter".
2а. Если count = 0, то просто обрабатываем полученное значение и сохраняем его в переменную OldValue. Увеличиваем счетчик count++. Goto 2.
2б. Если count <> 0, то:
заносим полученное значение в переменную NewValue, сравниваем NewValue и OldValue и если они равны => мы на последней строке => конец
если они отличаются, то OldValue = NewValue, count++.
3. Goto 2.
  • 0

#35 Doveangel

Doveangel

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

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

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

ладно-надо как-то человеку помочь.

2 Petr -а если не уникальны записи -если может быть две одинаковые записи подряд?
p.s. если надоело загадки гадать - можете не отвечать - интересно просто))

2Natali
вернемся к тому- с чего я начинала - хранится таблица где-нить?? я так понимаю что она у вас завязанноая - сколько записей в таблице - столько и в гриде. Или?
  • 0

#36 Petr

Petr

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

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

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

2 Petr -а если не уникальны записи -если может быть две одинаковые записи подряд?
p.s. если надоело загадки гадать - можете не отвечать - интересно просто))

В таком случае не будет критерия выхода из цикла, т.е. надо просить разработчиков добавить к такому комбобоксу public property, в котором будет храниться число строк комбобокса.

2Натали:
Если уж нельзя сделать запись в буфер, то попросить у разработчиков текст запроса, на основании которого заполняется грид, наверное можно. Если такой запрос под руками, то посчитать число возвращаемых им строк очень просто.
  • 0

#37 Натали

Натали

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

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

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

она у вас завязанноая - сколько записей в таблице - столько и в гриде. Или?


Если не наложено никаких фильтров, то да.
Я могу даже сделать ситуацию, что фильтров не наложено.
Хорошо - из количества строк запросе будет известен размер цикла.
(кстати - не подскажете, где в хелпе почитать про обращение к базе?)
Но остается проблема - как сэмулировать нажатие мышки для активации окна значения строки, если :
1.неизвестно, сколько строк в экране (т.е. нельзя понять, на каком этапе перестать применять добавление в координаты нажатия).
2.Исходя из первого - как переходить по записям дальше.
  • 0

#38 Petr

Petr

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

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

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

Работа с базой - см. SQABasic help, ключевое слово - SQL.

Но остается проблема - как сэмулировать нажатие мышки для активации окна значения строки, если :
1.неизвестно, сколько строк в экране (т.е. нельзя понять, на каком этапе перестать применять добавление в координаты нажатия).
2.Исходя из первого - как переходить по записям дальше.

Стрелками "Up", "Down" нельзя перемещаться по записям?
  • 0

#39 Pet[EG]

Pet[EG]

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

  • Members
  • PipPip
  • 86 сообщений
  • ФИО:Петраш А.Ю.
  • Город:Харьков, Укр

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

[quote name='Натали' date='Dec 28 2004, 04:29 PM'] [QUOTE]
(кстати - не подскажете, где в хелпе почитать про обращение к базе?)
[/quote]
Лично я рекомендую использовать для этого внешние Com объекты ADODB.Connection и ADODB.RecordSet (подробней в MSDN)

А встроенные функции в роботе начинаются с SQL , SQLOpen и далее по хелпу.
  • 0

#40 Натали

Натали

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

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

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

Стрелками "Up", "Down" нельзя перемещаться по записям?


Можно.
Но сочетание кликанья двух клавиш+двух кликов мышью (которое вызывает нужное мне окно) отрабатывается только через команду с координатами.
Например.
PSGrid AltCtrl_DblClick, "ObjectIndex=1", "Coords=57,18"

Т.е. куда бы я через Up и Down не двигалась - клик возвращает на определенную позицию.

Я сейчас уговариваю программеров сделать аналогичный вызов только через клавиатуру. Но если это не выйдет...
  • 0


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

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