
21.12.2015, 10:01
|
 |
Let Me Show You
|
|
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
|
|
Код:
type
TCustomAppForm = class(...)
...
function CustomDraw(NMCustomDraw: PNMLVCustomDraw): Integer;
function ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer; virtual;
function SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer; virtual;
...
function TCustomAppForm.CustomDraw(NMCustomDraw: PNMLVCustomDraw): Integer;
begin
Result:=CDRF_DODEFAULT;
case NMCustomDraw^.nmcd.dwDrawStage of
CDDS_PREPAINT: Result:=CDRF_NOTIFYITEMDRAW;
CDDS_ITEMPREPAINT: Result:=ItemPrepaint(NMCustomDraw);
CDDS_SUBITEM or CDDS_ITEMPREPAINT: Result:=CDRF_NOTIFYPOSTPAINT;
CDDS_SUBITEM or CDDS_ITEMPOSTPAINT: Result:=SubItemPostPaint(NMCustomDraw);
end;
end;
function TCustomAppForm.ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer;
begin
Result:=CDRF_NOTIFYSUBITEMDRAW;
end;
function TCustomAppForm.SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer;
begin
Result:=CDRF_DODEFAULT;
end;
...
type
TAppForm = class(TCustomAppForm)
...
function ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer; override;
function SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer; override;
...
function TAppForm.ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer;
begin
Result:=inherited ItemPrepaint(NMCustomDraw);
case ListViewGetItemImage(NMCustomDraw^.nmcd.dwItemSpec) of
IMAGE_READY, IMAGE_ERROR: NMCustomDraw^.clrTextBk:=GetSysColor(COLOR_BTNFACE);
end;
end;
function TAppForm.SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer;
var
ARect: TRect;
...
begin
Result:=inherited SubItemPostPaint(NMCustomDraw);
if NMCustomDraw^.iSubItem=3 then
begin
ListViewGetSubItemRect(NMCustomDraw^.nmcd.dwItemSpec, NMCustomDraw^.iSubItem, LVIR_BOUNDS, @ARect);
InflateRect(ARect, -1, -1);
case ListViewGetItemImage(NMCustomDraw^.nmcd.dwItemSpec) of
IMAGE_ERROR: begin
DrawError(NMCustomDraw^.nmcd.hdc, ARect);
Result:=CDRF_SKIPDEFAULT;
end;
IMAGE_READY: begin
DrawReady(NMCustomDraw^.nmcd.hdc, ARect);
Result:=CDRF_SKIPDEFAULT;
end;
IMAGE_LOADING: begin
DrawProgressBar(NMCustomDraw^.nmcd.hdc, ARect,
Trunc((GetLoadedBytes(NMCustomDraw^.nmcd.dwItemSpec)*100)/GetTotalFileSize(NMCustomDraw^.nmcd.dwItemSpec))
);
Result:=CDRF_SKIPDEFAULT;
end;
end;
end;
end;
ну это в кратце. CustomDraw это обработчик NM_CUSTOMDRAW.
__________________
Пишу программы за еду.
__________________
|