В статье рассматривается проблема, связанная с непреднамеренным срабатыванием события OnFixedCellClick в компоненте tStringGrid при использовании tOpenDialog в приложении на Delphi Berlin под управлением Windows 10. Проблема заключается в том, что при двойном клике по файлу, который перекрывает фиксированную ячейку или строку в открытом диалоге, событие OnFixedCellClick срабатывает автоматически сразу после закрытия диалога. Это может быть неприятным сюрпризом для пользователей, которые не знают о таком поведении и не могут предсказуемо управлять этим процессом.
Подтвержденное решение
Проблема, по мнению одного из участников сообщества, заключается в том, как TCustomGrid обрабатывает событие OnFixedCellClick на сообщение о поднятии кнопки мыши (в переопределенном методе MouseUp), не проверяя, было ли соответствующее сообщение о нажатии кнопки мыши (переменная FHotTrackCell.Pressed). Предложено быстрое решение: в коде Vcl.Grids (в методе TCustomGrid.MouseUp) нужно добавить дополнительное условие для проверки, было ли нажатие кнопки мыши перед поднятием, и только в этом случае вызывать FixedCellClick.
if ... and FHotTrackCell.Pressed then
FixedCellClick(Cell.X, Cell.Y);
Таким образом, событие FixedCellClick не будет вызываться, если поднятие кнопки мыши происходит без предшествующего нажатия.
Альтернативные подходы
В качестве альтернативного решения можно рассмотреть изменение логики работы с диалогом tOpenDialog, чтобы избежать срабатывания OnFixedCellClick. Например, можно отключить обработку нажатий на фиксированные ячейки во время работы с диалогом, установив соответствующие параметры компонента tStringGrid.
Пример кода
procedure TForm1.FormCreate(Sender: TObject);
begin
// Отключаем обработку нажатий на фиксированные ячейки
StringGrid1.Options := StringGrid1.Options - [goFixedColClick, goFixedRowClick];
end;
После выполнения операции с диалогом, можно восстановить исходное поведение tStringGrid.
Приведенные выше решения позволяют устранить проблему непреднамеренного срабатывания события OnFixedCellClick в компоненте tStringGrid при использовании tOpenDialog в Delphi Berlin. Разработчикам рекомендуется тщательно протестировать приложение после внесения изменений, чтобы убедиться в корректности работы всех компонентов.
Обратите внимание, что предложенное решение может потребовать дополнительной настройки и адаптации под конкретные требования вашего приложения. Также стоит отметить, что в некоторых случаях это поведение может быть связано с особенностями конкретной версии Delphi или Windows, поэтому важно следить за обновлениями и сообщениями от разработчиков.
Примечание: Предложено также создать отчет в системе отслеживания ошибок (QP report) для официального уведомления разработчиков о найденной проблеме.
В статье обсуждается проблема непреднамеренного срабатывания события `OnFixedCellClick` в компоненте `tStringGrid` при использовании `tOpenDialog` в Delphi Berlin на Windows 10, когда двойной клик по файлу приводит к неожиданному в
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.