Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

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.3.3. Кнопки

Вы уже видели, как организуется работа с кнопками в FXRuby. Заглянем немного глубже.

На кнопке может размещаться не только короткая строка. Допустимы и несколько строк, разделенных символом новой строки:

text = "&Hello, World!\n" +

 "Do you see multiple lines of text?"

FXButton.new(self, text)

Обратите внимание на амперсанд перед буквой H в строке

"Hello, World!"
. Он задает «горячую клавишу», нажатие которой эквивалентно щелчку по кнопке.

На кнопке может быть также нарисовано изображение, заданное в разных форматах. Например:

text = "&Неllо, World!\n" +

 "Do you see the icon?\n" +

 "Do you see multiple lines of text?"

icon = File.open("some_icon.gif", "rb") do |file|

 FXGIFIcon.new(app, file.read)

end

FXButton.new(self, text, icon)

В листинге 12.9 иллюстрируется механизм обновления состояния интерфейса, реализованный в FOX:

Листинг 12.9. Обновление состояния интерфейса в FOX

require 'fox16'

include Fox

class TwoButtonUpdateWindow < FXMainWindow

 def initialize(app)

# Сначала инициализируем базовый класс.

super(app, "Update Example", nil, nil,

DECOR_TITLE | DECOR_CLOSE)

# Первая кнопка:

@button_one = FXButton.new(self, "Enable Button 2")

@button_one_enabled = true

# Вторая кнопка:

@button_two = FXButton.new(self, "Enable Button 1")

@button_two.disable

@button_two_enabled = false

# Устанавливаем обработчики сообщений.

@button_one.connect(SEL_COMMAND, method(:onCommand))

@button_two.connect(SEL_COMMAND, method(:onCommand))

@button_one.connect(SEL_UPDATE, method(:onUpdate))

@button_two.connect(SEL_UPDATE, method(:onUpdate))

 end

 def onCommand(sender, sel, ptr)

# Обновить состояние приложения.

@button_one_enabled = !@button_one_enabled

@button_two_enabled = !@button_two_enabled

Поделиться:
Популярные книги

Наследие

Цыпленкова Юлия
Любовные романы:
любовно-фантастические романы
эро литература
7.00
рейтинг книги
Наследие

Просто Мария

Коллектив авторов
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Просто Мария

Антология советского детектива-44. Компиляция. Книги 1-20

Михеев Михаил Петрович
Детективы:
криминальные детективы
5.00
рейтинг книги
Антология советского детектива-44. Компиляция. Книги 1-20

Вор и Книга Демона

Эддингс Дэвид
Фантастика:
героическая фантастика
8.50
рейтинг книги
Вор и Книга Демона

Собрание сочинений. т.3.

Золя Эмиль
Проза:
классическая проза
5.00
рейтинг книги
Собрание сочинений. т.3.

Сёгун

Клавелл Джеймс
Азиатская сага
Приключения:
исторические приключения
прочие приключения
9.41
рейтинг книги
Сёгун

Дюна

Херберт Фрэнк
Фантастика:
научная фантастика
4.38
рейтинг книги
Дюна

Переселенки. Новая жизнь

Богданович Марина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Переселенки. Новая жизнь

Worm

Дж Мак Крей
Фантастика:
боевая фантастика
киберпанк
6.25
рейтинг книги
Worm

Кодекс Охотника. Книга XXL

Винокуров Юрий
41. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXL

Самый лучший демон. Трилогия

Снежинская Катерина
Фантастика:
фэнтези
7.69
рейтинг книги
Самый лучший демон. Трилогия

Теория культуры

Коллектив авторов
Научно-образовательная:
культурология
5.00
рейтинг книги
Теория культуры

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Гримуар темного лорда II

Похвали меня

Кейт Сара
Любовные романы:
зарубежные любовные романы
5.00
рейтинг книги
Похвали меня