|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Глава 1 Для начала давайте определимся с условными обозначениями, терминами и определениями, которые мы будем использовать. Все выделения в тексте глав будут производиться полужирным шрифтом.
Итак, начнем. Первое, что нужно сделать - определиться с задачей, которую мы хотим реализовать. Повальное большинство книг по программированию предлагают начать изучение языка с написания программы, которая выводит на экран слова "Hello, World!" ("Здравствуй Мир!"). Мне всегда не нравился такой подход. По этому я предлагаю Вам начать с написания программы, которая будет посылать короткие текстовые сообщения по локальной сети1. Итак, составляем для себя своеобразное ТЗ (Техническое Задание). Нам необходимо создать приложение, которое отсылает сообщения по локальной сети. Приложение должно иметь удобный графический интерфейс, механизм проверки отправки сообщения, список адресатов локальной сети (адресную книгу) и несколько шаблонов для наиболее часто отсылаемых сообщений. Приложение должно "помнить" последнего адресата. В дальнейшем, в ходе разработки приложения, наше ТЗ может измениться, мы можем добавить в него что то еще, или, наоборот, от чего то отказаться. Но для начала работы мы вполне четко сформулировали себе задачу. Создайте на диске C: папку "PROJECT". В ней мы будем хранить все файлы исходных кодов наших программ. В папке "PROJECT" создайте папку "MESSAGE". В этой папке будут храниться файлы исходного кода непосредственно программы "Message". Запустите PowerBuilder2. Выберите пункт меню "File New". В появившемся мастере, на закладке "Start Wizards" выберите иконку "Application". На следующем шаге мастера введите название будущего приложения (Mess) и путь к месту, где будет храниться основная библиотека приложения(C:\project\message\Mess.pbl) как это сделано на рис. 1. Таким образом будет создан объект "Приложение" (Application), главный объект любой программы на PowerBuilder. Рис. 1
Закладка General:
Закладка Other:
Сохраните изменения. Теперь в событие Open нужно внести код
который будет центровать наше окно на экране. Для этого мы напишем функцию. Выберите пункт
меню "File New". В появившемся мастере, на закладке
"Object" выберите иконку "Function".
В верхней части открывшегося окна Function Painter внесите следующие параметры (рис. 3):
Рис. 3 Далее пишем код функции:
Принцип работы функции следующий. В строке (1) инициализируется экземпляр объекта env и проверяется, успешно ли прошла инициализация. Это необходимо для исключения run-time ошибок. Строки (2) и (3) проверяет, получили ли мы в ходе инициализации экземпляра объекта env величины, необходимые нам для центровки окна - а именно, установленное разрешение монитора (в точках; pixels). Но PowerBuilder для задания координат и размеров визуальных объектов использует PBU - PowerBuilder Units. Для перевода pixels в PBU используется функция PixelsToUnits(), первый параметр которой - переводимая величина, а второй - направление (горизонтальное (строка 2) или вертикальное (строка 3)). Дальше - чистая математика - взять половину от разности размеров экрана и окна. Поскольку координаты окна - целые числа, а при делении можем получить дробную часть - применяем функцию int() - отбрасывание дробной части полученного результата деления. Сохраните и закройте функцию, а так же запомните или запишите текст этой функции потому, что Вы сможете применить ее в будущем в любом Вашем приложении для центровки окна. Теперь в событие Open мы вносим всего одну строчку кода:
Эта строчка вызовет нашу функцию и передаст ей в качестве параметра окно, из
которого ее вызвали. This - это специализированный оператор, который позволяет опускать полную
нотацию имени объекта. В большинстве случаев это очень удобно. Например, вместо того чтобы обратиться
к полю строкового ввода по маске, лежащему на второй закладке табпейджа окна, через полную
нотацию - Теперь настало время первого запуска будущей программы. Он нужен для того чтобы посмотреть правильно ли отрабатывает написанная нами функция и как выглядит нарисованное окно. Для этого нам нужно в событии Open объекта приложения (класс Application) Mess вставить вызов окна w_main:
Сохраните изменения и запустите приложение. Для этого выберите пункт меню "File Run". Итак, наше приложение запустилось. Окно открылось в центре экрана и заданных размеров (рис. 4).
Для этого выберите пункт меню "File Tab Order" и установите порядок перехода как это показано на рис. 6. Отключите изменение порядка перехода через пункт меню "File Tab Order" и сохраните сделанные изменения. Ну что ж, настало время приступить непосредственно к написанию кода программы. Щелкните правой кнопкой мыши на объекте cb_cancel (кнопка "Отмена") и выберите в выпадающем меню пункт Script. Внесите в код события clicked () строчку:
Оператор Close закрывает объект указанный в скобках, а ключевое слово Parent указывает на родителя объекта в котором происходит обработка сценария. В данном случае обработка сценария происходит на объекте кнопки родителем которой является окно. Следовательно, будет закрыто окно. Так как окно, на данный момент, является единственным объектом приложения, то вместе с закрытием окна будет выгружено из памяти и закрыто само приложение. Сохраните изменения. Теперь напишем код события clicked () для объекта cb_send (кнопка "Отправить").
Сохраните изменения. Разберемся, как же работает вышеприведенный код. В первом блоке (1) оператором String мы объявляем три текстовые переменные (usr, txt, command) и оператором Integer одну числовую переменную (err). Во втором блоке (2) мы присваиваем значения переменным usr и txt, обращаясь к свойству text объектов sle_user и mle_messge. В третьем блоке (3) мы с помощью оператора Trim(), который удаляет все пробелы стоящие в начале и в конце строки, проверяем заполнил ли пользователь поле "Кому" и имеем ли мы какое либо значение в переменной usr. Если значение usr равно пустой строке, то в строке (4) мы сообщаем пользователю об ошибке с помощью команды MessageBox, а в строке (5) прекращаем выполнение обработки оператором return. Дальше мы производим аналогичную проверку с текстом сообщения (6). В строке (7) мы формируем команду net send с необходимыми параметрами и записываем эту команду в переменную command.
В строке (8) мы запускаем команду на выполнение с помощью оператора Run(). Первым
параметром этого оператора является команда, которую нужно выполнить, а вторым - тип открываемого окна,
в котором будет выполняться команда. Мы задали тип окна Minimized!, что означает
что окно будет свернуто. Однако, в команде может быть допущена ошибка и оператор
Run() может не отработать. Нам нужно проверить это и, в зависимости от результата,
предпринять те или иные действия. Для этого мы присваиваем переменной err результат
выполнения оператора Run(). В строке (9) мы проверяем значение переменной err и если она не равна 1 то уведомляем пользователя об ошибке (10). Во всех остальных случаях (11) мы сообщаем пользователю что сообщение отправлено. Команда MessageBox, с помощью которой мы сообщаем пользователю об ошибке или успешном выполнении, имеет два обязательных и три не обязательных параметра разделенных запятыми. Формат команды такой: MessageBox ( title, text {, icon {, button {, default } } } ) Где:
Запустите программу на выполнение ("File Run"). Внесите в поле "Кому" имя своего компьютера, а в поле "Текст" слово test. Нажмите кнопку "Отправить". На экране должно появится сообщение как на рис. 7.
В следующей главе мы с Вами сделаем адресную книгу для адресатов, меню для настроек внешнего вида программы и скомпилируем ЕХЕ-файл программы.
1 Один из вариантов этой программы (уже написанный и откомпилированный мною)
Вы можете скачать по ссылке: Программа "Message", 1076 Kb
2 Здесь и далее речь идет о PowerBuilder 7, на котором и будут основываться
наши лекции. Последнее обновление: 11.08.2016 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
coding
(c)2002-2024 Ikar Ikar Home Center ICQ: 167220388 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель. |