В продолжение того, что я писал вчера в телеграм. Похоже, в PET всё же есть проблема с диспетчерами сообщений (Sequencer). Их два - один живёт в окне (FormWindow), другой живёт в форме (которая суть VisualComponent).
В норме, если окно не может обработать соощбение, оно вызывает Handle для формы, форма перекладывает сообщение в свой диспетчер и дальше оно обрабатывается "по-человечески", т.е. в активном объекте MsgSequencer, принадлежащем форме (а не окну).
В PET проблемная строчка - вызов currentPage.HandleShortcut после строчки (* relay hot key to current page *). Здесь вместо вызова Handle идёт прямой вызов метода из PETPanel, т.е. действия формы. Т.е. секвенсер от окна, а действия мы выполняем над формой. Я не знаю, правильно это или нет и всё почему-то работает. Но достаточно сделать вполне невинные доработки, например, сделать, чтобы по кнопке F6 происходило переключение между кадрами в режиме при нажатой кнопке Split, как получаем красный экран из-за того, что действия происходят не в том активном объекте.
Правилен ли такой прямой вызов метода другого активного объекта в данном случае - я до сих пор не знаю, но выглядит достаточно подозрительным, чтобы опубликовать. Я буду раскапывать эту ситуацию дальше и надеюсь, что смогу её разрешить, но вести записи буду на своём форуме, а не тут, во избежание различных эксцессов.
|