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

Предотвратить изменение ширины колонки для TListView

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

Предотвратить изменение ширины колонки для TListView

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

private
   FListViewOldWndProc: TWndMethod;
   procedure ListViewNewWndProc(var Msg: TMessage);
 end;

 {....}

 implementation

 uses
   CommCtrl;


 procedure TForm1.FormCreate(Sender: TObject);
 begin
   //Sichern der ursprunglichen WindowProc der Listview 
  FListViewOldWndProc := ListView1.WindowProc;

   //Subclassing: Umleiten der WindowProc auf unsere eigene Procedur 
  Listview1.WindowProc := ListViewNewWndProc;
 end;

 procedure TForm1.ListViewNewWndProc(var Msg: TMessage);
 var
   hdn: ^THDNotify;
 begin
   if Msg.Msg = WM_NOTIFY then
   begin
     hdn := Pointer(Msg.lParam);
     //Abfangen und loschen der HDN_BeginTrack Botschaft 
    if (hdn.hdr.code = HDN_BeginTrackW) or (hdn.hdr.code = HDN_BeginTrackA) then
       Msg.Result := 1
     else
       FListViewOldWndProc(Msg);
   end
   // ansonsten Botschaft an die ursprungliche WindowProc weiterreichen 
  else
      FListViewOldWndProc(Msg);
 end;

 procedure TForm1.FormDestroy(Sender: TObject);
 begin
   //vor dem Beenden Original WindowProc wiederherstellen 
  ListView1.WindowProc := FlistViewOldWndProc;
   FListViewOldWndProc  := nil;
 end;

Программный код, предназначенный для предотвращения изменения ширины столбца в компоненте TListView. Автор DeeCo использовал Windows API и язык Object Pascal Delphi.

Вот шаг за шагом, как работает это решение:

  1. В обработчике события FormCreate сохраняется оригинальный процедура окна (WndProc) ListView в переменной FListViewOldWndProc.
  2. Затем свойство WindowProc компонента Listview1 устанавливается на указатель на.custom procedure ListViewNewWndProc.
  3. В процедуре ListViewNewWndProc проверяется, является ли входящее сообщение WM_NOTIFY (которое отправляет Windows при начале изменения ширины столбца).
  4. Если это WM_NOTIFY-сообщение и конкретно HDN_BEGINTRACK-сообщение (которое отправляется, когда пользователь начинает изменять ширину столбца), код устанавливает Msg.Result в 1, эффективно отменяя операцию изменения ширины столбца.
  5. В остальных случаях вызывается оригинальная процедура окна (FListViewOldWndProc) для обработки сообщения как обычно.

Почему происходит подстановка процедуры окна ListView? Delphi не предоставляет встроенный способ предотвратить изменение ширины столбца. Подстановкой и обработкой сообщений перед тем, как они достигнут оригинальной процедуры окна, мы можем эффективно блокировать операцию изменения ширины столбца.

Вот некоторые предложения:

  • Вместо использования глобальной переменной (FListViewOldWndProc), можно рассмотреть возможность сделать ее экземплярной переменной (например, TForm1.ListViewOldWndProc) для лучшего обрамления логики.
  • Может быть полезно добавить логирование или отладочное вывод для проверки, работает ли код как ожидалось. Например, можно добавить сообщение с выводом значения Msg.Result при обнаружении HDN_BEGINTRACK.
  • Если вам интересно только предотвратить изменение ширины конкретных столбцов, вам может потребоваться модификация процедуры ListViewNewWndProc, чтобы проверять, какой столбец изменяется перед отменой операции.

Предотвратить изменение ширины колонки для TListView на форме, подстановкой собственной процедуры WindowProc и отлавливанием сообщения WM_NOTIFY.


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

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




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


:: Главная :: TListView ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:13:31/0.0033321380615234/0