Конференция "KOL" » Версия 2.90 [Delphi, Windows]
 
  • vampir_infernal (06.04.10 18:44) [40]

    > а вот нафига было вообще менять

    а это для поддержки в МСК версий делфи от D2005 и выше. Обсуждалось в форуме же
  • vampir_infernal (06.04.10 19:06) [41]
    Vladimir Kladov
    Скажите, пожалуйста, для чего в KOL.PAS присутствует следующее:
    1) начиная со строки 12033 объявляется свой тип TMenuitemInfo, аналогичный одноименному из windows.pas, с разницей в типе KOLChar;
    2) в строке 27348 указано
    Windows.PMenuitemInfo( @ MII )^ );


    3) в строке 27369 по аналогии с предыдущим пунктом
    и при этом всём в kol_unicode.inc объявлены нормально и закомментированы типы TMenuitemInfo, PMenuitemInfo и MENUITEMINFO?
    Раскомментировал в kol_unicode, закомментировал объявление типа и прямую ссылку на модуль windows в kol.pas, протестировал как сумел, работает и в юникоде, и без. Взгляните, когда будет время
  • Mr (07.04.10 08:52) [42]

    > У вас есть фикс? Я например, темами не балуюсь. Кроме крайней
    > необходимости что-то под темы отладить, вырубаю до запрета
    > службы themes. Рюшеки с тормозами - юзерам, мне не надо.
    >

    Фикса нет (KOL и Delphi у меня используется исключительно на "побаловаться"). Дело не в том, что кому-то темы нужны, а кому-то нет, а в том, что это ненормальная реакция программы. Просто напомнил о старой ошибке.
  • Vladimir Kladov © (07.04.10 16:23) [43]
    Не используйте темы, и все. Кому надо, чтобы работало с темами, тот пусть исправляет. При отсутствии поддержки тем и манифеста ничего не ломается.
  • Vladimir Kladov © (08.04.10 15:27) [44]
    Кстати, с темами тоже чего-то не упало. Дайте пример, который падает, если это что-то более сложное, чем пустой проект с формой и парой кнопок. Или расскажите, как переключать темы, чтобы падало (с какой на какую).
  • Vladimir Kladov © (08.04.10 18:14) [45]
    vampir_infernal
    Скажите, пожалуйста, для чего в KOL.PAS присутствует следующее:
    1) начиная со строки 12033 объявляется свой тип TMenuitemInfo, аналогичный одноименному из windows.pas, с разницей в типе KOLChar;
    2) в строке 27348 указано Windows.PMenuitemInfo( @ MII )^ );
    3) в строке 27369 по аналогии с предыдущим пунктом
    и при этом всём в kol_unicode.inc объявлены нормально и закомментированы типы TMenuitemInfo, PMenuitemInfo и MENUITEMINFO?
    Раскомментировал в kol_unicode, закомментировал объявление типа и прямую ссылку на модуль windows в kol.pas, протестировал как сумел, работает и в юникоде,
    и без. Взгляните, когда будет время

    Дело в совместимости с Win95/NT4 и в совместимости с Delphi2,3. KOLChar = это как раз для UNICODE_CTRL, под древними ОС все равно проект, откомпилированный с этой опцией, не идет, разницы в размере структуры он не дает, важен не тип указателя, а наличие поля hbmItem, его в Delphi 2, 3 не объявили, но это поле и не особенно нужно для обычной работы, а в 95/NT4 даже еще и мешает - система не понимает размер структуры 48, им 44 подавай. Т.е. как было - как раз правильно, и протестировано в NT4 и Win95. Оставьте и не трогайте, или устанавливайте себе 95 (не OSR2!!!) и NT4, тестируйте под ними, а потом говорите, что все работает.
  • Mr (09.04.10 09:04) [46]
    Вот на этом падает при смене тем.
    http://slil.ru/28931281
  • MTsv DN (09.04.10 12:40) [47]
    2 Mr
    Проверь директивы: KOL_MCK;GRAPHCTL_XPSTYLES;PAS_VERSION

    2 Vladimir Kladov
    Я понимаю, что Вы темы не используете и все такое, однако баг где-то в асм-версии. Возможно в прозрачности. С пас-версией все нормуль. Темы работают правильно и корректно.
  • Mr (09.04.10 13:22) [48]
    C PAS_VERSION работает.
  • Mr (09.04.10 13:36) [49]
    Да кстати еще 1 баг в свое время наблюдался: меню вдруг становилось неактивным. Такое было пару раз. Причины и условия возникновения не выяснил.
  • Mr (09.04.10 15:02) [50]
    + Причем очень интересным образом Файл - становился неактивным, Правка и тд работали нормально - в программе активность/неактивность указывалась только для Отменить/повторить.
  • Vladimir Kladov © (09.04.10 16:48) [51]
    А меню динамическое? И как выглядело управление активностью? Я буду смотреть, если будет тестовый пример, или точная инструкция, как воспроизвести баг.

    Вот исправление для переключения тем KOL_ASM:

    function WndProcNotify( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
    asm
          CMP      word ptr [EDX].TMsg.message, WM_NOTIFY
          JNE      @@ret_false
           PUSH     ECX
           PUSH     EDX
          push     eax
          MOV      ECX, [EDX].TMsg.lParam
          {$IFDEF USE_PROP}
          PUSH     offset[ID_SELF]
          PUSH     [ECX].TNMHdr.hwndFrom
          CALL     GetProp
          {$ELSE}
          PUSH     GWL_USERDATA
          PUSH     [ECX].TNMHdr.hwndFrom
          CALL     GetWindowLong
          {$ENDIF}
           pop      ecx
           POP      EDX
           TEST     EAX, EAX
           JZ       @@ret_false_ECX
           cmp      eax, ecx
           jz       @@ret_false_ECX
           MOV      ECX, [EAX].TControl.fHandle
           MOV      [EDX].TMsg.hwnd, ECX
           POP      ECX
          JMP      TControl.EnumDynHandlers
    @@ret_false_ECX:
           POP      ECX
    @@ret_false:
          XOR      EAX, EAX
    end;

  • Vladimir Kladov © (09.04.10 16:49) [52]
    pop ecx мелкими буквами - тоже изменен, забыл выделить полужирным.
  • Mr (09.04.10 16:52) [53]
    Меню не динамическое. Управлялось mnuUndo.Enabled := False/True; Баг стабильно воспроизвести не получается - частота 2 раза за полгода )).
    За фикс спасибо.
  • Dufa © (09.04.10 17:00) [54]
    Vladimir Kladov, опередили меня с фиксом =)
  • Vladimir Kladov © (09.04.10 17:02) [55]
    mnuUndo.Enabled := False/True;
    С этого места можно подробнее: что такое mnuUndo и как оно было присвоено?
    В KOL вообще принята запись типа
       MainMenu1.ItemEnabled[mmUndo] :=
       not MainMenu1.ItemEnabled[mmUndo];

    при условии что константу mmUndo генерирует MCK.
  • Vladimir Kladov © (09.04.10 17:03) [56]
    D[u]fa, если у вас короче, выкладывайте.
  • Dufa © (09.04.10 17:07) [57]
    Vladimir Kladov, у меня тоже самое, но через EDX
  • Mr (09.04.10 19:04) [58]
    Поспешил, в программе
    mnuMain.Items[mnuUndo].Enabled := True/False;
    Значит нужно по другому? через .ItemEnabled?
  • Vladimir Kladov © (09.04.10 19:37) [59]
    Это без особой разницы. Вот если вы выловите закономерность, будет польза. Например: если есть сбой, то он стабилен в экзешнике, пока не будет перекомпилирован, и исчезает после перекомпиляции или проявляется нечаянно во время работы - однократно, и тут же исчезает как не бывало - даже без перезапуска?
 
Конференция "KOL" » Версия 2.90 [Delphi, Windows]
Есть новые Нет новых   [118410   +28][b:0.001][p:0.002]