[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Help! Can't get the FXRuby clipboard example to work...

Abe Vionas_MailingList

10/5/2004 7:42:00 PM

Essentially, when I select a customers name and click
on the Copy button and then go to notepad and press
CTRL-V (to paste) nothing happens. Anyone have any
ideas?

Here's my code as it stands...

# customer.rb

require 'fox'

include Fox



customer = Struct.new("Customer", :name, :address,
:zip)

$customers = []
$customers << customer.new("Reed Richards", "123
Maple, Central City, NY", 010111)
$customers << customer.new("Sue Storm", "123 Maple,
Anytown, NC", 12345)
$customers << customer.new("Benjamin J. Grimm", "124
Maple, Anytown, NC", 12345)
$customers << customer.new("Johnny Storm", "123 Maple,
Anytown, NC", 12324)

class ClipMainWindow < FXMainWindow
def initialize(anApp)
# Initialize base class first
super(anApp, "Clipboard Example", nil, nil,
DECOR_ALL, 0, 0, 400, 300)

# Horizontal frame contains buttons
buttons = FXHorizontalFrame.new(self,
LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)

# Cut and paste buttons
copyButton = FXButton.new(buttons, "Copy")
pasteButton = FXButton.new(buttons, "Paste")

# Place the list in a sunken frame
sunkenFrame = FXVerticalFrame.new(self,
LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
0, 0, 0, 0, 0, 0, 0, 0)

# Customer list
customerList = FXList.new(sunkenFrame, 6, nil, 0,
LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
$customers.each do |customer|
customerList.appendItem(customer.name, nil,
customer)
end
end

def create
super
show(PLACEMENT_SCREEN)
end
end

if __FILE__ == $0
FXApp.new("ClipboardExample", "FXRuby") do |theApp|
ClipMainWindow.new(theApp)
theApp.create
theApp.run
end
end

# User clicks Copy
copyButton.connect(SEL_COMMAND) do
customer =
customerList.getItemData(customerList.currentItem)
types = [ FXWindow.stringType ]
if acquireClipboard()
@clippedCustomer = customer
end
end

#Handle clipboard request
copyButton.connect(SEL_CLIPBOARD_REQUEST) do
setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
Fox.fxencodeStringData(@clippedCustomer.to_s))
end




__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - 100MB free storage!
http://promotions.yahoo.co...


4 Answers

Richard Lyman

10/5/2004 8:16:00 PM

0

First off - the last 15 or so lines won't be 'processed' until after
the application terminates.

Once it hits 'theApp.run' the main program hangs and Fox takes over,
so you need to have everything setup before that.

-Rich


On Wed, 6 Oct 2004 04:42:01 +0900, Abe Vionas_MailingList
<mailinglist_abe@yahoo.com> wrote:
> Essentially, when I select a customers name and click
> on the Copy button and then go to notepad and press
> CTRL-V (to paste) nothing happens. Anyone have any
> ideas?
>
> Here's my code as it stands...
>
> # customer.rb
>
> require 'fox'
>
> include Fox
>
> customer = Struct.new("Customer", :name, :address,
> :zip)
>
> $customers = []
> $customers << customer.new("Reed Richards", "123
> Maple, Central City, NY", 010111)
> $customers << customer.new("Sue Storm", "123 Maple,
> Anytown, NC", 12345)
> $customers << customer.new("Benjamin J. Grimm", "124
> Maple, Anytown, NC", 12345)
> $customers << customer.new("Johnny Storm", "123 Maple,
> Anytown, NC", 12324)
>
> class ClipMainWindow < FXMainWindow
> def initialize(anApp)
> # Initialize base class first
> super(anApp, "Clipboard Example", nil, nil,
> DECOR_ALL, 0, 0, 400, 300)
>
> # Horizontal frame contains buttons
> buttons = FXHorizontalFrame.new(self,
> LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
>
> # Cut and paste buttons
> copyButton = FXButton.new(buttons, "Copy")
> pasteButton = FXButton.new(buttons, "Paste")
>
> # Place the list in a sunken frame
> sunkenFrame = FXVerticalFrame.new(self,
> LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
> 0, 0, 0, 0, 0, 0, 0, 0)
>
> # Customer list
> customerList = FXList.new(sunkenFrame, 6, nil, 0,
> LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
> $customers.each do |customer|
> customerList.appendItem(customer.name, nil,
> customer)
> end
> end
>
> def create
> super
> show(PLACEMENT_SCREEN)
> end
> end
>
> if __FILE__ == $0
> FXApp.new("ClipboardExample", "FXRuby") do |theApp|
> ClipMainWindow.new(theApp)
> theApp.create
> theApp.run
> end
> end
>
> # User clicks Copy
> copyButton.connect(SEL_COMMAND) do
> customer =
> customerList.getItemData(customerList.currentItem)
> types = [ FXWindow.stringType ]
> if acquireClipboard()
> @clippedCustomer = customer
> end
> end
>
> #Handle clipboard request
> copyButton.connect(SEL_CLIPBOARD_REQUEST) do
> setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
> Fox.fxencodeStringData(@clippedCustomer.to_s))
> end
>
>
> __________________________________
> Do you Yahoo!?
> New and Improved Yahoo! Mail - 100MB free storage!
> http://promotions.yahoo.co...
>
>


Kevin Pratt

10/5/2004 8:17:00 PM

0

There were several mistakes in your code I corrected them and below is
the corrected program

Hope this helps.

# customer.rb
require 'fox'
include Fox

customer = Struct.new("Customer", :name, :address,:zip)

$customers = []
$customers << customer.new("Reed Richards", "123
Maple, Central City, NY", 010111)
$customers << customer.new("Sue Storm", "123 Maple,
Anytown, NC", 12345)
$customers << customer.new("Benjamin J. Grimm", "124
Maple, Anytown, NC", 12345)
$customers << customer.new("Johnny Storm", "123 Maple,
Anytown, NC", 12324)

class ClipMainWindow < FXMainWindow
def initialize(anApp)
# Initialize base class first
super(anApp, "Clipboard Example", nil, nil,DECOR_ALL, 0, 0, 400, 300)
#declare member variable clippedCustomer
@clippedCustomer=""
# Horizontal frame contains buttons
buttons = FXHorizontalFrame.new(self,
LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)

# Cut and paste buttons
copyButton = FXButton.new(buttons, "Copy")
pasteButton = FXButton.new(buttons, "Paste")

# Place the list in a sunken frame
sunkenFrame = FXVerticalFrame.new(self,
LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
0, 0, 0, 0, 0, 0, 0, 0)

# Customer list
customerList = FXList.new(sunkenFrame, 6, nil, 0,
LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
$customers.each do |customer|
customerList.appendItem(customer.name, nil,customer)
end
#Moved this code from the bottome of the file as in needs to be in the
initalization of the window.
#User clicks Copy
copyButton.connect(SEL_COMMAND) do
customer = customerList.getItemData(customerList.currentItem)
types = [ FXWindow.stringType ]
if acquireClipboard(types)
@clippedCustomer = customer
end
end

#moved this code as well.
#Must connect the the _Window_ SEL_CLIPBOARD_REQUREST not the buttons
#Handle clipboard request
self.connect(SEL_CLIPBOARD_REQUEST) do
#setDNDData was misspelled.
setDNDData(FROM_CLIPBOARD, FXWindow.stringType,
Fox.fxencodeStringData(@clippedCustomer.to_s))
end
end
def create
super
show(PLACEMENT_SCREEN)
end
end

if __FILE__ == $0
FXApp.new("ClipboardExample", "FXRuby") do |theApp|
ClipMainWindow.new(theApp)
theApp.create
theApp.run
end
end


Richard Lyman

10/5/2004 8:18:00 PM

0

Sorry for the extra reply...

I am also fairly certain that DND only works between Fox
applications... if I'm wrong, someone please correct me.

-Rich


On Tue, 5 Oct 2004 14:15:56 -0600, Richard Lyman <lymans@gmail.com> wrote:
> First off - the last 15 or so lines won't be 'processed' until after
> the application terminates.
>
> Once it hits 'theApp.run' the main program hangs and Fox takes over,
> so you need to have everything setup before that.
>
> -Rich
>
>
>
>
> On Wed, 6 Oct 2004 04:42:01 +0900, Abe Vionas_MailingList
> <mailinglist_abe@yahoo.com> wrote:
> > Essentially, when I select a customers name and click
> > on the Copy button and then go to notepad and press
> > CTRL-V (to paste) nothing happens. Anyone have any
> > ideas?
> >
> > Here's my code as it stands...
> >
> > # customer.rb
> >
> > require 'fox'
> >
> > include Fox
> >
> > customer = Struct.new("Customer", :name, :address,
> > :zip)
> >
> > $customers = []
> > $customers << customer.new("Reed Richards", "123
> > Maple, Central City, NY", 010111)
> > $customers << customer.new("Sue Storm", "123 Maple,
> > Anytown, NC", 12345)
> > $customers << customer.new("Benjamin J. Grimm", "124
> > Maple, Anytown, NC", 12345)
> > $customers << customer.new("Johnny Storm", "123 Maple,
> > Anytown, NC", 12324)
> >
> > class ClipMainWindow < FXMainWindow
> > def initialize(anApp)
> > # Initialize base class first
> > super(anApp, "Clipboard Example", nil, nil,
> > DECOR_ALL, 0, 0, 400, 300)
> >
> > # Horizontal frame contains buttons
> > buttons = FXHorizontalFrame.new(self,
> > LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
> >
> > # Cut and paste buttons
> > copyButton = FXButton.new(buttons, "Copy")
> > pasteButton = FXButton.new(buttons, "Paste")
> >
> > # Place the list in a sunken frame
> > sunkenFrame = FXVerticalFrame.new(self,
> > LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
> > 0, 0, 0, 0, 0, 0, 0, 0)
> >
> > # Customer list
> > customerList = FXList.new(sunkenFrame, 6, nil, 0,
> > LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
> > $customers.each do |customer|
> > customerList.appendItem(customer.name, nil,
> > customer)
> > end
> > end
> >
> > def create
> > super
> > show(PLACEMENT_SCREEN)
> > end
> > end
> >
> > if __FILE__ == $0
> > FXApp.new("ClipboardExample", "FXRuby") do |theApp|
> > ClipMainWindow.new(theApp)
> > theApp.create
> > theApp.run
> > end
> > end
> >
> > # User clicks Copy
> > copyButton.connect(SEL_COMMAND) do
> > customer =
> > customerList.getItemData(customerList.currentItem)
> > types = [ FXWindow.stringType ]
> > if acquireClipboard()
> > @clippedCustomer = customer
> > end
> > end
> >
> > #Handle clipboard request
> > copyButton.connect(SEL_CLIPBOARD_REQUEST) do
> > setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
> > Fox.fxencodeStringData(@clippedCustomer.to_s))
> > end
> >
> >
> > __________________________________
> > Do you Yahoo!?
> > New and Improved Yahoo! Mail - 100MB free storage!
> > http://promotions.yahoo.co...
> >
> >
>


Kevin Pratt

10/5/2004 8:27:00 PM

0

Nope setDNDData works between other applications - can't vouch for the
other DND methods tho.

I tested the corrected code by copying and pasting the information
into an open gaim window running on windows xp.

kevin.


On Wed, 6 Oct 2004 05:17:53 +0900, Richard Lyman <lymans@gmail.com> wrote:
> Sorry for the extra reply...
>
> I am also fairly certain that DND only works between Fox
> applications... if I'm wrong, someone please correct me.
>
> -Rich
>
>
>
>
> On Tue, 5 Oct 2004 14:15:56 -0600, Richard Lyman <lymans@gmail.com> wrote:
> > First off - the last 15 or so lines won't be 'processed' until after
> > the application terminates.
> >
> > Once it hits 'theApp.run' the main program hangs and Fox takes over,
> > so you need to have everything setup before that.
> >
> > -Rich
> >
> >
> >
> >
> > On Wed, 6 Oct 2004 04:42:01 +0900, Abe Vionas_MailingList
> > <mailinglist_abe@yahoo.com> wrote:
> > > Essentially, when I select a customers name and click
> > > on the Copy button and then go to notepad and press
> > > CTRL-V (to paste) nothing happens. Anyone have any
> > > ideas?
> > >
> > > Here's my code as it stands...
> > >
> > > # customer.rb
> > >
> > > require 'fox'
> > >
> > > include Fox
> > >
> > > customer = Struct.new("Customer", :name, :address,
> > > :zip)
> > >
> > > $customers = []
> > > $customers << customer.new("Reed Richards", "123
> > > Maple, Central City, NY", 010111)
> > > $customers << customer.new("Sue Storm", "123 Maple,
> > > Anytown, NC", 12345)
> > > $customers << customer.new("Benjamin J. Grimm", "124
> > > Maple, Anytown, NC", 12345)
> > > $customers << customer.new("Johnny Storm", "123 Maple,
> > > Anytown, NC", 12324)
> > >
> > > class ClipMainWindow < FXMainWindow
> > > def initialize(anApp)
> > > # Initialize base class first
> > > super(anApp, "Clipboard Example", nil, nil,
> > > DECOR_ALL, 0, 0, 400, 300)
> > >
> > > # Horizontal frame contains buttons
> > > buttons = FXHorizontalFrame.new(self,
> > > LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
> > >
> > > # Cut and paste buttons
> > > copyButton = FXButton.new(buttons, "Copy")
> > > pasteButton = FXButton.new(buttons, "Paste")
> > >
> > > # Place the list in a sunken frame
> > > sunkenFrame = FXVerticalFrame.new(self,
> > > LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
> > > 0, 0, 0, 0, 0, 0, 0, 0)
> > >
> > > # Customer list
> > > customerList = FXList.new(sunkenFrame, 6, nil, 0,
> > > LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
> > > $customers.each do |customer|
> > > customerList.appendItem(customer.name, nil,
> > > customer)
> > > end
> > > end
> > >
> > > def create
> > > super
> > > show(PLACEMENT_SCREEN)
> > > end
> > > end
> > >
> > > if __FILE__ == $0
> > > FXApp.new("ClipboardExample", "FXRuby") do |theApp|
> > > ClipMainWindow.new(theApp)
> > > theApp.create
> > > theApp.run
> > > end
> > > end
> > >
> > > # User clicks Copy
> > > copyButton.connect(SEL_COMMAND) do
> > > customer =
> > > customerList.getItemData(customerList.currentItem)
> > > types = [ FXWindow.stringType ]
> > > if acquireClipboard()
> > > @clippedCustomer = customer
> > > end
> > > end
> > >
> > > #Handle clipboard request
> > > copyButton.connect(SEL_CLIPBOARD_REQUEST) do
> > > setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
> > > Fox.fxencodeStringData(@clippedCustomer.to_s))
> > > end
> > >
> > >
> > > __________________________________
> > > Do you Yahoo!?
> > > New and Improved Yahoo! Mail - 100MB free storage!
> > > http://promotions.yahoo.co...
> > >
> > >
> >
>
>