-
> а вот нафига было вообще менять
а это для поддержки в МСК версий делфи от D2005 и выше. Обсуждалось в форуме же
-
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, протестировал как сумел, работает и в юникоде, и без. Взгляните, когда будет время
-
> У вас есть фикс? Я например, темами не балуюсь. Кроме крайней > необходимости что-то под темы отладить, вырубаю до запрета > службы themes. Рюшеки с тормозами - юзерам, мне не надо. >
Фикса нет (KOL и Delphi у меня используется исключительно на "побаловаться"). Дело не в том, что кому-то темы нужны, а кому-то нет, а в том, что это ненормальная реакция программы. Просто напомнил о старой ошибке.
-
Не используйте темы, и все. Кому надо, чтобы работало с темами, тот пусть исправляет. При отсутствии поддержки тем и манифеста ничего не ломается.
-
Кстати, с темами тоже чего-то не упало. Дайте пример, который падает, если это что-то более сложное, чем пустой проект с формой и парой кнопок. Или расскажите, как переключать темы, чтобы падало (с какой на какую).
-
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, тестируйте под ними, а потом говорите, что все работает.
-
-
2 Mr Проверь директивы: KOL_MCK;GRAPHCTL_XPSTYLES;PAS_VERSION
2 Vladimir Kladov Я понимаю, что Вы темы не используете и все такое, однако баг где-то в асм-версии. Возможно в прозрачности. С пас-версией все нормуль. Темы работают правильно и корректно.
-
C PAS_VERSION работает.
-
Да кстати еще 1 баг в свое время наблюдался: меню вдруг становилось неактивным. Такое было пару раз. Причины и условия возникновения не выяснил.
-
+ Причем очень интересным образом Файл - становился неактивным, Правка и тд работали нормально - в программе активность/неактивность указывалась только для Отменить/повторить.
-
А меню динамическое? И как выглядело управление активностью? Я буду смотреть, если будет тестовый пример, или точная инструкция, как воспроизвести баг. Вот исправление для переключения тем 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
PUSH offset[ID_SELF]
PUSH [ECX].TNMHdr.hwndFrom
CALL GetProp
PUSH GWL_USERDATA
PUSH [ECX].TNMHdr.hwndFrom
CALL GetWindowLong
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;
-
pop ecx мелкими буквами - тоже изменен, забыл выделить полужирным.
-
Меню не динамическое. Управлялось mnuUndo.Enabled := False/True; Баг стабильно воспроизвести не получается - частота 2 раза за полгода )). За фикс спасибо.
-
Vladimir Kladov, опередили меня с фиксом =)
-
mnuUndo.Enabled := False/True;С этого места можно подробнее: что такое mnuUndo и как оно было присвоено? В KOL вообще принята запись типа MainMenu1.ItemEnabled[mmUndo] :=
not MainMenu1.ItemEnabled[mmUndo];
при условии что константу mmUndo генерирует MCK.
-
D[u]fa, если у вас короче, выкладывайте.
-
Vladimir Kladov, у меня тоже самое, но через EDX
-
Поспешил, в программе mnuMain.Items[mnuUndo].Enabled := True/False; Значит нужно по другому? через .ItemEnabled?
-
Это без особой разницы. Вот если вы выловите закономерность, будет польза. Например: если есть сбой, то он стабилен в экзешнике, пока не будет перекомпилирован, и исчезает после перекомпиляции или проявляется нечаянно во время работы - однократно, и тут же исчезает как не бывало - даже без перезапуска?
|