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

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

партнеры

SQL.RU

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

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

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

информация

реклама

Скачать RAR архив. 150Kb
« Оглавление Глава 2 »

Глава 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

Теперь нам нужно нарисовать главное окно программы. Для этого снова выберите пункт меню "File New". В появившемся мастере, на закладке "Object" выберите иконку "Window". Откроется Window Painter. В области окна Window Painter, которая называется Properties, на закладке General, в поле ввода Title введите "Отправка текстовых сообщений" - этот текст будет отображаться в заголовке окна. Выберите пункт меню "File Save As...". В появившемся окне сохранения окна внесите имя окна - w_main (рис. 2). Далее нам нужно задать такие свойства окна, как размер, тип окна, размерность и т.д. Для этого, в области окна Window Painter, которая называется Properties, на закладке General, выставляем следующие параметры:



Рис. 2

Закладка General:

Visible - окно должно быть видимым на экране.
Enabled - окно должно быть активным, чтобы пользователь мог им пользоваться.
ControlMenu - окно может допускать расположение на нем Меню.
MaxBox - у окна будет не активна кнопка "Развернуть"
MinBox - у окна будет активна кнопка "Свернуть".
Resiziable - нельзя изменять размеры окна.
ClientEdge - окно не позволяет иметь фреймы.
RightToLeft - окно не позволяет надписи справа налево.
WindowType = main! - это окно основного типа.
WindowState = normal! - окно откроется на экране в нормальном виде.
BackColor = Silver - цвет фона окна.
Icon = имя файла с расширением .ico - это будет иконка окна, она должна лежать в каталоге "C:\project\message".

Закладка Other:

width= 1170 - ширина окна.
height= 1112 - высота окна.

Сохраните изменения. Теперь в событие Open нужно внести код который будет центровать наше окно на экране. Для этого мы напишем функцию. Выберите пункт меню "File New". В появившемся мастере, на закладке "Object" выберите иконку "Function". В верхней части открывшегося окна Function Painter внесите следующие параметры (рис. 3):

Return Type = (none) - возвращаемое значение функции. Нам оно не требуется.
Function Name = f_center_win - название функции.
Pass By = value - тип данных который передается/возвращается в/из функции. В данном случае по значению.
Argument Type = window - тип аргумента получаемого функцией для обработки. В нашем случае это объект типа window, то есть окно.
Argument Name = w_center - название аргумента функции.


Рис. 3

Далее пишем код функции:

Принцип работы функции следующий.
Env - переменная типа Environment. Тип Environment - объект, хранящий информацию о системе, на которой работает приложение - версия ОС, тип процессора, разрешение и глубина цвета монитора и т. д. В данном случае нас интересует геометрия монитора - свойства ScreenWidth и ScreenHeight - ширина и высота в точках.

В строке (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).

Закроем окно и начнем рисовать на нем основные элементы управления которые нам понадобятся. С помощью пункта меню "Insert Control " расположите на окне 2 элемента StaticTextControl (st_1 и st_2), SingleLineEditControl (sle_1), MultiLineEditControl (mle_1) и три CommandButton (cb_1, cb_2 и cb_3) как это сделано на рис. 5. Сохраните изменения. Теперь установим параметры и свойства элементов управления через Properties, на закладке General:

Для st_1:

Text = Кому.

Для st_2:

Text = Текст.

Для sle_1:

Name = sle_user.
Text = пустая строка.

Для mle_1:

Name = mle_message.
Text = пустая строка.

Для cb_1:

Name = cb_user.
Text = ....
Visible.
Text = Enabled.

Для cb_2:

Name = cb_send.
Text = Отправить.
Visible.
Enabled.

Для cb_3:

Name = cb_cancel.
Text = Отмена.
Visible.
Enabled.

Для st_1 и st_2 на закладке Font установите BackColor = Silver. Сохраните сделанные изменения. Теперь нам нужно установить порядок перехода фокуса по элементам управления.



Рис. 4


Рис. 5


Рис. 6

Для этого выберите пункт меню "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().
Оператор Run() возвращает значение 1 при успешном выполнении команды и -1, в случае ошибки.

В строке (9) мы проверяем значение переменной err и если она не равна 1 то уведомляем пользователя об ошибке (10). Во всех остальных случаях (11) мы сообщаем пользователю что сообщение отправлено.

Команда MessageBox, с помощью которой мы сообщаем пользователю об ошибке или успешном выполнении, имеет два обязательных и три не обязательных параметра разделенных запятыми. Формат команды такой:

     MessageBox ( title, text {, icon {, button {, default } } } )

Где:

         
  • title - заголовок сообщения,
  •      
  • text - текст сообщения,
  •      
  • icon - иконка сообщения (в нашем случае это Exclamation! и StopSign!),
  •      
  • button - служебные кнопки сообщения (мы опустили этот параметр и у нас по умолчанию сообщение будет иметь только кнопку "Ок").
  •      
  • default - активная кнопка.

Запустите программу на выполнение ("File Run"). Внесите в поле "Кому" имя своего компьютера, а в поле "Текст" слово test. Нажмите кнопку "Отправить". На экране должно появится сообщение как на рис. 7.

На операционных системах Windows 95, Windows 98 и Windows ME для получения сообщений необходимо запустить программу WinPopup.exe, так как в этих ОС отсутствует служба сообщений.

На ОС Windows XP SP2 по умолчанию прием и отправка сообщений заблокированы! Для того чтобы разблокировать эти функции, Вам нужно запустить службы "Служба сообщений" и "Оповещатель". Для того, чтобы это сделать, откройте консоль управления службами (Пуск -> Панель управления -> Администрирование -> Службы), найдите нужную службу в списке, откройте ее свойства двойным щелчком и в открывшемся окне измените поле "Тип запуска" на "Вручную" или "Авто". Нажмите кнопку "Применить", после чего нажмите кнопку "Пуск".


Рис. 7

В следующей главе мы с Вами сделаем адресную книгу для адресатов, меню для настроек внешнего вида программы и скомпилируем ЕХЕ-файл программы.

24 июля 2003 г.

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


1 Один из вариантов этой программы (уже написанный и откомпилированный мною) Вы можете скачать по ссылке: Программа "Message", 1076 Kb
Вернуться к тексту^

2 Здесь и далее речь идет о PowerBuilder 7, на котором и будут основываться наши лекции.
Вернуться к тексту^



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

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

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


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

Биржа ссылок

статистика

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

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