Я пытаюсь настроить график выполнения в Delphi TListView
, как было предложено ответом NGLN на другой вопрос SO. Это отлично работает, кроме взаимодействия с горячим отслеживанием при рисовании с использованием новой темы проводника, представленной в Vista.
Горячая картинка отслеживания и пользовательские события рисования Delphi, по-видимому, мешают друг другу. Например, вид вывода, который я вижу, выглядит следующим образом:
Текст в столбце 1 должен быть прочитан в пункте 3, но уничтожен. Это похоже на ошибку в оболочке Delphi на элемент управления списком, но в равной степени может быть и то, что я делаю что-то неправильно!
Хотя я разрабатывал это в XE2, такое же поведение происходит в 2010 году и, предположительно, XE.
Здесь приведен код для воспроизведения этого поведения:
Паскаль
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