Comments
Richard Davies wrote: The UK has a good crop of technology pioneers in cloud computing - for example ElasticHosts, FlexiScale, Flexiant, OnApp - and also some strong government initiatives such as G-Cloud. We will have to see whether this kind of technical leadership converts into swift mass-market adoption or not.
Cloud Expo on Google News

SYS-CON.TV
Cloud Expo & Virtualization 2009 East
PLATINUM SPONSORS:
IBM
Smarter Business Solutions Through Dynamic Infrastructure
IBM
Smarter Insights: How the CIO Becomes a Hero Again
Microsoft
Windows Azure
GOLD SPONSORS:
Appsense
Why VDI?
CA
Maximizing the Business Value of Virtualization in Enterprise and Cloud Computing Environments
ExactTarget
Messaging in the Cloud - Email, SMS and Voice
Freedom OSS
Stairway to the Cloud
Sun
Sun's Incubation Platform: Helping Startups Serve the Enterprise
POWER PANELS:
Cloud Computing & Enterprise IT: Cost & Operational Benefits
How and Why is a Flexible IT Infrastructure the Key To the Future?
Click For 2008 West
Event Webcasts
Supporting Events from .NET Visual Components in PowerBuilder
It’s actually fairly simple

This article seems like it should be the fourth in a series of articles. The first two were on non-visual components in August 2006 and July of 2007. The last one was in August of 2007. In that one, we looked at using the Interop Forms Toolkit to provide a COM wrapper for Visual .NET components - essentially making them ActiveX controls - so that PowerBuilder could use them. That article focused primarily on getting the visual component to display within PowerBuilder and being able to invoke functions on it. What we didn't look at then was allowing PowerBuilder to respond to events on the visual component. That's what we'll look at in this article.

Since Microsoft introduced the Interop Forms Toolkit for Classic Visual Basic users, it implements support for events in a method that Classic Visual Basic supports (using the WithEvents keyword) but PowerBuilder doesn't. In order to make the event visible to PowerBuilder, we need to define an interface with the event declarations and then indicate that the wrapper .NET component implements that interface. As daunting as that sounds, it's actually fairly simple and I'll explain the basics here. If you want more detailed information, you might check out the following article on the www.15seconds.com site. In fact, if you can follow that article, you can expose .NET visual components to PowerBuilder without having to use the Interop Forms Toolkit. The Interop Forms Toolkit is just helpful in automatically creating most of the code for you.

The particular .NET visual component that I'm going to use for this sample is the Office 2007 style ribbon toolbar from Pure Components. I didn't do a whole lot of comparison of the different options out there; I just like the price of this one. When implemented in a PowerBuilder window, it looks like Figure 1.

As mentioned earlier, the first thing you need to do is define an interface that contains the events we want to react to from PowerBuilder:

Imports System.Runtime.InteropServices

<Guid("A66356CF-7408-4bf5-B02E-17158FE30DA3"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IInteropUserControlEvents
<DispId(1)> _
Sub PasteClicked()
<DispId(2)> _
Sub CutClicked()
End Interface

The GUID is any GUID you want to assign. If you don't want to use the GuidGen utility from Microsoft to generate one, there are several online tools you can use to do it such as guidgen.com. PowerBuilder also has a GenerateGUID PowerScript function if you want to write a utility to expose it and create your own GuidGen utility. You can name the interface any name you want as well. Beyond that, the only thing you need to do is create the event prototypes and provide them with a unique DispID.

In the interop user control that the Interop Forms Toolkit generated, we need to make the following three changes.

1. Indicate that the event interface is implemented by the control. We do that by prefixing the class declaration for the control with a ComSourceInterfaces attribute that references the event interface we just created:

<ComSourceInterfaces(GetType(IInteropUserControlEvents))> _
Public Class InteropUserControl

2. Declare the events within the class. We don't have to add any code for them, but there at least has to be a declaration for them since we're implementing that interface:

Public Event PasteClicked()
Public Event CutClicked()

3. Wire the control events to the interop user control events. In order for the events to work, we need to relay the events from the .NET component to the events we've just declared on the wrapper. To do that, we simply perform a RaiseEvent within the event handler for the .NET events:

Private Sub PasteButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PasteButton.Click
RaiseEvent PasteClicked()
End Sub

Private Sub CutButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CutButton.Click
RaiseEvent CutClicked()
End Sub

When you add the interop user control to a PowerBuilder window, the new events will show up in the PowerBuilder script painter, and we can add our own code for them (see Figure 2).

That's it. Now we can not only call methods on the .NET component, but respond to its events as well. I'll upload the sample code to Sybase's CodeXchange site. So, at least until PowerBuilder 12 is available and supports this natively, we do have a method for using visual .NET components from PowerBuilder.

About Bruce Armstrong
Bruce Armstrong is a development lead with Integrated Data Services (www.get-integrated.com). A charter member of TeamSybase, he has been using PowerBuilder since version 1.0.B. He was a contributing author to SYS-CON's PowerBuilder 4.0 Secrets of the Masters and the editor of SAMs' PowerBuilder 9: Advanced Client/Server Development.

In order to post a comment you need to be registered and logged in.

Register | Sign-in

Reader Feedback: Page 1 of 1

Latest Cloud Developer Stories
Can you bring services from the cloud to your customers faster and have them adopt it with ease of use or bring the power of bundled services to the fingertips of your clients without creating new rigid ‘apps stove pipes'? Do you want to prevent your business running away to publ...
OCZ Technology Group, a provider of high-performance solid-state drives (SSDs) for computing devices and systems, on Tuesday announced the Z-Drive R4 CloudServ PCI Express (PCIe) flash storage solution, designed to accelerate cloud computing applications and reduce operating expe...
Many organizations have embraced, or are considering, the benefits of cloud computing – speed, flexibility, increased expertise, shared workload, reduced costs, etc. The benefits are many – but so are the risks. What are the threats to cloud security? Which parties assume respons...
In August 2011, SHI Enterprise Solutions (ESS) division launched the SHI Cloud, offering reliable and cost-effective industrial-grade cloud computing platforms. That same division achieved an 82 percent increase in revenue over 2010.
SoftLayer Technologies on Tuesday announced the immediate worldwide availability of SoftLayer Object Storage, a redundant and highly scalable cloud storage service that allows users to easily store, search and retrieve data across the Internet, with optional CDN connectivity, or ...
Subscribe to the World's Most Powerful Newsletters
Subscribe to Our Rss Feeds & Get Your SYS-CON News Live!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021

SYS-CON Featured Whitepapers
ADS BY GOOGLE

Breaking Cloud Computing News
Salary increases will remain negligible in Japan this year, with employers instead turning to benefi...