Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 10.12.2010
Сообщений: 81

Отслеживание видимых записей в области DBGrid

28.06.2014, 23:02. Показов 3465. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Можно ли узнать количество, и обратиться к записям которые находятся в видимой части DBGrida. Т.е. таблица из базы данных загружена полностью(например 100 записей), а из-за размера окна в гриде видно только 10 записей, курсор может быть хоть в центре таблицы. Можно ли как то узнать что видно 10 записей, и обратиться к этим записям для внесения изменений?
delphi 11(2007) навсяк.
Есть стандартные методы?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2014, 23:02
Ответы с готовыми решениями:

Как можно подсчитать число видимых столбцов в DBGrid?
Добрый день! Ребята подскажите как можно подсчитать число видимых столбцов в DBGrid, почему видимых, потомучто часть олонок я сделал...

Перенос записей из одного DBGrid в другой DBGrid
Здравствуйте. Есть проблема! Ни как ни получается перенос записей Вот текст кода: procedure TF_Licenzie.DBGrid1CellClick(Column:...

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

12
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.06.2014, 00:07
Лучший ответ Сообщение было отмечено Stat как решение

Решение

Цитата Сообщение от Stat Посмотреть сообщение
Можно ли узнать количество, и обратиться
Интересный вопрос...
Думаю можно:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button9Click(Sender: TObject);
var
  GridRow,
  GridRowCount,
  GridTopRow,
  DataSetRecord: Integer;
begin
  // Определяем номер выбранной строки в Гриде
  GridRow := TStringGrid(DBGrid1).Row;
  // Определяем кол-во строк (видимых) в Гриде (-1 - титульная строка)
  GridRowCount := TStringGrid(DBGrid1).RowCount - 1;
  // Текущая запись в ДатаСете
  DataSetRecord := DBGrid1.DataSource.DataSet.RecNo;
  // Нехитрые мат. вычисления номера верхней записи в Гриде
  GridTopRow := DataSetRecord - GridRow + 1;
  // Вывод результата
  ShowMessage(Format('В Гриде отображаются Записи с %d по %d',
                     [GridTopRow, GridTopRow + GridRowCount - 1]));
end;
Добавлено через 1 минуту
Нумерация записей ведется с 1.
1
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
29.06.2014, 00:07
Цитата Сообщение от Stat Посмотреть сообщение
курсор может быть хоть в центре таблицы.
С чего бы это?
В ТDBGrid положение курсора в датасете синхронизировано с отображением активной строки в гриде.
И как ни крути (хоть в гриде перемещай курсор, хоть в датасете его методами), но активная строка будет на виду в DBGrid в любом случае.
Поэтому и проблемы нет и, разумеется, нет ничего похожего на стандартные методы определения видимости строк (записей).
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.06.2014, 00:10
Скандербег, имеется в виду, что курсор может быть на любой видимой строке Грида.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
29.06.2014, 00:28
Из вопроса не совсем ясно так ли. Осталось впечатление, что ТС видит ситуацию, когда активная строка не видна.
Но если речь о курсоре на любой видимой строке, то все равно не понятно зачем знать какие записи сейчас видны в гриде. Возможности то для "внесения изменений" во все видимые записи одновременно все равно нет.

А приемчик хорош. Подсунуть компилятору совсем другой класс вместо грида - это классно.
Не додумался бы
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.06.2014, 00:58
Цитата Сообщение от Скандербег Посмотреть сообщение
все равно не понятно зачем знать какие записи сейчас видны в гриде.
Возможно, ТС откроет нам секрет, зачем все это надо.
0
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
29.06.2014, 02:56
Цитата Сообщение от Скандербег Посмотреть сообщение
А приемчик хорош. Подсунуть компилятору совсем другой класс вместо грида - это классно.
Не додумался бы
Ну если не брать в расчёт работу с датасетом, то имхо TDBGrid скорее всего более близкий родственник TCustomGrid'у, чем TStringGrid. Это я понял когда в стародавние времена разбирался с проблемой колеса мышки в TDBGrid. Так что возможно FIL просто был не совсем прав, когда привёл тип к TStringGrid'у вместо TCustomGrid.
0
4 / 4 / 1
Регистрация: 10.12.2010
Сообщений: 81
29.06.2014, 08:00  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Возможно, ТС откроет нам секрет, зачем все это надо.
Да секрета здесь нет)
Пишу в программе отображение уведомлений(в виде планировщика задач - немного эротики) для пользователя, и было бы хорошо, например когда пролистывая DBGrid записи(уведомления) которые попали в "зону видимости" я бы пометил как прочтенные...

А про курсор... на любой видимой строке.
Цитата Сообщение от FIL Посмотреть сообщение
Интересный вопрос...
Думаю можно:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button9Click(Sender: TObject);
var
* GridRow,
* GridRowCount,
* GridTopRow,
* DataSetRecord: Integer;
begin
* // Определяем номер выбранной строки в Гриде
* GridRow := TStringGrid(DBGrid1).Row;
* // Определяем кол-во строк (видимых) в Гриде (-1 - титульная строка)
* GridRowCount := TStringGrid(DBGrid1).RowCount - 1;
* // Текущая запись в ДатаСете
* DataSetRecord := DBGrid1.DataSource.DataSet.RecNo;
* // Нехитрые мат. вычисления номера верхней записи в Гриде
* GridTopRow := DataSetRecord - GridRow + 1;
* // Вывод результата
* ShowMessage(Format('В Гриде отображаются Записи с %d по %d',
* * * * * * * * * * *[GridTopRow, GridTopRow + GridRowCount - 1]));
end;
Так, над опробовать! Спасибо!) Ток для меня нонсенс один класс живет в другом, и они не прямые "родственники"...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.06.2014, 09:13
Цитата Сообщение от northener Посмотреть сообщение
был не совсем прав, когда привёл тип к TStringGrid'у вместо TCustomGrid.
Да, общим предком, где есть нужные св-ва, является TCustomGrid, но проблема в том, что они там "закрыты".
Так что, либо делать сабклассинг, либо использовать "непрямого родственника".
Думаю, что такое решение вполне корректно, т.к. используемые св-ва есть у общего предка, только в другой области видимости (хотя до конца не уверен ).
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
29.06.2014, 12:32
П
Цитата Сообщение от Stat Посмотреть сообщение
над опробовать!
Все уже опробовано - работает.
К тому же, хотя и не прямые, а родственники, поэтому опасаться нечего - помогает, что нужный набор свойств и их типы одинаковые.
Это обстоятельство позволяет несколько упростить код, используя скрытое свойство TopRow (ну, это так, на всякий случай).
0
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
30.06.2014, 02:46
Цитата Сообщение от FIL Посмотреть сообщение
Да, общим предком, где есть нужные св-ва, является TCustomGrid, но проблема в том, что они там "закрыты".
Так что, либо делать сабклассинг, либо использовать "непрямого родственника".
Т.е. ты ещё не знаешь как "вполне себе легально" получить доступ к protected свойствам компонента?
Delphi
1
2
3
4
5
type
  TMyHackGrid = class(TCustomGrid);
...
  // Определяем номер выбранной строки в Гриде
  GridRow := TMyHackGrid(DBGrid1).Row;
и получаем доступ к protected свойству предка. Именно к свойству предка, а не к свойству иного родственника, которое может быть переопределено.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.06.2014, 09:31
Цитата Сообщение от northener Посмотреть сообщение
Т.е. ты ещё не знаешь
Цитата Сообщение от northener Посмотреть сообщение
Так что, либо делать сабклассинг
Это я и имел ввиду. (Хотя, наверное, этот термин не совсем подходит к данному случаю)
Но зачем писать лишнюю строчку кода, если можно обойтись без нее

Добавлено через 16 минут
Кстати, TMyHackGrid тоже не является предком TDBGrid.
Так что получается, что TMyHackGrid(DBGrid1).Row - тоже самое, что и TStringGrid(DBGrid1).Row.
0
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
30.06.2014, 10:52
Цитата Сообщение от FIL Посмотреть сообщение
Так что получается, что TMyHackGrid(DBGrid1).Row - тоже самое, что и TStringGrid(DBGrid1).Row.
Да здесь так. Но вариант с TMyHackGrid просто универсальный способ получить доступ к protected свойствам предка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2014, 10:52
Помогаю со студенческими работами здесь

Отслеживание изменение записей
Такая задача: Сотрудник делает изменения в ячейках в форме, которые привязаны к соответствующим таблицам. Необходимо, чтоб вносилось при...

Отслеживание повторяющихся записей/номеров
Добрый день уважаемые знатоки! Ребят! Нужна помощь или совет, как сделать правильно. Сразу к сути. Есть база регистрации входящей...

Отслеживание создания новых записей во множественной форме
Прошу направить, как будет лучше отследить создание новых записей во множественной форме (для ведения журнала изменений). Удаление навесил...

Удаление записей в DBGrid
Необходимо удалить из двух разных таблиц информацию об одном читателе, Но сначала нужно удалить читателя из БД, это все ясно. Но как...

Добавление записей в DBGrid
Сможете кто помочь с приложением? Единственное что необходимо это автоматизировать добавление записей. Что бы при добавлении новых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru