Главная страница
    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.011 c
3-71467
ddenis
2003-08-29 00:31
2003.09.22
Как подружить COM, TDataSet и ASP?


14-71913
mfender
2003-09-03 02:38
2003.09.22
Подскажите, как The Bat сделать, чтобы он дефолтом запускался?


14-71819
Michael
2003-09-04 16:23
2003.09.22
подскажите прогу для удобного хранения статей электронных книг, к


14-71877
Nik8.
2003-09-04 12:37
2003.09.22
Веб аддрес Журнала


4-72003
oduvan
2003-07-19 17: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
Английский Французский Немецкий Итальянский Португальский Русский Испанский