Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
puts pos.to_s + " => " + @names[pos] end @names = ["Chuck", "Sally", "Franklin", "Schroeder", "Woodstock", "Matz", "Lucy"] @names.each { |name| @list << name } endendapplication = FXApp.newmain = ListHandlerWindow.new(application)application.createmain.show(PLACEMENT_SCREEN)application.runЕсли вместо
LIST_BROWSESELECTLIST_EXTENDEDSELECT@list = FXList.new(self, nil, 0, LIST_EXTENDEDSELECT | LAYOUT_FILL_X)Обработчик сообщений можно изменить так, чтобы он отображал все выбранные элементы. Чтобы понять, какие элементы списка выбраны, придется перебрать все:
@list.connect(SEL_COMMAND) do |sender, sel, pos| puts "Был щелчок по " + pos.to_s +"=>" + @names[pos] puts "Выбраны следующие элементы:" @list.each do |item| if item.selected? puts " " + item.text end endendАтрибут
numVisibleFXListFXListBoxFXListFXListBoxLIST_EXTENDEDSELECT@list_box = FXListBox.new(self,nil,0,LIST_BROWSESELECT | LAYOUT_FILL_X)@names = ["Chuck", "Sally", "Franklin", "Schroeder", "Woodstock", "Matz", "Lucy"]@names.each { |name| @list_box << name }Диалоговое окно можно определить один раз как подкласс класса
FXDialogBoxПод модальным мы понимаем окно или диалог, который препятствует доступу к другим частям приложения, пока не будет закрыт. Немодальный диалог позволяет передавать фокус другим окнам приложения.
В следующем примере определяется класс модального и немодального диалога. Для модального класса используются предопределенные сообщения
ID_CANCELID_ACCEPTID_HIDEДля отображения немодального диалога применяется уже знакомый метод
FXTopwindow.showFXDialogBox.executeexecutestopModalmodal_btn.connect do dialog = ModalDialogBox.new(self) if dialog.execute(PLACEMENT_OWNER) == 1 puts dialog.text endendНемодальный диалог работает параллельно с другими окнами приложения. Приложение должно запрашивать интересующие его данные у диалога по мере необходимости. Один из способов известить о появлении новых данных - включить в диалог кнопку Apply (Применить), которая будет посылать зависящее от приложения сообщение главному окну. В примере ниже используется также таймер — еще одна интересная особенность FxRuby. Когда таймер срабатывает, главному окну посылается сообщение. Обработчик этого сообщения (показан ниже) запрашивает у диалога новое значение и взводит таймер еще на одну секунду:
def onTimer(sender, sel, ptr) text = @non_modal_dialog.text unless text == @previous @previous = text puts @previous end getApp().addTimeout(1000, method(:onTimer))endВ листинге 12.13 приведен полный текст примера использования модальных и немодальных диалогов.
require 'fox16'include Foxclass NonModalDialogBox < FXDialogBox def initialize(owner) # Сначала вызвать инициализатор базового класса. super(owner, "Test of Dialog Box", DECOR_TITLE|DECOR_BORDER) text_options = JUSTIFY_RIGHT | FRAME_SUNKEN | FRAME_THICK | LAYOUT_SIDE_TOP @text_field = FXTextField.new(self, 20, nil, 0, text_options) @text_field.text = ""
