Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
main.decorations = DECOR_TITLE | DECOR_CLOSE
Значение
decorations
В этом простом примере главное окно содержит всего один виджет — экземпляр класса
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:
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 = [email protected]_one_enabled
@button_two_enabled = [email protected]_two_enabled
end
def onUpdate(sender, sel, ptr)
# Обновить кнопки в зависимости от состояния приложения.
@button_one_enabled ?
@button_one.enable : @button_one.disable
@button_two_enabled ?
@button_two.enable : @button_two.disable
end
end
application = FXApp.new
main = TwoButtonUpdateWindow.new(application)
application.create
main.show(PLACEMENT_SCREEN)
application.run
Здесь в главное окно добавлено две кнопки. Мы снова воспользовались методом
connect
SEL_COMMAND
@button_one.connect(SEL_COMMAND, method(:onCommand))
В этом примере мы встречаем еще один тип сообщения —
SEL_UPDATE