QC # 101189
Я пытаюсь нарисовать индикатор выполнения в Delphi TListView
, как подсказывает ответ NGLN на другой вопрос SO .Это прекрасно работает, за исключением взаимодействия с горячим отслеживанием при рисовании с использованием новой темы проводника, представленной в Vista.
Рисование с горячим отслеживанием и пользовательские события рисования Delphi, похоже, мешают друг другу.Например, вид вывода, который я вижу, выглядит следующим образом:
Текст в столбце 1 должен читаться как пункт 3, но стирается.Это похоже на ошибку в оболочке Delphi в элементе управления представлением списка, но может случиться так, что я делаю что-то не так!
Хотя я разрабатывал это в XE2, такое же поведение происходит в 2010и, предположительно, XE.
Вот код для воспроизведения этого поведения:
Файл Pascal
unit Unit1;
interface
uses
Windows, Classes, Controls, Forms, CommCtrl, ComCtrls;
type
TForm1 = class(TForm)
ListView: TListView;
procedure FormCreate(Sender: TObject);
procedure ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ListView.RowSelect := True;
ListView.Items.Add.Caption := 'Item 1';
ListView.Items.Add.Caption := 'Item 2';
ListView.Items.Add.Caption := 'Item 3';
end;
procedure TForm1.ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
R: TRect;
begin
DefaultDraw := False;
ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @R);
Sender.Canvas.MoveTo(R.Left, R.Top);
Sender.Canvas.LineTo(R.Right-1, R.Bottom-1);
end;
end.
Файл формы
object Form1: TForm1
Caption = 'Custom Draw List View Bug'
ClientHeight = 290
ClientWidth = 554
OnCreate = FormCreate
object ListView: TListView
Align = alClient
Columns = <
item
Caption = 'Column 1'
Width = 250
end
item
Caption = 'Column 2'
Width = 250
end>
ViewStyle = vsReport
OnCustomDrawSubItem = ListViewCustomDrawSubItem
end
end