У меня есть потомок TListView, который предлагает некоторые дополнительные функции, такие как сортировка и возможность загрузки себя из TDataset. Теперь я хочу расширить этот компонент, чтобы некоторые аспекты чертежа могли быть указаны в элементах времени, добавленных в представление списка.Пользовательский чертеж в потоковом потоке TListview
У меня возникли проблемы с выяснением, какая процедура или процедуры переопределить, чтобы взять управление чертежом. Я переопределил DrawItem, чтобы изменить стиль шрифта, чтобы включить зачеркивание, а затем вызвать унаследованный DrawItem. Если я также укажу стиль LVS_OWNERDRAWFIXED (в переопределенном CreateParams()), моя функция вызывается и работает так, как я хочу, за исключением того, что рисуется только элемент, а не подэлементы.
Кто-нибудь знает, как я могу рассказать в виде списка, чтобы нарисовать подэлементы? Я нашел one example существенно расширенного списка, но этот документ недостаточно хорошо документирован для того, чтобы я точно следил за тем, что происходит, и я надеюсь не перехватывать столько сообщений о событиях и окон, сколько этот делает - мне кажется, что просто установка ручек, кисти и шрифта, а затем наличие элемента рисунка не должно быть настолько вовлечено.
Вот что я до сих пор:
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure DrawItem(Item: TListItem; Rect: TRect; State: TOwnerDrawState); override;
procedure TLookupListView.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or lvs_OwnerDrawFixed;
end;
procedure TLookupListView.DrawItem(Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var I: Integer;
Left: Integer;
begin
Canvas.Font.Style := Canvas.Font.Style + [fsStrikeOut];
inherited DrawItem(Item, Rect, State);
//I know the canvas must be restored here, this is just for proof-of-concept.
end;
ОБРАТИТЕ ВНИМАНИЕ: Я не заинтересован в этом пользовательский рисунок в конкретном экземпляре TListView с помощью прилагаемых событий. Я знаю, как это сделать. Я пытаюсь «испечь» эту функцию своему пользовательскому компоненту TListview.
Спасибо mghie. На самом деле я стараюсь не рисовать текст самостоятельно, как для подписи, так и для подтитов. CustomDrawItem и CustomDrawSubItem выглядят так, как я хочу. Я расследую дальше. , , –
Правильно, возможно, вы даже можете удалить флаг стиля «LVS_OWNERDRAWFIXED», поскольку уведомления о стадии рисования не (все) зависят от него. – mghie
Да, мне не нужен LVS_OWNERDRAWFIXED.Сейчас у меня есть (видимо) работа, не внесенные никакими другими изменениями, кроме переопределения IsCustomDrawn и CustomDrawItem (изменения холста в CustomDrawItem остаются в силе через рисунок подтипов). Я думаю, что все, что у меня осталось, - это гарантировать, что любые пользовательские события для пользовательского чертежа не будут проигнорированы. –