Форум: "Начинающим";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];
ВнизListView DrawItem Найти похожие ветки
← →
Вова (2013-12-20 18:20) [0]Здравствуйте, други!
В Delphi5 использую ListView - никаких проблем не было, пока не стал раскрашивать строки:
procedure TForm1.WkzListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Odd(Item.Index) then
Sender.Canvas.Brush.Color := clYellow;
else
Sender.Canvas.Brush.Color := clGreen;
State := [cdsDefault];
DefaultDraw := True;
end;
Теперь получаю сообщение о переполнении Integer.
останавливается в модуле ComCtrls на выделеной строке:
if (dwDrawStage and CDDS_ITEMPOSTPAINT <> 0)
and (PFontHandles(DesignInfo).OurFont + PFontHandles(DesignInfo).StockFont <> 0) then
begin
SelectObject(hdc, PFontHandles(DesignInfo).StockFont);
DeleteObject(PFontHandles(DesignInfo).OurFont);
PFontHandles(DesignInfo).OurFont := 0;
PFontHandles(DesignInfo).StockFont := 0;
end;
В инете по этому поводу ничего не нашёл. Какая причина может быть?
← →
Ega23 © (2013-12-20 18:33) [1]
(Cardinal(dwDrawStage) and CDDS_ITEMPOSTPAINT) <> 0
?
← →
Вова (2013-12-20 18:39) [2]Это модуль ComCtrls в Delphi5. Не править же его. Кроме того, судя по тому, что в инете нет инфы по этому поводу, думаю, что я где-то, что-то не правильно делаю.
← →
RWolf © (2013-12-20 18:53) [3]
> [1]
dwDrawStage и так Cardinal, в D7 по крайней мере.
а CDDS_ITEMPOSTPAINT вообще $00010002.
← →
Вова (2013-12-20 18:57) [4]В Delphi5 dwDrawStage: DWORD
← →
Вова (2013-12-20 18:58) [5]В тот момент, когда останавливается CDDS_ITEMPOSTPAINT имеет значение 65538
← →
Вова (2013-12-20 19:01) [6]Странно, в момент остановки dwDrawStage не определён :/
← →
Вова (2013-12-20 19:11) [7]Может здесь видно в чём собака порылась?
004686B6 33C9 xor ecx,ecx
004686B8 BA28000000 mov edx,$00000028
004686BD E8FEAAF9FF call @FillChar
comctrls.pas.12821: TmpItem.iItem := dwItemSpec;
004686C2 8B4324 mov eax,[ebx+$24]
004686C5 8945A8 mov [ebp-$58],eax
comctrls.pas.12824: if (dwDrawStage and CDDS_ITEMPOSTPAINT <> 0)
004686C8 F7430C02000100 test [ebx+$0c],$00010002
004686CF 7446 jz TCustomListView.CNNotify + $3FF
004686D1 8B45FC mov eax,[ebp-$04]
004686D4 8B4018 mov eax,[eax+$18]
004686D7 8B10 mov edx,[eax]
004686D9 035004 add edx,[eax+$04]
004686DC 7105 jno TCustomListView.CNNotify + $3CB
004686DE E829ADF9FF call @IntOver
004686E3 85D2 test edx,edx
004686E5 7430 jz TCustomListView.CNNotify + $3FF
comctrls.pas.12827: SelectObject(hdc, PFontHandles(DesignInfo).StockFont);
004686E7 8B45FC mov eax,[ebp-$04]
004686EA 8B4018 mov eax,[eax+$18]
004686ED 8B4004 mov eax,[eax+$04]
004686F0 50 push eax
004686F1 8B4310 mov eax,[ebx+$10]
004686F4 50 push eax
004686F5 E84AEEF9FF call SelectObject
comctrls.pas.12828: DeleteObject(PFontHandles(DesignInfo).OurFont);
004686FA 8B45FC mov eax,[ebp-$04]
004686FD 8B4018 mov eax,[eax+$18]
00468700 8B00 mov eax,[eax]
00468702 50 push eax
00468703 E81CEDF9FF call DeleteObject
comctrls.pas.12829: PFontHandles(DesignInfo).OurFont := 0;
00468708 8B45FC mov eax,[ebp-$04]
0046870B 8B4018 mov eax,[eax+$18]
0046870E 33D2 xor edx,edx
← →
Вова (2013-12-20 23:38) [8]Собака порылась здесь:
http://qc.embarcadero.com/wc/qcmain.aspx?d=12322
← →
Вова (2013-12-21 00:01) [9]Да. Заменил в ComCtrls
if (dwDrawStage and CDDS_ITEMPOSTPAINT <> 0)
наif ((dwDrawStage and CDDS_ITEMPOSTPAINT) = CDDS_ITEMPOSTPAINT)
if dwDrawStage and CDDS_ITEMPREPAINT <> 0 then
наif (dwDrawStage and CDDS_ITEMPREPAINT) = CDDS_ITEMPREPAINT then
и всё заработало.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c