Главная страница
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.025 c
9-71453
hgfdsa
2003-03-23 08:42
2003.09.22
Положение спрайтов.


1-71583
Alek Aaz
2003-09-09 13:33
2003.09.22
Печать на принтер


1-71651
P0tia
2003-09-08 21:19
2003.09.22
Как сделать, чтобы иконка показывалась только около часов?


3-71550
astoma
2003-08-29 12:19
2003.09.22
Сохранение таблицы dbf


14-71906
shelest
2003-09-03 13:29
2003.09.22
DOA for Delphi 7