Лежат как то системщик с подругою в постели, вот только что у них всё закончилось ... Она его ласково так спрашивает:
- Милый, Save of changes, Yes or Not?
var
ScrPt, GrdPt: TPoint;
Cell: TGridCoord;
begin
ScrPt := Mouse.CursorPos;
GrdPt := DBGrid.ScreenToClient(ScrPt);
Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y);
// Col := Cell.X;// Row := Cell.Y;end;
Чтобы определить, над каким полем мышь находится в TDBGrid, можно использовать метод MouseCoord, предоставляемый контролем grid.
В вашем коде происходит следующее:
Получается текущая позиция курсора с помощью Mouse.CursorPos.
Конвертируется эта позиция в координаты экрана с помощью ScreenToClient.
Затем эти координаты используются в качестве входных данных для метода MouseCoord, который возвращает структуру TGridCoord, содержащую индексы столбца и строки ячейки под мышей.
В вашем коде также проверяется, является ли ячейка валидной (т. е., не находится за пределами границ) перед попыткой доступа к ее свойствам. Это хорошая практика!
Теперь давайте поговорим о альтернативном подходе: вместо использования MouseCoord можно использовать метод GetCellOrigin, предоставляемый TDBGrid.
Метод GetCellOrigin возвращает структуру TRect, содержащую координаты ячейки, которая содержит курсор мыши. Вы можете извлечь индексы столбца и строки из этого прямоугольника с помощью его свойств Left и Top.
Этот подход может быть более эффективным, так как он avoids the overhead of calling MouseCoord и выполняет расчеты внутренне.
Однако помните, что оба подхода имеют свои ограничения. Например, GetCellOrigin работает только в том случае, если мышь находится над валидной ячейкой, а MouseCoord может возвращать недопустимые координаты, если мышь не находится над ячейкой (например, когда курсор находится над заголовками grid).
Таким образом, выбор подхода зависит от вашего конкретного требования и поведения, которое вы хотите достичь.
В статье описывается, как в TDBGrid можно узнать над каким полем висит мышь и получить текст поля.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.