Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1401961291
Minsk City
2014-06-05 13:41
2015.01.18
Delphi and C#


11-1257251317
Игорь Шевченко
2009-11-03 15:28
2015.01.18
Прошу прощения, по ошибке закрыл ветку "Использование MakeMethod"


15-1402950602
Юрий
2014-06-17 00:30
2015.01.18
С днем рождения ! 17 июня 2014 вторник


15-1402170178
Kerk
2014-06-07 23:42
2015.01.18
WinXP


2-1383842662
MultIfleX
2013-11-07 20:44
2015.01.18
XE5 Android LocationListener





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