|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Добрый день всем. Столкнулся с такой проблемой. Есть база документов. Каждый документ имеет набор признаков, реализованных в виде битовой маски (т.е., если бит "поднят", то признак = true). Есть еще таблица, где фиксируется дата и время изменения каждого признака. При просмотре реестра документов (список документов в гриде) для каждого признака выводится свой чекбокс. Пользователь хочет, чтобы в ToolTip'e для соответствующего признака отображались дата и время, когда он был "поднят"... Собирать дату-время события в тот же курсор, что и основные данные, получается очень долго - несколько минут даже если ограничить отбор данных одним днем (а интервал дат задает пользователь, так что может получиться еще дольше). Так что это не вариант Программа написана на VFP 8; база данных PostgreSQL. Были мысли реализовать "динамику" через событие MouseMove, но не представляю, как координаты мышки преобразовать в recordid записи, на которую она (мышка) указывает.... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 06:03 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
провел замеры: Запрос документов для реестра - 1,5 - 2 сек Запрос событий для одного документа - 80 - 100 мсек. Объединенная выборка (для каждого документа выбраны все события по интересующим битам; событие, соответствующее каждому биту, помещены в отдельные поля) - 15 мин !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 07:36 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Станислав С...кий, Не знаю, насколько это поможет, но... Была примерно такая же проблема, выкрутился так: myForm.Init() : PUBLIC nY PUBLIC crd(1) DIMENSION crd(34) && кол-во строк грида, можно с запасом crd(1)=Thisform.Grid1.Top+Thisform.Grid1.HeaderHeigth-1 FOR i=2 TO 34 crd(i)=crd(i-1)+Thisform.Grid1.RowHeigth ENDFOR Grid1.Column(i).Text1.MouseDown(): nY=nYCoord Grid1.Column(i).Text1.RightClick(): * выводится textbox-подсказка над (поэтому -39) текущей строкой Thisform.text1.Value="текст подсказки" (инфа из текущей строки таблицы) Thisform.text1.Left=246 Thisform.text1.Alignment=0 Thisform.text1.Top=C_Y(nY)-39 Thisform.text1.Visible=.T. Grid1.Column(i).Text1.Click(): * подсказка закрывается Thisform.text1.Visible=.F. * в файле процедур: FUNCTION C_Y PARA nYY FOR jj=1 TO ALEN(crd) IF nYY < crd(jj) EXIT ENDIF ENDFOR RETURN crd(jj) Не очень изящно, но все-таки... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 07:52 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Станислав С...кийпровел замеры: Запрос документов для реестра - 1,5 - 2 сек Запрос событий для одного документа - 80 - 100 мсек. Объединенная выборка (для каждого документа выбраны все события по интересующим битам; событие, соответствующее каждому биту, помещены в отдельные поля) - 15 мин !!! Попробуй несколькими запросами: список документов в курсор, затем даты, затем все склеить. Может вытаскивать инфу как есть в несколько запросов, а на клиенте допиливать (средствами фокса). Хотя в ToolTip все равно будет проблематично воткнуть. Точно вычислить запись над которой мышка в гриде муторное занятие. Штатных средств нет. Как вариант выводить только по выбранной записи, т.е. встал пользователь на строку, на форме снизу/сверху показались даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 09:28 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Dima TКак вариант выводить только по выбранной записи, т.е. встал пользователь на строку, на форме снизу/сверху показались даты. Это пока и сделал... Но хочется большего... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 09:46 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Jonny540Станислав С...кий, Не знаю, насколько это поможет, но... Была примерно такая же проблема, выкрутился так: myForm.Init() : PUBLIC nY PUBLIC crd(1) DIMENSION crd(34) && кол-во строк грида, можно с запасом crd(1)=Thisform.Grid1.Top+Thisform.Grid1.HeaderHeigth-1 FOR i=2 TO 34 crd(i)=crd(i-1)+Thisform.Grid1.RowHeigth ENDFOR Grid1.Column(i).Text1.MouseDown(): nY=nYCoord Grid1.Column(i).Text1.RightClick(): * выводится textbox-подсказка над (поэтому -39) текущей строкой Thisform.text1.Value="текст подсказки" (инфа из текущей строки таблицы) Thisform.text1.Left=246 Thisform.text1.Alignment=0 Thisform.text1.Top=C_Y(nY)-39 Thisform.text1.Visible=.T. Grid1.Column(i).Text1.Click(): * подсказка закрывается Thisform.text1.Visible=.F. * в файле процедур: FUNCTION C_Y PARA nYY FOR jj=1 TO ALEN(crd) IF nYY < crd(jj) EXIT ENDIF ENDFOR RETURN crd(jj) Не очень изящно, но все-таки... :) Спасибо за идею. Примерно так и сделал... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 09:48 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Станислав С...кийДобрый день всем. Столкнулся с такой проблемой. Есть база документов. Каждый документ имеет набор признаков, реализованных в виде битовой маски (т.е., если бит "поднят", то признак = true). Есть еще таблица, где фиксируется дата и время изменения каждого признака. При просмотре реестра документов (список документов в гриде) для каждого признака выводится свой чекбокс. Пользователь хочет, чтобы в ToolTip'e для соответствующего признака отображались дата и время, когда он был "поднят"... Собирать дату-время события в тот же курсор, что и основные данные, получается очень долго - несколько минут даже если ограничить отбор данных одним днем (а интервал дат задает пользователь, так что может получиться еще дольше). Так что это не вариант Программа написана на VFP 8; база данных PostgreSQL. Были мысли реализовать "динамику" через событие MouseMove, но не представляю, как координаты мышки преобразовать в recordid записи, на которую она (мышка) указывает.... 1. Что говорит sys(3054) 2. Тестовый пример приведи, как и что выбираешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 11:22 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
PaulWist1. Что говорит sys(3054) 2. Тестовый пример приведи, как и что выбираешь. 1. Выборка идет прямыми запросами к серверу PostgreSQL, поэтому sys(3054) даже и не проверял.... Все равно SQL'ный сервер сам все переоптимизирует... 2. Выборка данных для реестра документов (фрагмент из программы): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
SQLExecute() - доработанное расширение EXECSQL(), используемое в нашей программе Выборка событий для одного документа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 11:55 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
1. Ну терперь рассказывай какие индексы есть и показывай какие планы запроса строит сервер. 2. Кстати, а умеет PostgreSQL строить вычисляемы поля, что бы избавиться от case в списке полей? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 12:33 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
PaulWist1. Ну терперь рассказывай какие индексы есть и показывай какие планы запроса строит сервер. 2. Кстати, а умеет PostgreSQL строить вычисляемы поля, что бы избавиться от case в списке полей? 1. Подумал хорошо, перестроил запрос. :) Сейчас он выполняется в течение примерно 2 секунд и дает ту выборку, которую я хотел: все колонки, отображаемые в гриде + колонки с сообщениями по битам событий... Запрос стал таким: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Но с дальнейшим (поместить сообщение из поля в ToolTipText) пока затык. Размышляю.... 2. case (в синтаксисе MS SQL, PostgreSQL) ~ iif (в синтаксисе FoxPro) Или что Вы имели в виду под "вычисляемые"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 14:58 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Станислав С...кийНо с дальнейшим (поместить сообщение из поля в ToolTipText) пока затык. Размышляю.... Это решаемо. Как-то так надо: в колонке должна содержаться дата, а показывать картинку Колонку грида инициализировать так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
при наведении на картинку в тултипе покажется содержимое колонки, т.е. дата (MyCursor.tMyDate). Можешь текстовое поле сделать и туда еще что-то кроме даты написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 15:36 |
|
Динамический ToolTip
|
|||
---|---|---|---|
#18+
Нашел интересное обсуждение. Вопрос один-в-один мой: "DYNAMIC" TOOLTIPTEXT Там тоже пришли к мнению, что все не так просто, как кажется... И проще отступиться... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2013, 13:26 |
|
|
start [/forum/topic.php?fid=41&msg=38241730&tid=1583060]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 286ms |
total: | 439ms |
0 / 0 |