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

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

Жанры

Программирование на языке 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

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

Последний Паладин. Том 13

Саваровский Роман
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 13

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

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

Неудержимый. Книга XXXVII

Боярский Андрей
37. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXXVII

Тень правды

Алмазов Игорь
9. Жизнь Лекаря с нуля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Тень правды

#Бояръ-Аниме. Газлайтер. Том 37

Володин Григорий Григорьевич
37. История Телепата
Фантастика:
фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 37

Первый среди равных. Книга IX

Бор Жорж
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IX

Моя Академия

Листратов Валерий
1. Академка
Фантастика:
попаданцы
сказочная фантастика
фэнтези
4.50
рейтинг книги
Моя Академия

Практик

Листратов Валерий
5. Ушедший Род
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Практик

Телохранитель Генсека. Том 3

Алмазный Петр
3. Медведев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Телохранитель Генсека. Том 3

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Рубежник

Билик Дмитрий Александрович
1. Бедовый
Фантастика:
юмористическая фантастика
городское фэнтези
мистика
5.00
рейтинг книги
Рубежник

Господин из завтра. Тетралогия.

Махров Алексей
Фантастика:
альтернативная история
8.32
рейтинг книги
Господин из завтра. Тетралогия.

Жрец Хаоса. Книга II

Борзых М.
2. Зов пустоты
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Жрец Хаоса. Книга II

Тьма и Хаос

Владимиров Денис
6. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тьма и Хаос