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

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

Жанры

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

 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
. Такое сообщение позволяет сделать виджеты независимыми друг от друга и от кода приложения. Как видим, ни одна кнопка не подозревает о существовании другой. Первая кнопка обновляет состояние второй, посылая сообщение обработчикам, которые отвечают за изменение состояния.

12.3.4. Текстовые поля

FOX располагает полезными средствами для ввода текста. В следующем примере демонстрируется применение класса

FXTextField
для редактирования одной строки. Параметры определяют формат текста. Значение
TEXTFIELD_PASSWD
скрывает текст, являющийся паролем,
TEXTFIELD_REAL
позволяет вводить только действительные числа в научной нотации, a
TEXTFIELD_INTEGER
— только целые числа.

simple = FXTextField.new(main, 20, nil, 0,

 JUSTIFY_RIGHT|FRAME_SUNKEN|

 FRAME_THICK|LAYOUT_SIDE_TOP)

simple.text = "Simple Text Field"

passwd = FXTextField.new(main, 20, nil, 0,

 JUSTIFY_RIGHT|TEXTFIELD_PASSWD|

 FRAME_SUNKEN|FRAME_THICK|

 LAYOUT_SIDE_TOP)

passwd.text = "Password"

real = FXTextField.new(main, 20, nil, 0,

 TEXTFIELD_REAL|FRAME_SUNKEN|

 FRAME_THICK|LAYOUT_SIDE_TOP|

 LAYOUT_FIX_HEIGHT, 0, 0, 0, 30)

real.text = "1.0E+3"

int = FXTextField.new(main, 20, nil, 0, TEXTFIELD_INTEGER|

 FRAME_SUNKEN|FRAME_THICK|

 LAYOUT_SIDE_TOP|LAYOUT_FIX_HEIGHT,

 0, 0, 0, 30)

int.text = "1000"

Ниже показан простой способ ввода текста с помощью диалогового окна. В зависимости от выбранного метода можно будет вводить любой текст, только действительные или только целые числа.

puts FXInputDialog.getString("initial text",

 self, "Диалог для ввода текст",

 "Введите текст:", nil)

puts FXInputDialog.getInteger(1200, self,

 "Диалог для ввода целого числа",

 "Введите целое число:", nil)

puts FXInputDialog.getReal(1.03е7, self,

 "Диалог для ввода числа в научной нотации",

 "Введите действительное число:", nil)

Для экономии места мы не станем приводить полный текст приложения. Но, конечно, перед выводом диалогового окна необходимо выполнить обычную инициализацию.

12.3.5. Прочие виджеты

В следующем примере демонстрируется использование меню и полос меню в приложениях. Отметим, что объекты

FXMenuCommand
следуют общей для FOX парадигме сообщение/получатель, с которой мы уже сталкивались при работе с кнопками:

require 'fox16'

include Fox

application = FXApp.new

main = FXMainWindow.new(application, "Simple Menu")

menubar = FXMenuBar.new(main, LAYOUT_SIDE_TOP |

 LAYOUT_FILL_X)

filemenu = FXMenuPane.new(main)

quit_cmd = FXMenuCommand.new(filemenu, "&Quit\tCtl-Q")

quit_cmd.connect(SEL_COMMAND) { application.exit }

FXMenuTitie.new(menubar, "&File", nil, filemenu)

application.create

main.show(PLACEMENT_SCREEN)

application.run

Здесь и

FXMenuBar
, и
FXMenuPane
добавляются непосредственно в главное окно
FXMainWindow
. Благодаря параметрам
LAYOUT_SIDE_TOP
и
LAYOUT_FILL_X
полоса меню размещается в верхней части родительского окна и простирается от левой до правой границы. Текст команды меню
"&Quit\tCtl-Q"
подразумевает, что комбинация клавиш Alt+Q играет роль «горячей клавиши», a Ctrl+Q — клавиши быстрого выбора пункта меню. Последовательное нажатие Alt+F и Alt+Q эквивалентно щелчку по меню File с последующим выбором пункта Quit. Нажатие Ctrl+Q заменяет всю последовательность.

В классе

FXTopWindow
есть метод для свертывания главного окна. Следующие три строчки добавляют в меню File команду, которая свернет окно:

FXMenuCommand.new(filemenu, "&Icon\tCtl-I") do |cmd|

cmd.connect(SEL_COMMAND) { main.minimize } end

На этом примере мы видим еще один прием, полезный при конструировании команды меню. Если вам не нужна ссылка на виджет, представляющий команду меню, то можно просто присоединить блок к вызову

FXMenuCommand.new
и выполнить всю инициализацию виджета внутри блока. Разумеется, этот прием применим к любому встроенному в FOX классу.

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

Первый среди равных

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

Леший

Северский Андрей
1. Леший в "Городе гоблинов"
Фантастика:
рпг
5.00
рейтинг книги
Леший

Сокрушитель

Поселягин Владимир Геннадьевич
3. Уникум
Фантастика:
боевая фантастика
5.60
рейтинг книги
Сокрушитель

Снайпер

Поселягин Владимир Геннадьевич
3. Жнец
Фантастика:
боевая фантастика
попаданцы
5.60
рейтинг книги
Снайпер

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Индульгенция 2. Без права на жизнь

Машуков Тимур
2. Темный сказ
Фантастика:
аниме
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Индульгенция 2. Без права на жизнь

Тихие ночи

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

Идеальный мир для Демонолога 9

Сапфир Олег
9. Демонолог
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Демонолога 9

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Кодекс Крови. Книга ХIV

Борзых М.
14. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIV

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4