Уважаемый посетитель! Так как в Вашем браузере запрещено использование
JavaScript для web-страниц, меню сайта Вам не доступно. Для навигации по сайту используйте
пожалуйста карту сайта.
Глава 4
Использование глобального объекта Message для передачи параметров между формами приложения
Многие начинающие разработчики для передачи параметров между окнами используют
глобальные переменные. Я сам начина точно так же. Ни к чему хорошему это не приводит. Кстати, так же
поступают разработчики, работавшие ранее с Visual Basic, MS Access, и т.д. А вся проблема в том, что
некому рассказать им об объекте Message. Вот это я и хочу сделать…
Что это такое и с чем его едят
Итак, Message – это глобальный объект, создающийся при старте приложения. Он служит
для управления событиями и содержит для этого 6 параметров:
IntegerHandle – Дескриптор окна (хендл) IntegerNumber – Идентификатор события Windows UnsignedIntWordParm – Параметр word сообщения Windows LongLongParm – Параметр long сообщения Windows BooleanProcessed – Флаг обработки события LongReturnValue – Значение для возврата Windows
Благодаря этим параметрам мы имеем возможность перехватывать и самостоятельно обрабатывать сообщения и
события ОС Windows. Но интерес для нас представляют 4 другие параметра, предназначенные для передачи
дополнительных параметров в обработчик:
PowerObjectClassDefinition – Объект типа PowerObject, содержащего информацию
об определении класса объекта или управления. DoubleDoubleParm – Число или числовая переменная типа Double StringStringParm – Строка или строковая переменная типа String PowerObjectPowerObjectParm – Любой объект PowerBuilder
Вот как раз через эти четыре поля мы и можем передавать все необходимые нам параметры!
Как это делается
А делается это очень просто. Есть два пути:
Путь первый: записать в поля Message передаваемые параметры, открыть окно, на открытии окна считать
параметры. Этот способ имеет уязвимость (теоретически, ибо я еще не разу не слышал,
чтобы кто-то это воспроизвел) в том, что между записью параметров и их считыванием на открытии окна есть
некоторое количество времени, когда Windows в ответ на какое либо событие может перезаписать наши данные
своими.
Путь второй: в PowerScript есть несколько функций, отвечающих за открытие и закрытие окна или
пользовательского объекта. Это функции OpenWithParm(),
OpenSheetWithParm(), OpenUserObjectWithParm() и
CloseWithReturn(). Все эти функции объединяет то, что в синтаксисе их вызова, то, что
Вы передаете вторым параметром, автоматически распознается по типу данных и помещается в соответствующее
поле объекта Message.
Примеры
Передаем строку.
В событии вызова окна some_window из окна parent_window:
На событии open окна some_window:
Принимаем параметр от закрывшегося окна.
В событии вызова окна some_window из окна parent_window:
На событии clickedкнопки «Закрыть»:
Маловато будет
Предвижу Ваш следующий вопрос. Да, рассмотренные выше примеры весьма удобны для
передачи одного параметра. А что делать для передачи нескольких? А если еще и типы параметров различаются?
Ответ прост – нужно использовать структуры!
Что такое структура
Структура – это, фактически, коллекция, состоящая из одной или нескольких связанных
переменных одного или разных типов. Структуры в PowerBuilder создаются как глобальный или объектный класс,
и используются как экземпляры класса. Для создания глобальной структуры вызовите через меню
File-New-PB Object-Structure. Для создания оконной структуры, находясь в режиме
редактирования окна, вызовите через меню Insert-Structure.
Как это работает
Предположим, нам нужно передать в открываемое окно три переменных:
LongId, StringName и DoubleSalary, а за тем, по закрытию окна получить эти переменные обратно, в измененном виде. Создаем
глобальную структуру s_Man, состоящую из этих переменных. Далее прописываем следующие
сценарии:
В событии вызова окна some_window из окна parent_window:
На событии open окна some_window:
На событии clickedкнопки «Закрыть» окна
some_window:
Вот и все. Видите, как просто и удобно? И, я бы даже добавил, красиво!
P.S.
Еще один вариант использования Message - это создание не визуального объекта,
наследованного от базового объекта Message и саомстоятельного расширения функционала
наследника.
Полученный таким образом объект может заменить стандартный объект Message в Вашем
приложении. Для этого после создания объекта откройте Application painter и на закладке
General окна свойств нажмите кнопку Additional Properties. В открывшемся окне расширенных
свойств бъекта Application перейдите на вкладку Variable Types и внесите
имя своего объекта в поле Message:, после чего нажмите кнопку "Ок" и сохраните объект
Application.
13 августа 2004 г. - 30 ноября 2005 г.
Впервые опубликовано на SQL.RU
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент
рекламируемых сайтов несет рекламодатель.