Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

kol 3.15 bug report


dotnet20   (25.10.11 11:51

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х сейчас нету.. если появится возможность - проверю


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо