Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Корректная работа при работе с колесиком мышки в TDBGrid

Delphi , Компоненты и Классы , TDBGrid

Корректная работа при работе с колесиком мышки в TDBGrid

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{....}

 public
   procedure AppMessage(var Msg: TMsg; var Handled: Boolean);

      {....}



 procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
 var
   i: SmallInt;
 begin
   {Mouse wheel behaves strangely with dgbgrids - this proc sorts this out}
   if Msg.message = WM_MOUSEWHEEL then
   begin
     Msg.message := WM_KEYDOWN;
     Msg.lParam := 0;
     i := HiWord(Msg.wParam);
     if i > 0 then
       Msg.wParam := VK_UP
     else
       Msg.wParam := VK_DOWN;

     Handled := False;
   end;
 end;



   // Und im Projekt Source: 
  // And in the project source: 

{....}

 Application.OnMessage := Form1.AppMessage;

 {....}

Программный код, предназначенный для обработки событий прокрутки мыши в компоненте TDBGrid приложения Delphi. Ошибка в стандартном поведении прокрутки мыши при взаимодействии с TDBGrid заключается в том, что она может быть неожиданной и не работать как ожидалось.

Процедура AppMessage является обработчиком сообщений для формы TForm1, которая перехватывает и обрабатывает отправленные на форму сообщения. В этом конкретном случае она обрабатывает сообщение WM_МOUSEWHEEL, которое генерируется при прокрутке мыши.

Когда пользователь прокручивает мышь вверх, код имитирует нажатие клавиши VK_UP (обычно обрабатывается событием OnKeyDown), а когда прокручивается вниз - имитирует нажатие клавиши VK_DOWN. Это позволяет TDBGrid корректно реагировать на события прокрутки мыши, обеспечивая плавную прокрутку по строкам таблицы.

Код устанавливает параметр Handled обработчика сообщения в False, указывая, что сообщение было внутренне обрабатано формой и не нужно передаваться на другие обработчики.

В проекте источника процедура AppMessage присваивается событию Application.OnMessage с помощью строки:

Application.OnMessage  := Form1.AppMessage;

Это обеспечивает, что все отправленные на приложение сообщения обрабатываются процедурой AppMessage, включая сообщение WM_МOUSEWHEEL.

В проекте источника также предлагается альтернативное решение с использованием события TDBGridOnMouseWheel вместо переопределения события Application.OnMessage. Это может быть более эффективным и проще для поддержки:

procedure TForm1.DBGrid1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean);
begin
  if (Sender = DBGrid1) then
  begin
    if WheelDelta > 0 then
      DBGrid1.Position := DBGrid1.Position - 1
    else
      DBGrid1.Position := DBGrid1.Position + 1;

    Handled := True;
  end;
end;

В этом примере обработчик события DBGrid1MouseWheel присваивается событию MouseWheel компонента TDBGrid. Когда пользователь прокручивает мышь, код adjusts позицию таблицы соответствующим образом и устанавливает параметр Handled в True, указывая, что сообщение было внутренне обрабатано таблицей.

Это может обеспечить более прямой способ обработки событий прокрутки мыши в TDBGrid без переопределения события Application.OnMessage.

Корректная работа при работе с колесиком мышки в TDBGrid обеспечивается за счет обработки сообщения WM_MOUSEWHEEL и преобразования его в WM_KEYDOWN для корректной работы со строками.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 10:41:40/0.0037479400634766/0