ActiveForm 定义记录类型的属性 ! 300大洋 !急急急(100分)

C

ChinaYA

Unregistered / Unconfirmed
GUEST, unregistred user!
在做一个ActiveFormX 时,想定义一个对外的属性 类型为记录类型:
TMyrecord = Record
field1 : integer;
field2 : Widestring;
field3
wordBool;
end;
但是设计时 ,此类型(在ACTIVEFORM 接口设计器中生成的结构),生成的接口
property testrecord ....
类型却却不是 Tmyrecord 而是 TGUID 如何正确是ActiveForm 能够输出 一个类型为
自定义类型的 属性呢?

谢谢各位大虾 --- 咄咄帮忙!!!!

如果可能希望能给小弟发各例子一阅 ,不胜感激!!snguobin@sohu.com
 
引入类型库
 
to:jsxjd
引入类型库,什么意思? TmyRecord 的定义就是在类型库 Tbl中定义的。
在在ACTIVEFORM 接口设计器中生成的结构 中也能够看到,
但是 :
设计时 ,此类型(在ACTIVEFORM 接口设计器中生成的结构),生成的接口
property testrecord ....
类型却却不是 Tmyrecord 而是 TGUID 如何正确是ActiveForm 能够输出 一个类型为
自定义类型的 属性呢?

 
你在方法的参数中设置这个参数的类型是你自定义的纪录类型了嘛?对了,就应该不会错
 
不能直接输出自己定义 的 结构类型!
是吗?
没人感兴趣么?
 
用memorystream
 
这个是TLB文件的例子,你看看:


unit ActiveFormProj1_TLB;

// ************************************************************************ //
// WARNING
// -------
// The types declared in this file were generated from data read from a
// Type Library. If this type library is explicitly or indirectly (via
// another type library referring to this type library) re-imported, or the
// 'Refresh' command of the Type Library Editor activated while editing the
// Type Library, the contents of this file will be regenerated and all
// manual modifications will be lost.
// ************************************************************************ //

// PASTLWTR : $Revision: 1.130.1.0.1.0.1.6 $
// File generated on 2003-1-16 16:39:25 from Type Library described below.

// ************************************************************************ //
// Type Lib: E:/Program Files/Borland/Delphi6/Projects/ActiveFormProj1.tlb (1)
// LIBID: {FB1A3FC0-0CAF-4F7E-BD66-B25C756F090D}
// LCID: 0
// Helpfile:
// DepndLst:
// (1) v2.0 stdole, (D:/WINNT/System32/STDOLE2.TLB)
// (2) v4.0 StdVCL, (D:/WINNT/System32/STDVCL40.DLL)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL, Variants;


// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
// TypeLibrary Major and minor versions
ActiveFormProj1MajorVersion = 1;
ActiveFormProj1MinorVersion = 0;

LIBID_ActiveFormProj1: TGUID = '{FB1A3FC0-0CAF-4F7E-BD66-B25C756F090D}';

IID_IActiveFormX: TGUID = '{B4144B72-C943-4F73-8BCD-8175CB5ECA77}';
DIID_IActiveFormXEvents: TGUID = '{9D56FBBA-AD6C-4F78-87EA-1B2BACD76612}';
CLASS_ActiveFormX: TGUID = '{7FE9D482-304B-48F1-925D-CF6C430549CE}';

// *********************************************************************//
// Declaration of Enumerations defined in Type Library
// *********************************************************************//
// Constants for enum TxActiveFormBorderStyle
type
TxActiveFormBorderStyle = TOleEnum;
const
afbNone = $00000000;
afbSingle = $00000001;
afbSunken = $00000002;
afbRaised = $00000003;

// Constants for enum TxPrintScale
type
TxPrintScale = TOleEnum;
const
poNone = $00000000;
poProportional = $00000001;
poPrintToFit = $00000002;

// Constants for enum TxMouseButton
type
TxMouseButton = TOleEnum;
const
mbLeft = $00000000;
mbRight = $00000001;
mbMiddle = $00000002;

// Constants for enum TxHelpType
type
TxHelpType = TOleEnum;
const
htKeyword = $00000000;
htContext = $00000001;

type

// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
IActiveFormX = interface;
IActiveFormXDisp = dispinterface;
IActiveFormXEvents = dispinterface;

// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
ActiveFormX = IActiveFormX;


// *********************************************************************//
// Declaration of structures, unions and aliases.
// *********************************************************************//
PPUserType1 = ^IFontDisp
{*}


[red]MyRecType = packed record
i: Integer;
str: WideString;
end;[/red]

// *********************************************************************//
// Interface: IActiveFormX
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {B4144B72-C943-4F73-8BCD-8175CB5ECA77}
// *********************************************************************//
IActiveFormX = interface(IDispatch)
['{B4144B72-C943-4F73-8BCD-8175CB5ECA77}']
function Get_Visible: WordBool
safecall;
procedure Set_Visible(Value: WordBool)
safecall;
function Get_AutoScroll: WordBool
safecall;
procedure Set_AutoScroll(Value: WordBool)
safecall;
function Get_AutoSize: WordBool
safecall;
procedure Set_AutoSize(Value: WordBool)
safecall;
function Get_AxBorderStyle: TxActiveFormBorderStyle
safecall;
procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle)
safecall;
function Get_Caption: WideString
safecall;
procedure Set_Caption(const Value: WideString)
safecall;
function Get_Color: OLE_COLOR
safecall;
procedure Set_Color(Value: OLE_COLOR)
safecall;
function Get_Font: IFontDisp
safecall;
procedure Set_Font(const Value: IFontDisp)
safecall;
procedure _Set_Font(var Value: IFontDisp)
safecall;
function Get_KeyPreview: WordBool
safecall;
procedure Set_KeyPreview(Value: WordBool)
safecall;
function Get_PixelsPerInch: Integer
safecall;
procedure Set_PixelsPerInch(Value: Integer)
safecall;
function Get_PrintScale: TxPrintScale
safecall;
procedure Set_PrintScale(Value: TxPrintScale)
safecall;
function Get_Scaled: WordBool
safecall;
procedure Set_Scaled(Value: WordBool)
safecall;
function Get_Active: WordBool
safecall;
function Get_DropTarget: WordBool
safecall;
procedure Set_DropTarget(Value: WordBool)
safecall;
function Get_HelpFile: WideString
safecall;
procedure Set_HelpFile(const Value: WideString)
safecall;
function Get_DoubleBuffered: WordBool
safecall;
procedure Set_DoubleBuffered(Value: WordBool)
safecall;
function Get_AlignDisabled: WordBool
safecall;
function Get_VisibleDockClientCount: Integer
safecall;
function Get_Enabled: WordBool
safecall;
procedure Set_Enabled(Value: WordBool)
safecall;
function Get_Cursor: Smallint
safecall;
procedure Set_Cursor(Value: Smallint)
safecall;
function Get_HelpType: TxHelpType
safecall;
procedure Set_HelpType(Value: TxHelpType)
safecall;
function Get_HelpKeyword: WideString
safecall;
procedure Set_HelpKeyword(const Value: WideString)
safecall;
function Get_MyRec: MyRecType
safecall;
procedure Set_MyRec(Value: MyRecType)
safecall;
property Visible: WordBool read Get_Visible write Set_Visible;
property AutoScroll: WordBool read Get_AutoScroll write Set_AutoScroll;
property AutoSize: WordBool read Get_AutoSize write Set_AutoSize;
property AxBorderStyle: TxActiveFormBorderStyle read Get_AxBorderStyle write Set_AxBorderStyle;
property Caption: WideString read Get_Caption write Set_Caption;
property Color: OLE_COLOR read Get_Color write Set_Color;
property Font: IFontDisp read Get_Font write Set_Font;
property KeyPreview: WordBool read Get_KeyPreview write Set_KeyPreview;
property PixelsPerInch: Integer read Get_PixelsPerInch write Set_PixelsPerInch;
property PrintScale: TxPrintScale read Get_PrintScale write Set_PrintScale;
property Scaled: WordBool read Get_Scaled write Set_Scaled;
property Active: WordBool read Get_Active;
property DropTarget: WordBool read Get_DropTarget write Set_DropTarget;
property HelpFile: WideString read Get_HelpFile write Set_HelpFile;
property DoubleBuffered: WordBool read Get_DoubleBuffered write Set_DoubleBuffered;
property AlignDisabled: WordBool read Get_AlignDisabled;
property VisibleDockClientCount: Integer read Get_VisibleDockClientCount;
property Enabled: WordBool read Get_Enabled write Set_Enabled;
property Cursor: Smallint read Get_Cursor write Set_Cursor;
property HelpType: TxHelpType read Get_HelpType write Set_HelpType;
property HelpKeyword: WideString read Get_HelpKeyword write Set_HelpKeyword;
[red]property MyRec: MyRecType read Get_MyRec write Set_MyRec;[/red]
end;

// *********************************************************************//
// DispIntf: IActiveFormXDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {B4144B72-C943-4F73-8BCD-8175CB5ECA77}
// *********************************************************************//
IActiveFormXDisp = dispinterface
['{B4144B72-C943-4F73-8BCD-8175CB5ECA77}']
property Visible: WordBool dispid 1;
property AutoScroll: WordBool dispid 2;
property AutoSize: WordBool dispid 3;
property AxBorderStyle: TxActiveFormBorderStyle dispid 4;
property Caption: WideString dispid -518;
property Color: OLE_COLOR dispid -501;
property Font: IFontDisp dispid -512;
property KeyPreview: WordBool dispid 5;
property PixelsPerInch: Integer dispid 6;
property PrintScale: TxPrintScale dispid 7;
property Scaled: WordBool dispid 8;
property Active: WordBool readonly dispid 9;
property DropTarget: WordBool dispid 10;
property HelpFile: WideString dispid 11;
property DoubleBuffered: WordBool dispid 12;
property AlignDisabled: WordBool readonly dispid 13;
property VisibleDockClientCount: Integer readonly dispid 14;
property Enabled: WordBool dispid -514;
property Cursor: Smallint dispid 15;
property HelpType: TxHelpType dispid 16;
property HelpKeyword: WideString dispid 17;
property MyRec: {??MyRecType}OleVariant dispid 18;
end;

// *********************************************************************//
// DispIntf: IActiveFormXEvents
// Flags: (0)
// GUID: {9D56FBBA-AD6C-4F78-87EA-1B2BACD76612}
// *********************************************************************//
IActiveFormXEvents = dispinterface
['{9D56FBBA-AD6C-4F78-87EA-1B2BACD76612}']
procedure OnActivate
dispid 1;
procedure OnClick
dispid 2;
procedure OnCreate
dispid 3;
procedure OnDblClick
dispid 5;
procedure OnDestroy
dispid 6;
procedure OnDeactivate
dispid 7;
procedure OnKeyPress(var Key: Smallint)
dispid 11;
procedure OnPaint
dispid 16;
end;


// *********************************************************************//
// OLE Control Proxy class declaration
// Control Name : TActiveFormX
// Help String : ActiveFormX Control
// Default Interface: IActiveFormX
// Def. Intf. DISP? : No
// Event Interface: IActiveFormXEvents
// TypeFlags : (34) CanCreate Control
// *********************************************************************//
TActiveFormXOnKeyPress = procedure(Sender: TObject
var Key: Smallint) of object;

TActiveFormX = class(TOleControl)
private
FOnActivate: TNotifyEvent;
FOnClick: TNotifyEvent;
FOnCreate: TNotifyEvent;
FOnDblClick: TNotifyEvent;
FOnDestroy: TNotifyEvent;
FOnDeactivate: TNotifyEvent;
FOnKeyPress: TActiveFormXOnKeyPress;
FOnPaint: TNotifyEvent;
FIntf: IActiveFormX;
function GetControlInterface: IActiveFormX;
protected
procedure CreateControl;
procedure InitControlData
override;
function Get_MyRec: MyRecType;
procedure Set_MyRec(Value: MyRecType);
public
property ControlInterface: IActiveFormX read GetControlInterface;
property DefaultInterface: IActiveFormX read GetControlInterface;
property Visible: WordBool index 1 read GetWordBoolProp write SetWordBoolProp;
property Active: WordBool index 9 read GetWordBoolProp;
property DropTarget: WordBool index 10 read GetWordBoolProp write SetWordBoolProp;
property HelpFile: WideString index 11 read GetWideStringProp write SetWideStringProp;
property DoubleBuffered: WordBool index 12 read GetWordBoolProp write SetWordBoolProp;
property AlignDisabled: WordBool index 13 read GetWordBoolProp;
property VisibleDockClientCount: Integer index 14 read GetIntegerProp;
property Enabled: WordBool index -514 read GetWordBoolProp write SetWordBoolProp;
published
property AutoScroll: WordBool index 2 read GetWordBoolProp write SetWordBoolProp stored False;
property AutoSize: WordBool index 3 read GetWordBoolProp write SetWordBoolProp stored False;
property AxBorderStyle: TOleEnum index 4 read GetTOleEnumProp write SetTOleEnumProp stored False;
property Caption: WideString index -518 read GetWideStringProp write SetWideStringProp stored False;
property Color: TColor index -501 read GetTColorProp write SetTColorProp stored False;
property Font: TFont index -512 read GetTFontProp write SetTFontProp stored False;
property KeyPreview: WordBool index 5 read GetWordBoolProp write SetWordBoolProp stored False;
property PixelsPerInch: Integer index 6 read GetIntegerProp write SetIntegerProp stored False;
property PrintScale: TOleEnum index 7 read GetTOleEnumProp write SetTOleEnumProp stored False;
property Scaled: WordBool index 8 read GetWordBoolProp write SetWordBoolProp stored False;
property Cursor: Smallint index 15 read GetSmallintProp write SetSmallintProp stored False;
property HelpType: TOleEnum index 16 read GetTOleEnumProp write SetTOleEnumProp stored False;
property HelpKeyword: WideString index 17 read GetWideStringProp write SetWideStringProp stored False;
property MyRec: MyRecType read Get_MyRec write Set_MyRec stored False;
property OnActivate: TNotifyEvent read FOnActivate write FOnActivate;
property OnClick: TNotifyEvent read FOnClick write FOnClick;
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
property OnDeactivate: TNotifyEvent read FOnDeactivate write FOnDeactivate;
property OnKeyPress: TActiveFormXOnKeyPress read FOnKeyPress write FOnKeyPress;
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
end;

procedure Register;

resourcestring
dtlServerPage = 'Servers';

implementation

uses ComObj;

procedure TActiveFormX.InitControlData;
const
CEventDispIDs: array [0..7] of DWORD = (
$00000001, $00000002, $00000003, $00000005, $00000006, $00000007,
$0000000B, $00000010);
CTFontIDs: array [0..0] of DWORD = (
$FFFFFE00);
CControlData: TControlData2 = (
ClassID: '{7FE9D482-304B-48F1-925D-CF6C430549CE}';
EventIID: '{9D56FBBA-AD6C-4F78-87EA-1B2BACD76612}';
EventCount: 8;
EventDispIDs: @CEventDispIDs;
LicenseKey: nil (*HR:$80040154*);
Flags: $0000001D;
Version: 401;
FontCount: 1;
FontIDs: @CTFontIDs);
begin
ControlData := @CControlData;
TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnActivate) - Cardinal(Self);
end;

procedure TActiveFormX.CreateControl;

procedure DoCreate;
begin
FIntf := IUnknown(OleObject) as IActiveFormX;
end;

begin
if FIntf = nil then DoCreate;
end;

function TActiveFormX.GetControlInterface: IActiveFormX;
begin
CreateControl;
Result := FIntf;
end;

function TActiveFormX.Get_MyRec: MyRecType;
begin
Result := DefaultInterface.MyRec;
end;

procedure TActiveFormX.Set_MyRec(Value: MyRecType);
begin
Exit;
end;

procedure Register;
begin
RegisterComponents('ActiveX',[TActiveFormX]);
end;

end.
 
时间太久了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
936
DelphiTeacher的专栏
D
顶部