Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.01.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
2-1387193293
Павел
2013-12-16 15:28
2015.01.18
Проблема переноса проекта в XE2


15-1402502056
Сергей
2014-06-11 19:54
2015.01.18
состав числа


15-1402175199
Андрюша
2014-06-08 01:06
2015.01.18
Как избежать Deadlock в Firebird?


15-1402753733
Override Func
2014-06-14 17:48
2015.01.18
Пересечение прямоугольника и окружности


15-1402045300
Palladin
2014-06-06 13:01
2015.01.18
Ищу работу