Конференция "KOL" » Обработка NM_CUSTOMDRAW в TreeView (WinCE) [Lazarus, WinCE]
 
  • Sax-mmS (27.09.08 00:43) [0]
    При разработке приложения под WinCE (KOL+Lazarus) появилась необходимость в собственной отрисовке некоторых узлов. По непонятной причине, сообщения c CDDS_ITEMPAINT (да и любые другие, кроме CDDS_PREPAINT) не приходят.

    вот пример обрабочика, вешаю через AttachProc
    function ProcTVCustomDrawItem( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
    var
     CD: PNMLVCustomDraw;
     ...
    begin
     Result := False;
     if (Msg.message = WM_NOTIFY) then
     begin
       CD := Pointer( Msg.lParam );
       if longint(CD.nmcd.hdr.code) = NM_CUSTOMDRAW then
       begin
         Rslt := CDRF_DODEFAULT;
         if CD.nmcd.dwDrawStage = CDDS_PREPAINT then
           Rslt := CDRF_NOTIFYITEMDRAW
         else
           MsgOK(Format('0x%x', [CD.nmcd.dwDrawStage]));
       end;
     end;
    end;

  • mdw © (27.09.08 16:14) [1]
    Посмотри как реализованна отрисовка в TKOLmdvTreeListEdit, там используется пользовательская отрисовка TreeView.
  • Compiler © (27.09.08 17:54) [2]
    Может заменить
    > if CD.nmcd.dwDrawStage = CDDS_PREPAINT then

    на

    if LongBool(CD.nmcd.dwDrawStage and CDDS_PREPAINT) then

  • Sax-mmS (28.09.08 11:45) [3]
    mdw , спасибо а пример. Косяк был в том, я не возвращал Result := True и сообщение уходило на дальнейшую обрабоку.
 
Конференция "KOL" » Обработка NM_CUSTOMDRAW в TreeView (WinCE) [Lazarus, WinCE]
Есть новые Нет новых   [134431   +16][b:0][p:0.001]