Конференция "KOL" » kol 3.15 bug report
 
  • dotnet20 (25.10.11 11:51) [0]
    when define EVENT_STATIC, WndProcToolbarCtrl() will report compiler error, seems some code is not correct,

    {$IFDEF  EVENTS_DYNAMIC}
    MOV      EDX, [EDX].TControl.EV
    MOV      ECX, [EDX].TEvents.fOnResize.TMethod.Code
    MOV      EAX, [EDX].TEvents.fOnResize.TMethod.Data
    {$ELSE}
    MOV      ECX, [EDX].TControl.fOnResize.TMethod.Code
    MOV      EAX, [EDX].TControl.fOnResize.TMethod.Data
    {$ENDIF}

    must changed to

    {$IFDEF  EVENTS_DYNAMIC}
    MOV      EDX, [EDX].TControl.EV
    MOV      ECX, [EDX].TEvents.fOnResize.TMethod.Code
    MOV      EAX, [EDX].TEvents.fOnResize.TMethod.Data
    {$ELSE}
    MOV      ECX, [EDX].TControl.EV.fOnResize.TMethod.Code
    MOV      EAX, [EDX].TControl.EV.fOnResize.TMethod.Data
    {$ENDIF}
  • dotnet20 (25.10.11 11:56) [1]
    below code must more nice

           {$IFDEF  EVENTS_DYNAMIC}
           MOV      EDX, [EDX].TControl.EV
           {$ELSE}
           MOV      EDX, OFFSET [EDX].TControl.EV
           {$ENDIF}
           MOV      ECX, [EDX].TEvents.fOnResize.TMethod.Code
           MOV      EAX, [EDX].TEvents.fOnResize.TMethod.Data
  • dotnet20 (03.11.11 11:10) [2]
    no answer?
  • Vladimir Kladov © (18.11.11 19:26) [3]
    For EVENT_STATIC, your correction seems OK. (Do you use EVENTS_STATIC for some kind of compatibility? In most cases NIL_EVENTS is sufficient. EVENTS_DYNAMIC uses memory more efficiently for a case of a lot of controls in the app).

    I'll add your correction int the next update. Sorry, just did not want make a release for a single fix for a rare (I hope) used conditional definition case.
  • Dufa © (20.11.11 10:02) [4]
    Владимир еще есть проблемы с treeview.. А именно в новой версии WndProcTreeView, не работает editlabels. Исправил, как смог:


    function WndProcTreeView( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
    asm
            PUSH  ESI
            PUSH  EDI
            MOV   EDI, ECX // EDI -> Rslt
            XOR   ECX, ECX
            CMP   WORD PTR [EDX].TMsg.message, WM_NOTIFY
            JNZ   @@ret_false1
            XCHG  ESI, EAX
            MOV   EDX, [EDX].TMsg.lParam
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, NM_RCLICK
            JNE   @@chk_TVN_BEGINDRAG
            PUSH  ECX
            PUSH  ECX
            PUSH  ESP
            CALL  GetCursorPos
            MOV   EAX, ESI
            MOV   EDX, ESP
            MOV   ECX, EDX
            CALL  TControl.Screen2Client
            POP   EDX
            POP   EAX
            SHLD  EAX, EDX, 16
            PUSH  EAX
            CALL  GetShiftState
            PUSH  EAX
            PUSH  WM_RBUTTONUP
            PUSH  ESI
            CALL  TControl.PostMsg
            JMP   @@ret_false1
    @@prepareCallEvent:
            STC
            MOV   EDX, ESI
            {$IFDEF EVENTS_DYNAMIC}
            MOV   ESI, [ESI].TControl.EV
            LEA   ECX, [ESI+ECX*8].TEvents.fOnTVBeginDrag
            {$ELSE}
            LEA   ECX, [ESI+ECX*8].TControl.EV.fOnTVBeginDrag
            {$ENDIF}
            MOV   EAX, [ECX].TMethod.Data
            MOV   ECX, [ECX].TMethod.Code
            JECXZ @@noEvent
            MOV   ESI, ECX
            AND   EAX, EAX
    @@noEvent:
            RET
    @@chk_TVN_BEGINDRAG: ///////////////////////////////////////////////////////////
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAG
            JE    @@beginDrag
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAG
            JNE   @@chk_TVNBEGINLABELEDIT
    @@beginDrag:
            PUSH  [EDX].TNMTreeView.itemNew.hItem
            CALL  @@prepareCallEvent
            POP   ECX
            JC    @@ret_false1
    @@justEventCall:
            CALL  ESI
    @@RsltEAX_ResultFalse:
            MOV   [EDI], EAX
            XOR   EAX, EAX
            POP   EDI
            POP   ESI
            RET
    @@chk_TVNBEGINLABELEDIT: ///////////////////////////////////////////////////////
            INC   ECX  // -> FOnTVBeginEdit
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDIT
            JNE   @@chk_ENDLABELEDIT
            ///////////////////////////////////////////////////////////////////////
            XOR   EAX, EAX
            INC   EAX
            {$IFDEF USE_FLAGS}
            TEST  [ESI].TControl.fFlagsG6, 1 shl G6_Dragging
            {$ELSE}
            CMP   [ESI].TControl.fDragging, 0
            {$ENDIF}
            JNZ   @@rsltEAX_ResultTrue
            PUSH  [EDX].TTVDispInfo.item.hItem
            CALL  @@prepareCallEvent
            POP   ECX
            JC    @@ret_false1
            CALL  ESI
            XOR   EAX, 1               //dufa
    @@rsltEAX_ResultTrue:
            MOV   [EDI], EAX
    @@ResultTrue:
            MOV   AL, 1
            POP   EDI
            POP   ESI
            RET
    @@chk_ENDLABELEDIT:
            INC   ECX //  -> fOnTVEndEdit
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDIT
            JNE   @@chk_ITEMEXPANDING
            MOV   EAX, [EDX].TTVDispInfo.item.pszText
            TEST  EAX, EAX
            JZ    @@ResultTrue
            PUSH  EAX
            PUSH  [EDX].TTVDispInfo.item.hItem
            CALL  @@prepareCallEvent
            POP   ECX
            //JNC   @@justEventCall    //dufa
            JC    @@ret_false1         //dufa
            CALL  ESI                  //dufa
            JMP   @@rsltEAX_ResultTrue //dufa
    @@Rslt1_ResultTrue:
            XOR   EAX, EAX
            INC   EAX
            JMP   @@RsltEAX_ResultFalse
    @@chk_ITEMEXPANDING: ///////////////////////////////////////////////////////////
            INC   ECX //  -> FOnTVExpanding
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDING
            JNE   @@chk_ITEMEXPANDED
    @@expanding_expanded:
            CMP   [EDX].TNMTreeView.action, TVE_EXPAND
            SETZ  AL
            PUSH  EAX
            PUSH  [EDX].TNMTreeView.itemNew.hItem
    @@event3:
            CALL  @@prepareCallEvent
            POP   ECX
            JNC   @@justEventCall
            POP   EAX
            JMP   @@ret_false1
    @@chk_ITEMEXPANDED: ////////////////////////////////////////////////////////////
            INC   ECX //  -> FOnTVExpanded
            CMP   [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDED
            JE    @@expanding_expanded
            ///////////////////////////////////////////////////////////////////////
            INC   ECX //  -> FOnTVSelChanging
            CMP   [EDX].TNMTreeView.hdr.code, TVN_SELCHANGING
            JNE   @@chk_TVN_SELCHANGED
            PUSH  [EDX].TNMTreeView.itemNew.hItem
            PUSH  [EDX].TNMTreeView.itemOld.hItem
            JMP   @@event3
    @@chk_TVN_SELCHANGED:
            CMP   [EDX].TNMTreeView.hdr.code, TVN_SELCHANGED
            JNE   @@ret_false1
            XCHG  EAX, ESI
            CALL  TControl.DoSelChange
    @@ret_false1:
            XOR   EAX, EAX
            POP   EDI
            POP   ESI
    end;

  • Vladimir Kladov © (21.11.11 16:55) [5]
    Спасибо, не заметил (давно без деревьев живу. Вредные они).
  • dotnet20 (23.11.11 15:34) [6]
    Do you use EVENTS_STATIC for some kind of compatibility?

    that is right:) thanks a lot
  • Валигози © (24.11.11 19:10) [7]

    > Vladimir Kladov ©   (21.11.11 16:55) [5]
    > Спасибо, не заметил (давно без деревьев живу. Вредные они).

    Как так? Вы имеете ввиду без стандартного treeview или вообще без любых? 8-0
  • Vladimir Kladov © (25.11.11 18:11) [8]
    Под VCL заменил своим FastTreeView, который сделан из виртуального ListView, и у него нет ограничений на число узлов. А в KOL-проектах стараюсь просто деревьев не делать. 65536 максимум узлов это ни в какие ворота. Тормоза после 1000-2000 узлов опять же.
  • Vladimir Kladov © (25.11.11 18:19) [9]
    Обновление завтра буду делать.
    2 Dufa: посмотрите у себя, работает ли в первом случае вот такой вариант:


    @@chk_TVNBEGINLABELEDIT: ///////////////////////////////////////////////////////
            INC   ECX  // -> FOnTVBeginEdit
            CMP   WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDIT
            JNE   @@chk_ENDLABELEDIT
            ///////////////////////////////////////////////////////////////////////
            XOR   EAX, EAX
            INC   EAX
            {$IFDEF USE_FLAGS}
            TEST  [ESI].TControl.fFlagsG6, 1 shl G6_Dragging
            {$ELSE}
            CMP   [ESI].TControl.fDragging, 0
            {$ENDIF}
            JNZ   @@rsltEAX_ResultTrue
            PUSH  [EDX].TTVDispInfo.item.hItem
            CALL  @@prepareCallEvent
            POP   ECX
            JC    @@ret_false1
            CALL  ESI
            XOR   AL, 1   //+Dufa
    @@rsltEAX_ResultTrue:
            MOV   [EDI], AL //+VK
    @@ResultTrue:
            MOV   AL, 1
            POP   EDI
            POP   ESI
            RET



    Жаль на работе не было времени проверить на живом NT4 и прочем зверинце. На XP SP3 работает. Win Se7en я у себя снес навсегда. Хорошо бы под Win 9x глянуть, хотя бы виртуальном.
  • Dufa © (26.11.11 16:04) [10]
    Vladimir Kladov, Работает норм, хр_сп3, 2к_сп4. 9х сейчас нету.. если появится возможность - проверю
 
Конференция "KOL" » kol 3.15 bug report
Есть новые Нет новых   [134428   +41][b:0][p:0.005]