Показать сообщение отдельно
  #5  
Старый 21.12.2015, 10:01
Аватар для NumLock
NumLock NumLock вне форума
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.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием