Книга: Программирование на языке Ruby
12.3.2. Простое оконное приложение
12.3.2. Простое оконное приложение
Вот пример минимального приложения FXRuby, которое делает то же самое, что рассмотренные выше приложения Tk и GTK+:
require 'fox16' # Используются привязки к FOX 1.6.
include Fox
application = FXApp.new
main = FXMainWindow.new(application, "Today's Date")
str = Time.now.strftime("&Today is %B %d, %Y")
button = FXButton.new(main, str)
button.connect(SEL_COMMAND) { application.exit }
application.create
main.show(PLACEMENT_SCREEN)
application.run
Этого примера достаточно для демонстрации двух важнейших классов FXRuby: FXApp
и FXMainWindow
. Приложение должно в самом начале создать и инициализировать объект FXApp. FXMainWindow
— подкласс FXTopWindow
; каждый виджет в FOX — некая разновидность «окна». Класс FXTopWindow
представляет окно верхнего уровня, которое появляется непосредственно на экране. Более сложное приложение FXRuby обычно создает подкласс FXMainWindow
и размещает в нем виджеты на этапе инициализации.
Конструктору FXMainWindow
необходимо передать первым параметром объект FXApp. Второй параметр — заголовок окна. По умолчанию экземпляр FXMainWindow
размещается в центре экрана и снабжается всеми стандартными элементами, присущими FXTopWindow
. Таким образом, для окна отображается полоса заголовка с кнопками свертывания, развертывания и закрытия. Его размеры можно изменять.
Атрибут decorations
главного окна позволяет явно указать необходимые элементы оформления. Например, можно запретить изменение размеров:
main = FXMainWindow.new(application, "Today's Date")
main.decorations = DECOR_TITLE | DECOR_CLOSE
Значение decorations
образуется комбинированием битовых флагов, как это принято в C++. В примере выше окно имеет только заголовок и кнопку закрытия.
В этом простом примере главное окно содержит всего один виджет — экземпляр класса FXButton
, в котором отображается текущая дата.
str = Time.now.strftime("&Today is %B %d, %Y")
button = FXButton.new(main, str)
Первый аргумент конструктора FXButton
— родительское окно, содержащее данный виджет. В нашем примере это главное окно. Второй аргумент — текст, рисуемый на кнопке.
В следующей строчке показано, как с помощью метода connect
ассоциировать с кнопкой блок:
button.connect(SEL_COMMAND) { application.exit }
Здесь говорится, что когда кнопка отправляет командное сообщение (то есть сообщение типа SEL_COMMAND
), следует вызвать метод exit
.
В оставшихся строчках мы наблюдаем «ритуал обручения» объектов FXApp
и FXMainWindow
:
application.create
main.show(PLACEMENT_SCREEN)
application.run
Любое приложение FXRuby должно включать подобные строки, чтобы создать экземпляр приложения, показать окно FXMainWindow
и запустить цикл обработки событий. Аргумент PLACEMENT_SCREEN
метода show
определяет, в каком месте экрана должно появиться окно. Из других возможных значений упомянем PLACEMENT_CURSOR
(поместить окно там, где находится курсор), PLACEMENT_OWNER
(в центре окна-владельца) и PLACEMENT_MAXIMIZED
(раскрыть окно на весь экран).
- 12.4.2. Простое оконное приложение
- 12.1.2. Простое оконное приложение
- 12.2.2. Простое оконное приложение
- Простое присваивание
- Приложение 9 Акт выполненных работ (к Договору на оказание информационных услуг)
- Приложение 21 Образец должностной инструкции начальника отдела по работе с сетевыми клиентами
- Приложение 19 Образец должностной инструкции мерчендайзера
- Приложение I Диаграммы взаимовлияния
- Приложение 10. Коды ошибок