Да, не бойся. Посмотрел в шаблонах CapeSoft, то же самое:Shur писал(а):Креатор, спасибо, конечно. А замыкания часом не получится? Лучше не стану.
Код: Выделить всё
system{prop:MessageHook} = address(ds_Message)
Модератор: Дед Пахом
Да, не бойся. Посмотрел в шаблонах CapeSoft, то же самое:Shur писал(а):Креатор, спасибо, конечно. А замыкания часом не получится? Лучше не стану.
Код: Выделить всё
system{prop:MessageHook} = address(ds_Message)


Код: Выделить всё
message('one')
message('two')
message('three')
Какие-то грабли конкретного приложения ...
в том то и дело, никаких локов и т.п. Обычное окошко...Игорь Столяров писал(а): 26 Апрель 2017, 22:28Какие-то грабли конкретного приложения ...
Вставил указанный код и проверил - все работает штатно.
Попробуйте сделать тоже самое в каком-нибудь примере из поставки C63.
Как догадка: здесь может быть что-то с LOCKTHREAD / UNLOCKTHREAD - они могут нарушать обработку сообщений.
Поставь между message
Код: Выделить всё
          If Confirm('Подвердите очистку текста')
             ?Text{'ResetContents'}
          End
          ... 
          Say('Пожалуйста, заполните сначала справочник филиалов и укажите текущее подразделение (филиал)')          
Код: Выделить всё
Confirm              PROCEDURE  (MSGText,Caption)          ! Declare Procedure
FilesOpened          LONG                                  !
Loc:Message   Cstring(4000)
Loc:Caption   Cstring(1000)
  CODE
            Hwnd#=0 !{Prop:Handle}
            Code#=MB_YesNo+MB_IconQuestion+MB_SystemModal
            Loc:Message=Clip(MsgText)
            Loop
              I#=Instring('|',Loc:Message,1,1)
              If I#=0
                Break
              Else
                Loc:Message[I#]='<10>'
              End
            End
            Loc:Caption='Внимание!'
            If ~Omitted(2)
              Loc:Caption=Caption
            End
            UnlockThread()
            If MessageBox(HWND#,Loc:Message,Loc:Caption,Code#)=IdYes
               LockThread()
               Return(1)
            Else
               LockThread()
               Return(0)
            End
Код: Выделить всё
Say                  PROCEDURE  (MSGtext,Caption)          ! Declare Procedure
FilesOpened          LONG                                  !
Loc:Message   Cstring(4000)
Loc:Caption   Cstring(1000)
  CODE
            Hwnd#=0 ! {Prop:Handle}
            Code#=MB_OK+MB_SystemModal
            Loc:Message=Clip(MsgText)
            Loop
              I#=Instring('|',Loc:Message,1,1)
              If I#=0
                Break
              Else
                Loc:Message[I#]='<10>'
              End
            End
            Loc:Caption='Внимание!'
            If ~Omitted(2)
              Loc:Caption=Caption
            End
            UnlockThread()
            If MessageBox(HWND#,Loc:Message,Loc:Caption,Code#).
            LockThread()
Код: Выделить всё
if message('Invisible message',,,BUTTON:Yes+BUTTON:No,BUTTON:No) = BUTTON:No
   message('I have not seen anything')
else
   message('I have seen you')
end      
по первому - не совсем уловил мысль.Shur писал(а): 27 Апрель 2017, 22:26 Случай интересный.
Если будет время, то можно попробовать с примерно следующим:Ну и доп. вопрос: а нет ли в программе симуляций нажатий клавиш типа PressKey(EnterKey)?Код: Выделить всё
if message('Invisible message',,,BUTTON:Yes+BUTTON:No,BUTTON:No) = BUTTON:No message('I have not seen anything') else message('I have seen you') end
интересно - проверю еще раз!Shur писал(а): 27 Апрель 2017, 22:42 Просто мне кажется, что первый месседж "глотается", т.е. вы не успеваете его увидеть, если, допустим, идет отработка клавиши Enter. Ну и хотелось проверить эту версию.