Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
main.decorations = DECOR_TITLE | DECOR_CLOSEЗначение
decorationsВ этом простом примере главное окно содержит всего один виджет — экземпляр класса
FXButtonstr = Time.now.strftime("&Today is %B %d, %Y")button = FXButton.new(main, str)Первый аргумент конструктора
FXButtonВ следующей строчке показано, как с помощью метода
connectbutton.connect(SEL_COMMAND) { application.exit }Здесь говорится, что когда кнопка отправляет командное сообщение (то есть сообщение типа
SEL_COMMANDexitВ оставшихся строчках мы наблюдаем «ритуал обручения» объектов
FXAppFXMainWindowapplication.createmain.show(PLACEMENT_SCREEN)application.runЛюбое приложение FXRuby должно включать подобные строки, чтобы создать экземпляр приложения, показать окно
FXMainWindowPLACEMENT_SCREENshowPLACEMENT_CURSORPLACEMENT_OWNERPLACEMENT_MAXIMIZED12.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)endFXButton.new(self, text, icon)В листинге 12.9 иллюстрируется механизм обновления состояния интерфейса, реализованный в FOX:
require 'fox16'include Foxclass 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 endendapplication = FXApp.newmain = TwoButtonUpdateWindow.new(application)application.createmain.show(PLACEMENT_SCREEN)application.runЗдесь в главное окно добавлено две кнопки. Мы снова воспользовались методом
connectSEL_COMMAND@button_one.connect(SEL_COMMAND, method(:onCommand))В этом примере мы встречаем еще один тип сообщения —
SEL_UPDATE
