Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизМанифест XP vs. TListView.OwnerDraw Найти похожие ветки
← →
mrcat (2003-09-09 14:49) [0]Столкнулся с проблемой при использовании манифеста XP.
Ниже приведён текст ручной отрисовки TListView в режиме виртуального списка. Всё отображается нормально, пока к проекту не подключаешь манифест, после чего прямоугольник выбора (clSkyBlue) теряется, хотя фокус остаётся на выбранных элементах.
Кто-нибудь сталкивался ? В чём может быть проблема ?
procedure TfrmListViewCapXP.lstViwTestAdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
function TextOffset: Integer;
begin
Result := Canvas.TextWidth("W") div 2;
end;
function LineOffset: Integer;
begin
Result := TextOffset div 2;
end;
function AlignmentToDrawFormat(const AlignmentCode: TAlignment): Integer;
const
DrawFormats: array[TAlignment] of Integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
begin
Result := DrawFormats[AlignmentCode];
end;
var
prc: TRect;
Idx: Integer;
begin
DefaultDraw := False;
ListView_GetItemRect(lstViwTest.Handle, Item.Index, prc, LVIR_SELECTBOUNDS);
if cdsSelected in State then lstViwTest.Canvas.Brush.Color := clSkyBlue;
prc.Left := prc.Left + LineOffset;
prc.Right := prc.Right - LineOffset;
lstViwTest.Canvas.FillRect(prc);
for Idx := 0 to Item.SubItems.Count do
begin
ListView_GetSubItemRect(lstViwTest.Handle, Item.Index, Idx, LVIR_LABEL, @prc);
prc.Left := prc.Left + TextOffset;
if Idx = 0 then
DrawText(lstViwTest.Canvas.Handle, PChar(Item.Caption),
Length(Item.Caption), prc,
AlignmentToDrawFormat(lstViwTest.Columns[Idx].Alignment))
else
DrawText(lstViwTest.Canvas.Handle, PChar(Item.SubItems[Pred(Idx)]),
Length(Item.SubItems[Pred(Idx)]), prc,
AlignmentToDrawFormat(lstViwTest.Columns[Idx].Alignment));
end;
end;
-----
object lstViwTest: TListView
...
Align = alClient
Columns = <
item
AutoSize = True
end
item
AutoSize = True
end
item
AutoSize = True
end>
MultiSelect = True
OwnerData = True
OwnerDraw = True
ReadOnly = True
RowSelect = True
ViewStyle = vsReport
OnAdvancedCustomDrawItem = lstViwTestAdvancedCustomDrawItem
OnData = lstViwTestData
end
← →
mrcat (2003-09-09 19:20) [1]извиняюсь, ошибочно указал ос w2k: проблема присутствует только в XP.
---
Не думайте, что проблема кроется в ComСtrls.pas --- установлен UP2, т.е. ошибка mask := mask and not (LVCF_IMAGE) исправлена.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c