Creating your own External Components
Please note: This documentation sample is for demonstration purposes only.The documentation content is incomplete and may be out-of date.
Omnis Software Ltd
February 2017
ACKNOWLEGEMENTS
DISCLAIMER
This manual describes how you can create your own external components to integrate into Omnis Studio. You can download sample source code from the Omnis website to help you do this.
For more information about Omnis external components, and to download the latest source files, please go to:
This manual introduces key development topics and expands to form a reference guide for each of the main APIs provided by the Omnis component library:
Chapter 1 Omnis External Components
Introduces the different types of Omnis external components. There is a brief tutorial to get you up-and-running with the Generic visual component plus general notes on building and testing.
Chapter 2 Structures, Messages and Functions
Discusses key structures used by external components and how they are used in conjunction with messages sent to your component. There are also descriptions of general purpose functions you can use as well as memory and resource management functions
Chapter 3 Simple String Management
Introduces the strxxx() class family which facilitates simple management of text strings of up to 255 characters.
Chapter 4 Unicode Character Conversion
Discusses the issues involved in writing Unicode compatible components and also lists data types, utility classes and helper functions you can use to convert character data between various Unicode encodings.
Chapter 5 Managing Icons and Cursors
Introduces the EXTBMPref() class which can be used to manage icons in the Omnis icon datafiles. The EXTCURref() class can be used to assign custom mouse cursors for use with your component.
Chapter 6 Handling Keyboard Input
Discusses the qkey class and other functions, which allows your component to process keyboard input.
Chapter 7 Managing File Data
Discusses the FILE API commands and their wrapper class; EXTfile() which provides your component with cross-platform access to files and folders.
Chapter 8 Omnis Data Collections
This chapter discusses the CRB API and its associated wrapper class; EXTcrb() which is used to manage Omnis data collections. An Omnis data collection is a block of data with a variable number of data items, providing your components with simple, self-extending, random access blocks of memory.
Chapter 9 Omnis List Data
Introduces the EXTqlist() class which gives your component access to Omnis list data. Using EXTqlist(), you can also create, interrogate and modify lists to pass back to Omnis.
Chapter 10 Omnis Field Values
The EXTfldval() class is a generic storage object which gives your component access to Omnis field values. You can get and set EXTfldvals using a variety of data types and also convert between different types.
Chapter 11 Window Management
This chapter discusses the HWND module and its associated window messages, which visual components may be required to process. The HWND module provides many drawing, resizing and status functions.
Chapter 12 Graphics Management
The Graphics Drawing Interface module (GDI) provides many drawing, positioning and formatting functions for use by visual components. This chapter also introduces associated structures, data types and constants.
Chapter 13 Printer Management
The Cross-platform printer interface module (PRI) provides your component with printing and reporting functions which are hardware-independent. This chapter also discusses the associated messages your component may need to process as well as associated structures and constants.
Chapter 14 DAM API Reference
This chapter discusses additional classes, structures and techniques you can use to develop custom non-visual components to access Relational Database Management Systems using a consistent programming interface.
Appendix A Porting External Components to Mach-O
This chapter discusses the issues involved in writing components using Mac OSX 10.5 and Xcode and porting older-style MacOS 9 projects from Code Warrior.