The i-Technology Media!
Register | Log in
   
 
.NET  ·  AJAX  ·  CLOUD  ·  ECLIPSE  ·  FLEX  ·  OPEN WEB  ·  iPHONE  ·  JAVA  ·  LINUX  ·  OPEN SOURCE  ·  ORACLE  ·  PBDJ  ·  SEARCH  ·  SILVERLIGHT  ·  SOA  ·  VIRTUALIZATION  ·  WEB 2.0  ·  WIRELESS  ·  XML
Comments
Google Wave Invitation Giveaway
By Aditya Banerjee
Timo Hirvonen wrote: I would really appreciate an invitation. Been desperately trying to find one :) timo [dot] hirvonen [at] gmail [dot]com
Nov. 27, 2009 11:13 AM EST
Cloud Expo on Google News
Did you read today's front page stories & breaking news?


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

2009 East
GOLD SPONSORS:
CA
Get Your Transactions Under Control: SOA Performance Management
Software AG
Performance Driven Adoption: The Secret to Advancing SOA
Intel
The Evolving SOA Appliance: 3 Game-Changing Innovations
SILVER SPONSOR:
Denodo
Data Mashups: Deliver Your Project Faster with Virtualized Data Services Across Internal & External Sources
POWER PANELS:
The Business Value of Service Orientation
Driving Profitability Through User Experience
Click For 2008 West
Event Webcasts
Live Google News by SYS-CON!
Top Three Links You Must Click On


Features
Supporting Events from .NET Visual Components in PowerBuilder
It’s actually fairly simple

By: Bruce Armstrong
Apr. 30, 2009 06:30 PM

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.

Published Apr. 30, 2009— Reads 1,544
Copyright © 2009 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
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.

Add Your Feedback

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

Register | Sign-in

Reader Feedback: Page 1 of 1

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 Java News
Government of Canada, Government of Yukon and Communities Support Improvements to Recreational Facilities in Yukon
Norstar Securities Trust Announces Third Quarter Results
Canadian Pacific announces industry-leading biodiesel testing underway
Burnsville, MN Mayor Elizabeth Kautz Represents U.S. Mayors at EUROCITIES Meeting
LG Electronics Canada Welcomes Formula 1(TM) Back to Montreal
FDA Approves Agriflu Seasonal Influenza Vaccine
Source Gold Corp. Identifies High Grade Gold and Copper From Initial Sampling Program
Advant-e Corporation Provides Update on Previously Announced Ten-for-One Forward Stock Split and $2 Million Cash Dividend
MHI to Launch New Company Dedicated to Compressor Business; Target Set on Joining Global Top Three
Ecopetrol S.A. Announces Ex Dividend Period

ADVERTISE   |   MAGAZINE SUBSCRIPTIONS   |   FREE BREAKING-NEWSLETTERS!   |   SYS-CON.TV   |   BLOG-N-PLAY!   |   WEBCAST   |   EDUCATION   |   RESEARCH

.NET Developer's Journal - .NETDJ   |   ColdFusion Developer's Journal - CFDJ   |   Eclipse Developer's Journal - EDJ   |   Enterprise Open Source Magazine - EOS
Open Web Developer's Journal - OPENWEB   |   iPhone Developer's Journal - iPHONE   |   Virtualization - Virtualization   |   Java Developer's Journal - JDJ   |   Linux.SYS-CON.com
PowerBuilder Developer's Journal - PBDJ   |   SEO / SEM Journal - SJ   |   SOAWorld Magazine - SOAWM   |   IT Solutions Guide - ITSG   |   Symbian Developer's Journal - SDJ
WebLogic Developer's Journal - WLDJ   |   WebSphere Journal - WJ   |   Wireless Business & Technology - WBT   |   XML-Journal - XMLJ   |   Internet Video - iTV
Flex Developer's Journal - Flex   |   AJAXWorld Magazine - AWM   |   Silverlight Developer's Journal - SLDJ   |   PHP.SYS-CON.com   |   Web 2.0 Journal - WEB2
Apache   |   CMS   |   CRM   |   HP   |   Oracle Journal   |   Perl   |   Python   |   Red Hat   |   Ruby on Rails   |   SAP   |   SaaS

SYS-CON MEDIA:   ABOUT US   |   CONTACT US   |   COMPANY NEWS   |   CAREERS   |   SITE MAP
SYS-CON EVENTS:   |  AJAXWorld Conference & Expo  |  iPhone Developer Summit  |  Cloud Computing Conference & Expo  |  SOA World Conference & Expo  |  Virtualization Conference & Expo
INTERNATIONAL SITES:   India  |  U.K.  |  Canada  |  Germany  |  France  |  Australia  |  Italy  |  Spain  |  Netherlands  |  Brazil  |  Belgium
 Terms of Use & Our Privacy Statement     About Newsfeeds / Video Feeds
Copyright ©1994-2008 SYS-CON Publications, Inc. All Rights Reserved. All marks are trademarks of SYS-CON Media.
Reproduction in whole or in part in any form or medium without express written permission of SYS-CON Publications, Inc. is prohibited.
 
close this window