Уважаемый посетитель!
Так как в Вашем браузере запрещено использование JavaScript для web-страниц, меню сайта Вам не доступно.
Для навигации по сайту используйте пожалуйста карту сайта.

Сделать стартовой Добавить в избранное Обратная связь

партнеры

SQL.RU

Детский Дворик - Портал детских фотографий

ГавГав.Инфо - портал для собаководов-любителей и профессиональных кинологов

Хосе Рауль Капабланка, кубинский шахматист, чемпион мира в 1921—27 г.г.

информация

реклама

« Глава 3 Оглавление Глава 4 »

Глава 4
Использование глобального объекта Message для передачи параметров между формами приложения

Многие начинающие разработчики для передачи параметров между окнами используют глобальные переменные. Я сам начина точно так же. Ни к чему хорошему это не приводит. Кстати, так же поступают разработчики, работавшие ранее с Visual Basic, MS Access, и т.д. А вся проблема в том, что некому рассказать им об объекте Message. Вот это я и хочу сделать…

Что это такое и с чем его едят

Итак, Message – это глобальный объект, создающийся при старте приложения. Он служит для управления событиями и содержит для этого 6 параметров:

Integer Handle – Дескриптор окна (хендл)
Integer Number – Идентификатор события Windows
UnsignedInt WordParm – Параметр word сообщения Windows
Long LongParm – Параметр long сообщения Windows
Boolean Processed – Флаг обработки события
Long ReturnValue – Значение для возврата Windows

Благодаря этим параметрам мы имеем возможность перехватывать и самостоятельно обрабатывать сообщения и события ОС Windows. Но интерес для нас представляют 4 другие параметра, предназначенные для передачи дополнительных параметров в обработчик:

PowerObject ClassDefinition – Объект типа PowerObject, содержащего информацию об определении класса объекта или управления.
Double DoubleParm – Число или числовая переменная типа Double
String StringParm – Строка или строковая переменная типа String
PowerObject PowerObjectParm – Любой объект 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.

Как это работает

Предположим, нам нужно передать в открываемое окно три переменных: Long Id, String Name и Double Salary, а за тем, по закрытию окна получить эти переменные обратно, в измененном виде. Создаем глобальную структуру 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

IKAR,
Программист-разработчик
PowerBuilder.
Ikar Home Center
 



Последнее обновление: 11.08.2016
Регистрация доменов

Регистрация доменных имен: .RU - 200 руб. и .SU - 500 руб.!
Остальные цены ЗАРЕГИСТРИРОВАТЬ!

реклама
ссылки


Продвижение сайтов

Биржа ссылок

статистика

Яндекс цитирования

(c)2002-2018 Ikar
Ikar Home Center
ICQ: 167220388
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель.
hosted on pets-tree