Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.015 c
1-71624
Miralex
2003-09-09 12:13
2003.09.22
Как построить и отредактировать с помощью Delphi таблицу в Word-е


1-71574
Wandererr
2003-09-10 10:23
2003.09.22
Встроеный язык в приложения


3-71540
Withard
2003-08-29 16:55
2003.09.22
Траблы с конвертацией типов в TTable


14-71960
Ketmar
2003-08-31 04:13
2003.09.22
стихи Ирины Серотюк


1-71708
AndyGee
2003-09-10 19:52
2003.09.22
Запуск внешнего приложения от имени другого пользователя




   Наверх