Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
7-71968
kalishenko
2003-07-08 19:00
2003.09.22
Принтер и шрифты


14-71835
k-man
2003-09-01 18:59
2003.09.22
Железный трабл 2


7-71982
Alexkav
2003-07-09 12:12
2003.09.22
Запуск и останов службы


6-71803
andrewxx
2003-07-21 17:03
2003.09.22
Как перехватить и открыть новое окно браузера TWebBrowser


14-71822
AndreySoft
2003-09-02 09:46
2003.09.22
Как определить текущий номер недели





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский