Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.22;
Скачать: CL | DM;

Вниз

Манифест 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
1-71747
Olfi
2003-09-10 11:33
2003.09.22
Работа с множествами


14-71872
Marser
2003-09-04 01:00
2003.09.22
Ёкарный бабай!


1-71683
некто
2003-09-11 12:05
2003.09.22
встроенный SMTP


6-71793
Ренат
2003-07-22 16:18
2003.09.22
Отключиться от интернета


1-71660
Andy BitOff
2003-09-08 16:27
2003.09.22
RunTime error 216