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

Предотвратить появление ошибки при использовании TListView в режиме отчета под манифестом XP

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

Предотвратить появление ошибки при использовании TListView в режиме отчета под манифестом XP

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

{ 
  The TListView with a vsReport style causes an access violation 
  when you run your project with a XP manifest resource. 

  The VCL wrapper has a bug and you must patch sources. 
  Just copy the comctrls.pas unit in the folder with your own 
  project and modify the UpdateColumn method. 
  After compiling the project, a comctrls.dcu is created 
  and you can replace the original comctrls.dcu with the 
  patched one. 

}

 { 
  Wenn ein XP Manifest als Ressource in eine Exe-Datei eingebunden 
  wird, um einer Applikation das neue XP-Design zu verleihen, 
  gibt es bei der TListView mit Style vsReport eine Zugriffsverletzung 
  und die Anwenung lasst sich nicht starten. 

  Das ist ein VCL Bug und kann behebt werden, indem 
  comctrls.pas modifiziert wird. 
  Kopiere die comctrls.pas in dein Projekte-Verzeichnis und 
  andere die UpdateColumn Methode wie folgt. 
  Nach dem Kompilieren wird eine Comctrls.dcu Datei erstellt. 
  Die original Comctrls.dcu kann nun durch die modifizierte ersetzt werden. 
}


 // ComCtrls.pas: 

procedure TCustomListView.UpdateColumn(AnIndex: Integer);
 {...}
 with Column, Columns.Items[AnIndex] do
 begin
   { PATCH start:}
   // mask := LVCF_TEXT or LVCF_FMT or LVCF_IMAGE; 
  mask := LVCF_TEXT or LVCF_FMT;
   if FImageIndex >= 0 then
     mask := mask or LVCF_IMAGE;
   { PATCH :end }
   {...}
 end;

Старая проблема с TListView с стилем vsReport, вызывающая доступную ошибку при запуске на XP с манифестом!

Чтобы предотвратить это ошибку, вам нужно исправить файл comctrls.pas в папке вашего проекта. Баг находится в методе UpdateColumn, где переменная mask не обновляется корректно.

Оригинальный код устанавливает переменную mask в значение LVCF_TEXT or LVCF_FMT or LVCF_IMAGE, но когда есть столбец с изображением, она должна установить его только в значение LVCF_TEXT or LVCF_FMT. Это и делает исправление:

procedure TCustomListView.UpdateColumn(AnIndex: Integer);
{...}
with Column, Columns.Items[AnIndex] do
begin
   { PATCH start: }
  mask   := LVCF_TEXT or LVCF_FMT;  // установка текстовых и форматных флагов изначально
  if FImageIndex >= 0 then
    mask  := mask or LVCF_IMAGE;  // добавление флага изображения, если есть столбец с изображением
   { PATCH end: }
   {...}
end;

Сделав это изменение, вы должны быть в состоянии запустить свой проект с TListView с стилем vsReport на XP без возникновения ошибки доступа.

Кроме того, всегда полезно следить за багами в компонентах VCL Delphi и сообщать о любых обнаруженных проблемах. Так Embarcadero может исправлять их и обеспечивать лучшую поддержку для своих пользователей.

Предотвратить появление ошибки при использовании TListView в режиме отчета под манифестом XP можно путем модификации метода UpdateColumn в файле comctrls.pas.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 20:49:58/0.010733127593994/0