|
|
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Нужно при наведении на строку DBGrid показать хинтом содержимое поля этой строки. Вопрос, как достать это содержимое без бегания по датасету? Или хотя бы, без изменения позиции скролла? Сейчас делаю вот так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. но переприсваивание RecNo при определенных положениях приводит к прокручиванию записей. С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:20:55 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_при определенных положенияхЕсли не ошибаюсь, то это происходит когда я пытаюсь спозиционироваться на запись, которая идет до текущей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:26:52 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
А датасет какой ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:36:01 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Ну и от грида тоже зависит, наверное. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:36:58 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамА датасет какой ?TIBDataSet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:37:09 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНу и от грида тоже зависит,Стандартный TDBGrid ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:37:36 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, см rxDbGrid . Хотя эта версия для Lazarus, можно посмотреть реализацию и прикрутить к dbGrid Delphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:47:43 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_> TIBDataSet TDBGrid Тогда вроде бы никак или без доп.телодвижений никак. Первый не позволяет "без бегания по датасету", а второй не хранит значения ячеек. Если достаточно без изменения позиции скролла - ну, попробуй вместо RecNo букмарки использовать и/или текущее смещение от верха грида. Может, задачу можно пересмотреть (тем паче, если хинты нужны только для ID, а не всех ячеек) ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 19:56:49 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамиспользовать и/или текущее смещение от верха грида.TopRow protected свойство. Если до него добраться через THackDBGrid, то оно всегда равно 1 Гаджимурадов РустамМожет, задачу можно пересмотретьИсходная задача такая: в гриде отрисовываются записи разным цветом. Цвет записи зависит от значения поля STATUS. Хотелось выводить хинтом расшифровку этого статуса Гаджимурадов РустамПервый не позволяет "без бегания по датасету",Есть шальная идея, запоминать значения при перерисовке Вот казалось бы, зачем гриду дергаться? При перемещении по записям вызван DisableControls. После EnableControls ничего не меняется. Попробую еще не вызывать DisableControls/EnableControls. Может получится более адекватная работа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 20:46:25 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, вот настоящий THackDBGrid держать список статусов: цвет=имя статуса в зависимости от DBGrid1.Canvas.Pixels[FMousePos.X, FMousePos.Y] брать статус из списка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 21:15:41 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_> Исходная задача такая: в гриде отрисовываются записи разным цветом. _Vasilisk_> Цвет записи зависит от значения поля STATUS. Хотелось выводить _Vasilisk_> хинтом расшифровку этого статуса Так это же сильно всё упрощает. При отрисовке наращивай статус в каком-нибудь списке, а перед хинтом вытаскивай. Некошерно, конечно, но дешево и сердито. :) > Вот казалось бы, зачем гриду дергаться? Подозреваю, что именно из-за изменения смещения. > Попробую еще не вызывать DisableControls/EnableControls. Будет ещё хуже. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 21:31:56 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Freedoom_Vasilisk_, см rxDbGrid . Хотя эта версия для Lazarus, можно посмотреть реализацию и прикрутить к dbGrid Delphi тогда уж лучше посмотреть исподники EhGrid. Там эта фишка уже лет 10, как реализована ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 10:05:22 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Доктогда уж лучше посмотреть исподники EhGrid. Там эта фишка уже лет 10, как реализована _Vasilisk_ Стандартный TDBGrid rxDbGid, в отличие от ExGrid, наследник TDbGrid. Либо мы говорим о разных EhGrid. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 10:13:38 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. Если лень писать (регистрировать) новый компонент, и DbGrid один, то можно прямо в модуле с формой сделать свой TDbGrid = Class(Vcl.DBGrids.TDBGrid) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 11:11:26 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
FreedoomrxDbGid, в отличие от ExGrid, наследник TDbGrid. Либо мы говорим о разных EhGrid. нет, ты прав. Тогда в контексте вопроса твой отсыл корректнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 11:58:55 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Freedoom, За код огромное спасибо Freedoom Код: pascal 1. не приводит к дерганию грида. Пока сделал так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ничего не дергается. Но очень часто хинт не отображается. Причем если я расскомментирую OutputDebugString то все работает как часы. Еще пошаманю немного. Если не взлетит, то буду писать наследника ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 15:15:03 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Freedoom Код: pascal 1. Одна засада - сообщение приходит только один раз, когда мышь заходит на грид. Чтобы посмотреть еще раз, нужно вывести мышь за пределы грида и завести обратно. Как-то можно это вылечить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 16:17:10 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, посмотри чему равен Message.Result после inherited CMHintShow(Message). Попробуй добавить Message.Result := 0; По поводу библиотеки RX лучше общаться напрямую с её автором ( http://www.freepascal.ru/forum/viewforum.php?f=18). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 16:56:13 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Итак. Большое спасибо Freedoom, у меня все заработало. Теперь для общественности: Ответ на самый первый мой вопрос "Как избежать скроллинга грида". Ответ - не трогать датасет для изменения текущей записи. Данные о нужной записи, нужно получать через DataLink.ActiveRecord (нумерация с 0). При этом DisableControls/EnableControls не нужны. По хинтам. Как все работает. TControl на любое сообщение WM_MOUSEMOVE вызывает Код: pascal 1. и уже этот метод управляет хинтами. Для начала он вытягивает контрол, для которого нужно показать хинт Код: pascal 1. если контрол не был получен, или для него не нужно показывать хинт, то все прячем и уходим Код: pascal 1. 2. А вот если нашли, то выполняется хитрая проверка Код: pascal 1. 2. т.е. либо у нас новый контрол, для которого мы еще не показывали хинт, или наша мышиная точка выходит за пределы прямоугольника для которого уже был показан хинт. Если условие выполнилось, то следующим шагом определяем задержку, когда нужно будет показать хинт. Задержка определяется полями FHintShortPause и FHintPause (напоминаю, мы находимся в TApplication) и текущей активностью хинта Код: pascal 1. 2. 3. 4. после этого мы спрашиваем у контрола, а согласен ли он с текущим положением дел Код: pascal 1. после этого, если Pause = 0 запускаем процедуру показа хинта, или запускаем таймер, который запустит эту процедуру В процедуре показа хинта производятся всякие проверки, типа а не уехало ли окно и т.д. а потом заполняется структура THintInfo. Эта структура полностью управляет отображением хинта. Из интересного мне приведу пару полей Код: pascal 1. 2. 3. 4. 5. а дальше есть два шанса изменить эту структуру: 1. Обработать контролом сообщение CM_HINTSHOW Код: pascal 1. 2. Пошаманить с глобальным обработчиком Application.OnShowHint Код: pascal 1. 2. после этого, после проверки Код: pascal 1. 2. мы обновляем "прямоугольник хинта" Код: pascal 1. 2. 3. 4. 5. и показываем сам хинт. Теперь о модификации. Было принято решение модифицировать в обработчике сообщения CM_HINTSHOW Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Код: pascal 1. 2. А чтобы при перемещении по строкам хинт появлялся с задержкой, был добавлен такой обработчик Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 18:52:24 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Спасибо за подробный How-To. Все бы так. :) _Vasilisk_> // Перемещаемся на нужную запись > DataLink.ActiveRecord := LCell.Y - 1; И что, запись не перемещается? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2017, 10:57:42 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамИ что, запись не перемещается?Ну грид не дергается. А из датасета данные достаются из нужной строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2017, 13:43:42 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_> Ну грид не дергается. Без DisableControls это странно. Проверь на высоком гриде и с большой разницей между текущей записью и хинтуемой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2017, 13:51:24 |
|
||
|
Hint для строки DBGrid
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамБез DisableControls это странноТам нечему дергаться Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Как видишь, никакого перемещения. Меняется только указатель на текущий буфер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 14:32:42 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39539409&tid=2041691]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 406ms |

| 0 / 0 |
