Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

В оставшихся строчках мы наблюдаем «ритуал обручения» объектов

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

 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))

  • Читать дальше
  • 1
  • ...
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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