Ok, also ich habe mich jetzt (aus Langweile) mal mit Ruby unter Linux beschäftigt, die Grundlagen hatte ich innerhalb von nem Tag drauf also bin ich gleich weiter zu GUIs. Ich hab mir unter http://home.arcor.de/scite/index.html alles mal schön durchgelesen und wollte mal mit tk anfangen. Also das ganze Zeug installiert usw, die Beispiele abgetippt usw. usw. naja irgendwann konnt ichs dann (zumindest wenn nebenbei die Tcl-Tk-Doku offen war). Also hab ich zum Einstieg einen Text-Editor programmiert und ihn dann nach und nach erweitert.

Code:
#/usr/bin/ruby
require 'tk'

savedtext = ''
fname = ''
root = TkRoot.new() { title "bText" }

hbar = TkScrollbar.new(root) { orient 'horiz' }
vbar = TkScrollbar.new(root) { orient 'vert' }

editor = TkText.new(root, 'wrap'=>'none').pack('fill'=>'both', 'expand'=>true)
editor.xscrollbar(hbar)
editor.yscrollbar(vbar)

TkGrid.grid(editor, vbar, 'sticky'=>'ns')
TkGrid.grid(hbar,         'sticky'=>'ew')

TkGrid.columnconfigure(root, 0, 'weight'=>1)
TkGrid.rowconfigure(   root, 0, 'weight'=>1)

bar = TkMenu.new()

file = TkMenu.new(bar)
file.add('command', 'label'=>"Open", 'command'=>proc { 
 filename = Tk.getOpenFile()
 if filename != ''
  editor.value = ''
  file = File.new(filename, "r")
  while (line = file.gets)
   editor.insert('end',line)
  end
  file.close
  fname = filename
  savedtext = editor.value
 end
})
file.add('command', 'label'=>"Open (add)", 'command'=>proc { 
 filename = Tk.getOpenFile()
 if filename != ''
  file = File.new(filename, "r")
  while (line = file.gets)
   editor.insert('end',line)
  end
  file.close
  fname = filename
 end
})
file.add('command', 'label'=>"Save", 'command'=>proc { 
 if fname != ''
  if Tk.messageBox(:type=>'yesno', :message=>'Use the last filename? ('+fname+')') == 'yes'
   filename = fname
  else
   filename = Tk.getSaveFile()
  end
 else 
  filename = Tk.getSaveFile()
 end

 if filename != ''
  file = File.new(filename, "w")
  file.print(editor.value)
  file.close
  fname = filename
  savedtext = editor.value
 end
})
file.add('command', 'label'=>"-----")
file.add('command', 'label'=>"Close", 'command'=>proc { 
 if savedtext != editor.value
  if Tk.messageBox(:type=>'yesno', :message=>'Discard Changes?') == 'no'
   
   if fname != ''
    if Tk.messageBox(:type=>'yesno', :message=>'Use the last filename? ('+fname+')') == 'yes'
     filename = fname
    else
     filename = Tk.getSaveFile()
    end
   else 
    filename = Tk.getSaveFile()
   end

   if filename != ''
    file = File.new(filename, "w")
    file.print(editor.value)
    file.close
    fname = filename
    savedtext = editor.value
   end 
  end
 end
 exit
})
bar.add('cascade', 'menu'=>file, 'label'=>"File")

help = TkMenu.new(bar)
help.add('command', 'label'=>"Info", 'command'=>proc { 
 Tk.messageBox(:type=>'ok', :message=>'bText - (c) 2006 by WordsBG (WordsBG@googlemail.com)') 
})
bar.add('cascade', 'menu'=>help, 'label'=>"Help")

root.menu(bar)

Tk.mainloop()
Funktioniert schön (meckert nicht, wenn ich alles unmöglich und total unüblich oder so mache, ich arbeite daran... ). Naja, ich wollte im Grunde nur fragen ob es möglich ist Ereignisse (im speziellen das Close-Ereignis) des Fensters abzufangen um dann ne ähnliche Routine wie beim klick auf "Quit" zu machen. Hab dazu noch nix gefunden...
Ach ja: Bei Quit steckt ja der kopierte Save-Code drin, ist es möglich wie bei Delphi z.B. einfach nen Klick auf den Save-Button auszulösen (z.B. (Delphi) Button1.OnClick(nil); ) oder muss ich es in ne Funktion auslagern?

Hoffe mal hier benutzt überhaupt jemand Ruby ...