-->

Программирование на языке Ruby

На нашем литературном портале можно бесплатно читать книгу Программирование на языке Ruby, Фултон Хэл-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Программирование на языке Ruby
Название: Программирование на языке Ruby
Дата добавления: 16 январь 2020
Количество просмотров: 514
Читать онлайн

Программирование на языке Ruby читать книгу онлайн

Программирование на языке Ruby - читать бесплатно онлайн , автор Фултон Хэл
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов. Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии. Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

    nil, 0,

    ICON_BEFORE_TEXT |

    LAYOUT_SIDE_TOP)

  end

 end

end

application = FXApp.new

main = RadioButtonHandlerWindow.new(application)

application.create

main.show(PLACEMENT_SCREEN)

application.run

Группы переключателей — стандартное средство в графических приложениях, предназначенное для выбора одного из взаимно исключающих вариантов. В данном примере варианты представлены массивом из трех строк:

choices = [ "Good", "Better", "Best" ]

В главное окно добавляется объект

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

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

FXDataTarget
. Это специальный объект, играющий роль хранителя какого-то значения. Как и любой другой объект в FOX,
FXDataTarget
может посылать и получать сообщения.

Программа в листинге 12.11 — модифицированный вариант предыдущей, в ней демонстрируется применение получателей данных.

Листинг 12.11. Переключатели в FOX и получатели данных

require 'fox16'

include Fox

class RadioButtonHandlerWindow < FXMainWindow

 def initialize(app)

  # Сначала вызвать инициализатор базового класса.

  super(app, "Radio Button Handler", nil, nil,

   DECOR_TITLE | DECOR_CLOSE)

  choices = [ "Good", "Better", "Best" ]

  default_choice = 0

  @choice = FXDataTarget.new{default_choice)

  group = FXGroupBox.new(self, "Radio Test Group",

   LAYOUT_SIDE_TOP |

   FRAME_GROOVE |

   LAYOUT_FILL_X)

  choices.each_with_index do |choice, index|

   FXRadioButton.new(group, choice,

    @choice, FXDataTarget::ID_OPTION+index,

    ICON_BEFORE_TEXT |

    LAYOUT_SIDE_TOP)

  end

 end

end

application = FXApp.new

main = RadioButtonHandlerWindow.new(application)

application.create

main.show(PLACEMENT_SCREEN)

application.run

В этом примере

@choice
— экземпляр
FXDataTarget
, значением которого является целочисленный индекс выбранного в данный момент положения переключателя. Получатель данных инициализирован нулем, что соответствует элементу «Good» массива
choices
.

При конструировании каждого переключателя задается получатель данных, а идентификатор сообщения от переключателя делается равным

FXDataTarget::ID_OPTION
плюс желаемое значение. Если теперь запустить пример, то вы увидите, что переключатель стал вести себя как положено.

Для добавления в окно списка

FXList
и его инициализации тоже достаточно нескольких строк. Значение
LIST_BROWSESELECT
позволяет выбирать из списка ровно один элемент. В начальный момент выбран самый первый из них. Значение
LIST_SINGLESELECT
допускает выбор не более одного элемента; в этом случае в начальный момент ни один элемент не выбран:

@list = FXList.new(self, nil, 0,

 LIST_BROWSESELECT |

 LAYOUT_FILL_X)

@names = ["Chuck", "Sally", "Franklin", "Schroeder",

 "Woodstock", "Matz", "Lucy"]

@names.each { |name| @list.appendItem(name) }

Отметим, что вместо метода

appendItem
можно использовать оператор вставки в массив, то есть последнюю строку можно было бы записать и так:

@names.each { |name| @list << name }

Весь пример целиком приведен в листинге 12.12. Сообщение обрабатывается в главном окне, в результате выводится выбранный элемент. Если был задан режим

LIST_SINGLE_SELECT
, то важно отличать щелчок, при котором элемент был выбран, от щелчка, который отменил выбор.

Листинг 12.12. Виджет FXList

require 'fox16'

include Fox

class ListHandlerWindow < FXMainWindow

 def initialize(app)

  # Сначала вызвать инициализатор базового класса.

  super(app, "List Handler", nil, nil,

   DECOR_TITLE | DECOR_CLOSE)

  @list = FXList.new(self, nil, 0,

   LIST_BROWSESELECT |

   LAYOUT_FILL_X)

  @list.connect(SEL_COMMAND) do |sender, sel, pos|

Перейти на страницу:
Комментариев (0)
название