section id="fx-app-skeleton" xreflabel="Kostra aplikace"
První věcí kterou proberu je základní kostra aplikace. Bez té nemá smysl se věnovat dalšímu. Tak tedy aplikace může být posloupností příkazů jenž provedou konstrukci nezbytných objektů. Ukážeme si to na velmi jednoduché aplikaci. Nejdříve si vše odzkoušíme interaktivně:
# $Id: fxruby-hello.ses,v 1.1 2003/11/03 08:05:10 radek Exp $require 'rubygems'truerequire 'fox16'LoadError: no such file to load -- fox16from /home/radek/lib/rubygems/lib/rubygems/custom_require.rb:31:in `gem_original_require'from /home/radek/lib/rubygems/lib/rubygems/custom_require.rb:31:in `require'from (irb):2include FoxNameError: uninitialized constant Foxfrom (irb):3app = FXApp.newNameError: uninitialized constant FXAppfrom (irb):5win = FXMainWindow.new(app, "Ahoj", nil, nil, DECOR_ALL, 0, 0,88, 21)NameError: uninitialized constant FXMainWindowfrom (irb):6FXButton.new(win, "Konec", nil, app, FXApp::ID_QUIT)NameError: uninitialized constant FXButtonfrom (irb):8app.createNoMethodError: undefined method `create' for nil:NilClassfrom (irb):9win.show(PLACEMENT_SCREEN)NameError: uninitialized constant PLACEMENT_SCREENfrom (irb):10app.runNoMethodError: undefined method `run' for nil:NilClassfrom (irb):11
Po spuštění aplikace příkazem app.run se objeví okno s tlačítkem. Zmáčknutím tlačítka se okno ukončí.
Vyzkoušeli jsme si že FXRuby funguje a nyní si napíšeme jednoduchou aplikaci Ahoj. Aplikace zobrazí ve svém formuláři nápis „Ahoj světe“.
#!/usr/bin/env ruby # $Id: hello.rb,v 1.1 2003/10/31 08:45:16 radek Exp $ # $Source: /home/radek/cvs/ruby-book/example/gui/fxruby/hello.rb,v $ require "fox"include Fox
application = FXApp.new application.normalFont = FXFont.new(application,
"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-2") mainWindow = FXMainWindow.new(application, "Ahoj", nil, nil
, DECOR_ALL, 0, 0, 88, 21) FXLabel.new(mainWindow, "Ahoj světe") application.create mainWindow.show(PLACEMENT_SCREEN) application.run
![]() | Potřebujeme knihovnu |
![]() | Z této knihovny přímo includujeme modul Fox. |
![]() | Protože používáme české znaky je třeba nastavit font v kódování |
![]() | Vytvoříme hlavní okno aplikace. |
![]() | Spustíme smyčku vyhodnocování událostí. |

Zkusme nyní kód zjednodušit.
1 #!/usr/bin/env ruby 2 # $Id: hello3.rb,v 1.1 2005/10/04 08:52:07 radek Exp $ 3 # $Source: /home/radek/cvs/ruby-book/example/gui/fxruby/hello3.rb,v $ 4 require "fox" 5 include Fox 6 7 class MyApp < FXApp 8 def initialize 9 super 10 @normalFont = FXFont.new(app, 11 "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-2") 12 init ARGV 13 end 14 end 15 16 class MyWin < FXMainWindow 17 def initialize(app) 18 super(app, "Ahoj3", nil, nil, DECOR_ALL, 0, 0, 88, 21) 19 FXLabel.new(self, "Ahoj sv�te") 20 end 21 22 def create 23 super 24 show(PLACEMENT_SCREEN) 25 end 26 end 27 28 FXApp.new do |app| 29 win = MyWin.new(app) 30 app.create 31 app.run 32 end 33
Protože při konstrukci složitějších objektů začne být kód méně přehledný, zapouzdříme jednotlivé části do objektů.
1 #!/usr/bin/env ruby
2 # $Id: helloapp.rb,v 1.3 2003/11/10 09:46:43 radek Exp $
3 # $Source: /home/radek/cvs/ruby-book/example/gui/fxruby/helloapp.rb,v $
4 require 'rubygems'
5 require "fox16"
6 include Fox
7
8 class MyApp < FXApp
9 def initialize
10 super("Hello App", "radek")
11 init(ARGV)
12 win = MyWin.new(self)
13 create
14 end
15 end
16
17 class MyWin < FXMainWindow
18 def initialize(app)
19 super(app, "Ahoj", nil, nil, DECOR_ALL, 0, 0, 88, 21)
20 FXButton.new(self, "Konec", nil, app, FXApp::ID_QUIT)
21 end
22
23 def create
24 super
25 show(PLACEMENT_SCREEN)
26 end
27 end
28
29 if __FILE__ == $0
30 MyApp.new.run
31 end
32 