Проблема с MESSAGE()

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Проблема с MESSAGE()

Сообщение kreator »

Shur писал(а):Креатор, спасибо, конечно. А замыкания часом не получится? Лучше не стану.
Да, не бойся. Посмотрел в шаблонах CapeSoft, то же самое:

Код: Выделить всё

system{prop:MessageHook} = address(ds_Message)
У них в инициализации класса это.
We are hard at work… for you. :)
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Проблема с MESSAGE()

Сообщение Shur »

Чтобы в теме не было непроверенных вещей, я проверил себя и перенацелил MessageHook на свою процедуру MessageCR (текст процедуры и суть предлагаемого см. выше по теме). Я был прав -- хук привёл к хэнгу, т.е. к сваливанию программы. Впрочем это было очевидно и до теста. :D
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Проблема с MESSAGE()

Сообщение ingasoftplus »

Нарисовалась тут у меня занятная непонятка по message. Есть стандартная с6 авс прикладуха. И вот стал одну процедуру отлаживать и наткнулся на глюк просто нет слов.

есть в коде, все по ингишу

Код: Выделить всё

message('one')
message('two')
message('three')
так блин окошки с сообщениями вылезают так
two
three

первый мессадж вообще не выводится!!! как будто его нет!!! закоментишь первый - вылезет только
three

как-будто певый месадж съедается в никуда!! Дурка. Сам бы не налетел - никогда не поверил!!

никаких хуков и т.п. Обычный cтандартный message()

Что это???
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Проблема с MESSAGE()

Сообщение Игорь Столяров »

ingasoftplus писал(а): 26 Апрель 2017, 21:55 Что это???
Какие-то грабли конкретного приложения ...
Вставил указанный код и проверил - все работает штатно.
Попробуйте сделать тоже самое в каком-нибудь примере из поставки C63.

Как догадка: здесь может быть что-то с LOCKTHREAD / UNLOCKTHREAD - они могут нарушать обработку сообщений.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Проблема с MESSAGE()

Сообщение ingasoftplus »

Игорь Столяров писал(а): 26 Апрель 2017, 22:28
ingasoftplus писал(а): 26 Апрель 2017, 21:55 Что это???
Какие-то грабли конкретного приложения ...
Вставил указанный код и проверил - все работает штатно.
Попробуйте сделать тоже самое в каком-нибудь примере из поставки C63.

Как догадка: здесь может быть что-то с LOCKTHREAD / UNLOCKTHREAD - они могут нарушать обработку сообщений.
в том то и дело, никаких локов и т.п. Обычное окошко...

Да, проверил на с10 - конечно все работает. Но тут - просто дурь какая-то. вообще не понятно, как локализовать.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Проблема с MESSAGE()

Сообщение Губин Игорь »

ingasoftplus писал(а): 26 Апрель 2017, 22:44 Но тут - просто дурь какая-то. вообще не понятно, как локализовать.
Поставь между message

A#=2

Или т.п.
Это я только кажусь дураком! На самом деле я полный идиот!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Проблема с MESSAGE()

Сообщение Yufil »

У меня были проблемы - приложение падало, если Message открывалось в окне с OCX, пришлось переписывать.

Код: Выделить всё

          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()
Confirm FUNCTION(String,<String>),LONG !Задать вопрос и получить ответ
Say PROCEDURE(String,<String>) !Вывод текста
MessageBox PROCEDURE(Long,*Cstring,*Cstring,UNSIGNED),SIGNED,PASCAL,RAW,NAME('MessageBoxA')

MB_ICONQUESTION EQUATE(00000020h)
MB_SYSTEMMODAL EQUATE(00001000h)
MB_YESNO EQUATE(00000004H)
MB_OK EQUATE(0000h)
DWORD EQUATE(ULong)

IDYES EQUATE(6)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Проблема с MESSAGE()

Сообщение Yufil »

а грабли точно есть, недавно дебагал программу, расставил сообщения через Message/Stop. И нифига не выводится.
Пришлось пользовать API Debug Output из FreeABC
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Проблема с MESSAGE()

Сообщение ingasoftplus »

ладно! всем спасибо! буду иметь ввиду. на данные момент закоментил мессаджи, нет времени разбираться.
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Проблема с MESSAGE()

Сообщение Shur »

Случай интересный.
Если будет время, то можно попробовать с примерно следующим:

Код: Выделить всё

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      
Ну и доп. вопрос: а нет ли в программе симуляций нажатий клавиш типа PressKey(EnterKey)?
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Проблема с MESSAGE()

Сообщение ingasoftplus »

Shur писал(а): 27 Апрель 2017, 22:26 Случай интересный.
Если будет время, то можно попробовать с примерно следующим:

Код: Выделить всё

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      
Ну и доп. вопрос: а нет ли в программе симуляций нажатий клавиш типа PressKey(EnterKey)?
по первому - не совсем уловил мысль.

по второму - нет. обычные рутинки. и мессаджи идут именно один за другим!
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Проблема с MESSAGE()

Сообщение Shur »

Просто мне кажется, что первый месседж "глотается", т.е. вы не успеваете его увидеть, если, допустим, идет отработка клавиши Enter. Ну и хотелось проверить эту версию.
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Проблема с MESSAGE()

Сообщение ingasoftplus »

Shur писал(а): 27 Апрель 2017, 22:42 Просто мне кажется, что первый месседж "глотается", т.е. вы не успеваете его увидеть, если, допустим, идет отработка клавиши Enter. Ну и хотелось проверить эту версию.
интересно - проверю еще раз!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Проблема с MESSAGE()

Сообщение Yufil »

Интересно с дебаггером посмотреть. Может быть, первый Message вообще не компилируется, было такое ...
Кстати, глянул - у меня, оказывается, во всех приложениях вместо Message с незапамятных времён используются описанные
выше Say и Confirm.
А вот для отладки нового приложения решил прописать Message, лень было переносить процедуры. И облом...
Kromeshnik
Новичок
Сообщения: 18
Зарегистрирован: 27 Август 2012, 22:59

Проблема с MESSAGE()

Сообщение Kromeshnik »

да, тоже напрягало, что на 10 обрезался текст при message. Для себя делаю так, вставляю в конце текста <13,10>:
message('Скопировать с реальной машины файлы<13,10> ')
для своего дебага этого достаточно, ну а если для других нужд, то лучше, кочнено, через winapi
Ответить