CUSTCNTL

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

{*******************************************************}

{ }
{ Turbo Pascal }
{ Custom Control API Interface Unit }
{ }
{ Copyright (c) 1991 Borland International }
{ }
{*******************************************************}

unit CustCntl;

interface

uses WinTypes;

const
ctlTypes = 12;
ctlDescr = 22;
ctlClass = 20;
ctlTitle = 94;

{ CONTROL STYLE DATA STRUCTURE

This data structure is used by the class style dialog function


to set and/or reset various control attributes.}

type
PCtlStyle = ^TCtlStyle;
TCtlStyle = record
wX: Word; { x origin of control }
wY: Word; { y origin of control }
wCx: Word; { width of control }
wCy: Word; { height of control }
wId: Word; { control child id }
dwStyle: LongInt; { control style }
szClass: array[0..ctlClass-1] of Char; { name of control class }
szTitle: array[0..ctlTitle-1] of Char; { control text }
end;

{ CONTROL DATA STRUCTURE

This data structure is returned by the control options function


when inquiring about the capabilities of a particular control.
Each control may contain various types (with predefined style
bits) under one general class.

The width and height fields provide the application with


a suggested size. Use pixels or dialog units for the values
in these fields. If you use pixels, turn on the most significant
bit (MSB). If you use dialog units, turn off the MSB.}

PCtlType = ^TCtlType;
TCtlType = record
wType: Word; { type style }
wWidth: Word; { suggested width }
wHeight: Word; { suggested height }
dwStyle: LongInt; { default style }
szDescr: array[0..ctlDescr-1] of Char; { menu name }
end;

PCtlInfo = ^TCtlInfo;
TCtlInfo = record
wVersion: Word; { control version }
wCtlTypes: Word; { control types }
szClass: array[0..ctlClass-1] of Char; { control class name }
szTitle: array[0..ctlTitle-1] of Char; { control title }
szReserved: array[0..9] of Char; { reserved for future use }
ctType: array[0..ctlTypes] of TCtlType; { control type list }
end;

{ These two function variable types are used by dialog editor }

TStrToId = function (Str: PChar): LongInt;


TIdToStr = function (Id: Word; Str: PChar; StrLen: Word): Word;

{ Resource Workshop extensions follow here }

TFnList = function : THandle;


TFnInfo = function : THandle;
TFnStyle = function(hWindow: HWnd; CntlStyle: THandle;
StrToId: TStrToId; IdToStr: TIdToStr): Bool;
TFnFlags = function(Style: LongInt; Buff: PChar; BuffLength: Word): Word;

{ Resource Workshop has extended the MS Dialog editor's custom control


API in three main areas:

1) More than 1 custom control can be placed in a single DLL.

2) The "Info" data structure has been extended to allow custom controls
to be added to the RW toolbox.

3) The style data structure has been extended to allow custom controls
access to the CTLDATA field. This field contains up to 255 bytes
of binary data. A pointer to this data is passed to the control
in the WM_CREATE message at runtime.
}

{ Two new fields have been added to the TCtlType data structure to
make the TRWCtlType structure:

hToolBit is a handle to a 24X24 bitmap which is added to the


RW toolbox. If this field is 0, no button will be added for this style,
and it will only be selectable via the Custom control dialog. This bitmap
is "owned" by RW, and will be freed by RW when the dialog editor is
unloaded.

hDropCurs is a handle to a cursor which is used by RW when a user selects


the control from the toolbox. If 0, a "cross" cursor will be used.
}

const
ToolBitSize = 24;

type
PRWCtlType = ^TRWCtlType;
TRWCtlType = record
wType: Word; { type style }
wWidth: Word; { suggested width }
wHeight: Word; { suggested height }
dwStyle: LongInt; { default style }
szDescr: array[0..ctlDescr-1] of Char; { menu name }
hToolBit: HBitmap; { toolbox bitmap }
hDropCurs: HCursor; { drag and drop cursor }
end;

{ This structure reflects the RWCTLTYPE data structure }

PRWCtlInfo = ^TRWCtlInfo;
TRWCtlInfo = record
wVersion: Word; { control version }
wCtlTypes: Word; { control types }
szClass: array[0..ctlClass-1] of Char; { control class name }
szTitle: array[0..ctlTitle-1] of Char; { control title }
szReserved: array[0..9] of Char; { reserved for future use }
ctType: array[0..ctlTypes] of TRWCtlType; { control type list }
end;

{ Two new fields have been added to the CTLSTYLE data structure to make
the RWCTLSTYLE data structure:

CtlDataSize is the size of


CtlData, which is an array of bytes passed to the control in the
WM_CREATE message.
}

const
ctlDataLength = 255;

type
PRWCtlStyle = ^TRWCtlStyle;
TRWCtlStyle = record
wX: Word; { x origin of control }
wY: Word; { y origin of control }
wCx: Word; { width of control }
wCy: Word; { height of control }
wId: Word; { control child id }
dwStyle: LongInt; { control style }
szClass: array[0..ctlClass-1] of Char; { name of control class }
szTitle: array[0..ctlTitle-1] of Char; { control text }
CtlDataSize: Byte; { control data size }
CtlData: array[0..ctlDataLength-1] of Char; { control data }
end;

{ In order to use RW's extensions to the custom controls, a custom


control DLL *must* implement the ListClasses function. This function
returns a global memory handle to an initialized CTLCLASSLIST data
structure. All function pointers *must* point to valid functions.
}

PRWCtlClass = ^TRWCtlClass;
TRWCtlClass = record
fnInfo: TFnInfo; { Info function }
fnStyle: TFnStyle; { Style function }
fnFlags: TFnFlags; { Flags function }
szClass: array[0..ctlClass-1] of Char; { Class name }
end;
PCtlClassList = ^TCtlClassList;
TCtlClassList = record
nClasses: Integer; { Number of classes in list }
Classes: array[0..0] of TRWCtlClass; { Class list }
end;

{ The ListClasses function has the formal definition:

function ListClasses(szAppName: PChar; wVersion: Word;


fnLoad: TLoad; fnEdit: TEdit): THandle; export;

where the parameters are

szAppName The class name for the applications main window

wVersion Major and minor version number of the application

fnLoad A procedure variable which, when called, acts like


a LoadResource on the current resource being edited.
This allows controls access to resource from the
resource file they are apart of (for example, access
to bitmaps).

fnEdit Causes a resource editor to be invoked for the given


resource.
}

TLoad = function (szType, szId: PChar): THandle;


TEdit = function (szType, szId: PChar): Bool;

implementation

end.
#

You might also like