EvoCorp Home    

 

Why Advertise?
These pages provide information for the entire Delphi community, for free. As a result I have implemented sponsored advertising to help subsidize the operation of this site, so if you're feeling adventurous then go ahead, have a click and see where it takes you :)
 
Downloads
Downloads for these samples can be found here.
 
Delphi-Jedi
For more great open source components, controls and headers please visit the Joint Endeavor of Delphi Innovators (Delphi JEDI) site:

 

   

 

Delphi::Advance
Advanced Delphi Development

Welcome to the EvoCorp "Delphi::Advance" development site, the site for advanced Delphi development topics and samples. These pages have been put together to present information and code samples from some of the more interesting projects that I have been involved in.

Most of the samples presented here are based around information readily available on the Internet, so why present those samples here? Put simply, a lot of samples and information available on the Internet isn't as clear as perhaps it could be, contains a lot of C++ code (where not everyone is able to convert code between C++ and Delphi) and contains types, constructs and definitions not defined in the Delphi language.

Other code is simply based around API wrappers which I've built into classes for easy implementation across multiple projects. Either way, the Delphi community as a whole should benefit from this information.

Having said which, please review the licensing information, below, and feel free to investigate any of the following articles/samples presented below.

COM, DCOM and ActiveX Controls
Internet Explorer and Browser Helper Objects
Binary Instrumentation
OpenTools API
Miscellaneous Code and Articles
Other Useful Code
Licensing Information

COM, DCOM and ActiveX Controls
Active Documents
Any information on active document development in Delphi is rare, so here are some classes that present the starting point for active document development (including class registration). This code also demonstrates  automated association of a MIME type with your class.
 
TMouseMonitorThread
Simple thread class for ActiveXForms enabling "live" mouse notification for controls within an active form.

For example: Ordinarily TSpeedButton controls have no idea where the mouse actually is in relation to their position on an ActiveX form; this class provides that notification so that TSpeedButtons can react to a mouse hover.
 

Automated Class Registration
Do you check to ensure that required COM classes have been registered on your client's machine before running your application? This code delivers three routines to check type library and COM class registration, and to enable run-time type library registration.  
 
Internet Explorer and other Internet
Browser Helper Objects (BHO's)
Shell code for BHO libraries (i.e., code that can be used as the starting point for BHO development). Contains registration code, distinguishes between Internet and Windows Explorer and maintains a global BHO list, as the same process may create multiple instances of your BHO.
 
ActiveX Hyperlinks (HLINK.DLL) Header
Header unit containing interface and method definitions from Microsoft's ActiveX Hyperlinks library. Also contains definitions for the ITargetFrame2 and IUrlHistoryNotify interfaces. 
 
Active Internet Documents
This code extends the active document class, presented above, enabling loading and saving of information and implementation of HLINK functionality.
 
Determining whether the host application is Windows Explorer or Internet Explorer.
This code shows how to identify what application is causing your BHO to be loaded. This is useful as Windows Explorer also loads BHO's.
 
Internet Explorer Interface Information
IWebBrowser2
Presents a list of interfaces that IWebBrowser2 supports from within Internet Explorer (i.e., the interfaces available to your BHO).
 
Gnutella and Delphi
A Delphi interface for the Gnutella Network
Have you ever wanted to implement your own Gnutella client? This code shows you just how to do that!
 
 
Instrumentation Assist
"Instrumentation Assist" is the term I use for binary instrumentation and application debugging code.
IridiumX Assist, Generation One
IridiumX Assist is a complete binary instrumentation library for Delphi. Assist provides cross process injection, and both library method and COM interface brokering.
 
Creating your own "Just In Time" debugger.
Can I make my own Dr. Watson?

This sample project shows the starting blocks for creating your own just in time (JIT) application exception (AeDebug) debugger in Delphi.

Writing to read only properties of Delphi classes
This article identifies how you can write to certain "read only" Delphi class properties across unit boundaries. 
 
OpenTools
The OpenTools API enables Delphi developers to create plugins for the Delphi IDE.
This section is currently under construction.
The OpenTools API enables Delphi developers to create their own personal or corporate plugins to enhance the Delphi IDE. 
 
Miscellaneous
Extended MAPI Classes
Classes wrapping some of the more common extended messaging API calls.
 
Interface Interrogator: What interfaces do you support?
Small class that interrogates an interface for a list of supported interfaces.
 
Other Useful Code Samples
Although I developed this site with advanced Delphi development topics in mind, I have made available some code samples that although simple are reasonably "useful".
GetFileNameComponent
Simple function to crack filenames down to their core components. Similar to the VCL functions ExtractFileName and ExtractFilePath.
 
GetSystemError
Simple function to return the current, or convert a specific Win32 HRESULT error code into human-readable format.
 
GetUserGroups
Small unit for enumeration of local and global group membership on NT systems only.
 
GetUserName
Simple function to return the login name of the current user as a string.
 

Licensing

All code is presented under the Mozilla Public License and may be used as you see fit under the terms of this license.

Comments

  Code Comments   I must admit that I haven't documented these samples perhaps as clearly as I should have, and I do apologize in advance for any confusion or time taken to revise anything you download from this site.
  Comments to the Author  

If you have any comments, or require further information regarding any of this code, please don't hesitate to contact me at the following e-mail address:

delphi@evocorp.com

This link should automatically open an e-mail with the subject "Advanced Delphi Development Comments" - please leave the subject text "as-is"; I receive several hundred spam e-mails a day and if your e-mail doesn't contain the keywords "Advanced Delphi Development" in the subject it will automatically be deleted.

 

ActiveX, COM and DCOM are registered trademarks of Microsoft Corporation.
Microsoft Internet Explorer is a registered trademark of Microsoft Corporation.
Microsoft Windows Internet Information Server (IIS) and IIS components copyright Microsoft Corporation.