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 Ctl-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 Ctl-Q'
подразумевает, что комбинация клавиш Alt+Q играет роль «горячей клавиши», a Ctrl+Q — клавиши быстрого выбора пункта меню. Последовательное нажатие Alt+F и Alt+Q эквивалентно щелчку по меню File с последующим выбором пункта Quit. Нажатие Ctrl+Q заменяет всю последовательность.
В классе FXTopWindow
есть метод для свертывания главного окна. Следующие три строчки добавляют в меню File команду, которая свернет окно:
FXMenuCommand.new(filemenu, '&Icon Ctl-I') do |cmd|
cmd.connect(SEL_COMMAND) { main.minimize } end
На этом примере мы видим еще один прием, полезный при конструировании команды меню. Если вам не нужна ссылка на виджет, представляющий команду меню, то можно просто присоединить блок к вызову FXMenuCommand.new
и выполнить всю инициализацию виджета внутри блока. Разумеется, этот прием применим к любому встроенному в FOX классу.
В листинге 12.10 демонстрируются переключатели.
require 'fox16'
include Fox
class RadioButtonHandlerWindow < FXMainWindow
def initialize(app)
# Invoke base class initialize first
super(app, 'Radio Button Handler', nil, nil,
DECOR_TITLE | DECOR_CLOSE)
choices = [ 'Good', 'Better', 'Best' ]
group = FXGroupBox.new(self, 'Radio Test Group',
LAYOUT_SIDE_TOP |
FRAME_GROOVE |
LAYOUT_FILL_X)
choices.each do |choice|
FXRadioButton.new(group, choice,
nil, 0,
ICON_BEFORE_TEXT |
LAYOUT_SIDE_TOP)
end
end
end