Hi, From: "R. Mark Volkmann" <mark / ociweb.com> Subject: Tk scrolled canvas Date: Sun, 5 Dec 2004 12:17:01 +0900 Message-ID: <05b101c4da78$e39092d0$0200a8c0@MarkDesktop> > I think I should be able to create a scrolled canvas like this, but it > doesn't work. Please define the widget class which you want. ;-) See sample scripts at ext/tk/samples directory of Ruby source archive. If refer to ext/tk/samples/tktextframe.rb, TkScrolledCanvas can be defined as such as the following. --------------------------------------------------------------------- #!/usr/bin/env ruby require 'tk' class TkScrolledCanvas < TkCanvas include TkComposite def initialize_composite(keys={}) @h_scr = TkScrollbar.new(@frame) @v_scr = TkScrollbar.new(@frame) @canvas = TkCanvas.new(@frame) @path = @canvas.path @canvas.xscrollbar(@h_scr) @canvas.yscrollbar(@v_scr) TkGrid.rowconfigure(@frame, 0, :weight=>1, :minsize=>0) TkGrid.columnconfigure(@frame, 0, :weight=>1, :minsize=>0) @canvas.grid(:row=>0, :column=>0, :sticky=>'news') @h_scr.grid(:row=>1, :column=>0, :sticky=>'ew') @v_scr.grid(:row=>0, :column=>1, :sticky=>'ns') delegate('DEFAULT', @canvas) delegate('background', @text, @h_scr, @v_scr) delegate('activeforeground', @h_scr, @v_scr) delegate('troughcolor', @h_scr, @v_scr) delegate('repeatdelay', @h_scr, @v_scr) delegate('repeatinterval', @h_scr, @v_scr) delegate('borderwidth', @frame) delegate('relief', @frame) delegate_alias('canvasborderwidth', 'borderwidth', @canvas) delegate_alias('canvasrelief', 'relief', @canvas) delegate_alias('scrollbarborderwidth', 'borderwidth', @h_scr, @v_scr) delegate_alias('scrollbarrelief', 'relief', @h_scr, @v_scr) configure(keys) unless keys.empty? end end c = TkScrolledCanvas.new(:scrollregion=>[0,0,500,400]).pack TkcRectangle.new(c, [100,100], [300, 200]) Tk.mainloop --------------------------------------------------------------------- -- Hidetoshi NAGAI (nagai / ai.kyutech.ac.jp)