接口继承 |
尚未結案
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
各位大大好:
我有个Activex控件,在delphi的封装文件里:
CMapXLayer = dispinterface ... CoLayer = class class function Create: CMapXLayer; end;一、我定义了个类 type TMyLayer = class(CoLayer) public constructor create ; destructor destroy; override; end;当我创建TMyLayer对象的时候,报类没有注册 。 二、能不能从CMapXLayer接口派生? Mylayer=class(TOleControl, cmapxLayer) end; 报错:需要interface类型 该怎么作呢? 谢谢! |
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
When you import an ActiveX control, Delphi should create a warpper component for you. For example, ChartFX is an OCX and the wrapper is TChartfx. I think you should inherit from the wrapper component (i.e. Txxx in general). BTW, TMylayer=class(TSomething, cmapxLayer) means you inherit from TSomething and it will implmenet interface cmpxLayer. Interfaces CANNOT be inhertied, they are implemented. In the above example, you need to write the codes to implement cmapxLayer yourself.
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
Thanks you william.
type TForm1=class(TForm) Panel1: TPanel; Button1: TButton; procedure Button1Click(Sender: TObject); end; TMap1 = class(TMap) private { Private declarations } name:String; public { Public declarations } procedure getname; end;它工作很好! 封装文件中接口?CMapXlayer如下: // *********************************************************************// // DispIntf: CMapXLayer // Flags: (4112) Hidden Dispatchable // GUID: {77306D48-5C82-11CF-8795-00AA00B7EF73} // *********************************************************************// CMapXLayer = dispinterface ['{77306D48-5C82-11CF-8795-00AA00B7EF73}'] function FeatureKeyFromFeatureName(const strKeyValue: WideString): WideString; dispid 48; 。。。 我想用一个类封装(实现)该接口,并添加相关的属性,遇到两个问题: 1. TMyLayer=class(TObject ,CMapXLayer)--报错:需要接口类型 public name:String; procedure showname; end; 2.实现该接口,需要将其实现重新写一遍吗? |
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
I assume you want to extend the control by inheriting from it, then you should find out the Txxx class. On the other hand, if you want to create your own control supporting the interface, you should not use the dispinterface, you should use the interface one. So perhaps you should take a look at the file MapXLib_TLB.pas? I think this file is created automatically by Delphi after importing the ActiveX control.
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
unit MapXLib_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.11.1.63 $ // File generated on 7/29/99 11:02:07 AM from Type Library described below. // ************************************************************************ // // Type Lib: C:\PROGRAM FILES\COMMON FILES\MAPINFO SHARED\MAPX COMMON\MAPX40.OCX // IID\LCID: {9D6ED199-5910-11D2-98A6-00A0C9742CCA}\0 // Helpfile: C:\PROGRAM FILES\COMMON FILES\MAPINFO SHARED\MAPX COMMON\MapX40.hlp // HelpString: MapInfo MapX V4 // Version: 4.0 // ************************************************************************ // interface uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL; // *********************************************************************// // 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 LIBID_MapXLib: TGUID = '{9D6ED199-5910-11D2-98A6-00A0C9742CCA}'; IID_IRowCursor: TGUID = '{9F6AA700-D188-11CD-AD48-00AA003C9CB6}'; DIID_CMapX: TGUID = '{9D6ED197-5910-11D2-98A6-00A0C9742CCA}'; DIID_CMapXEvents: TGUID = '{9D6ED198-5910-11D2-98A6-00A0C9742CCA}'; CLASS_Map: TGUID = '{9D6ED188-5910-11D2-98A6-00A0C9742CCA}'; DIID_CMapXLayers: TGUID = '{77306D42-5C82-11CF-8795-00AA00B7EF73}'; CLASS_Layers: TGUID = '{77306D43-5C82-11CF-8795-00AA00B7EF73}'; DIID_CMapXLayerInfo: TGUID = '{30D28170-FE33-11D2-9878-0060089F59A5}'; CLASS_LayerInfo: TGUID = '{30D28171-FE33-11D2-9878-0060089F59A5}'; DIID_CMapXLayer: TGUID = '{77306D48-5C82-11CF-8795-00AA00B7EF73}'; CLASS_Layer: TGUID = '{77306D49-5C82-11CF-8795-00AA00B7EF73}'; // *********************************************************************// // Declaration of Enumerations defined in Type Library // // *********************************************************************// // ToolConstants constants type ToolConstants = TOleEnum; 。。。删除。。 type // *********************************************************************// // Forward declaration of interfaces defined in Type Library // // *********************************************************************// IRowCursor = interface; CMapXDatasets = dispinterface; CMapX = dispinterface; CMapXEvents = dispinterface; CMapXLayers = dispinterface; CMapXLayerInfo = dispinterface; CMapXLayer = dispinterface; CMapXField = dispinterface; 。。。 // *********************************************************************// // Declaration of CoClasses defined in Type Library // // (NOTE: Here we map each CoClass to its Default Interface) // // *********************************************************************// Datasets = CMapXDatasets; Map = CMapX; Layers = CMapXLayers; LayerInfo = CMapXLayerInfo; Layer = CMapXLayer; Field = CMapXField; Dataset = CMapXDataset; Themes = CMapXThemes; Theme = CMapXTheme; Legend = CMapXLegend; Collection = CMapXCollection;。。。 // *********************************************************************// // Declaration of structures, unions and aliases. // // *********************************************************************// PSingle1 = ^Single; {*} PDouble1 = ^Double; {*} POleVariant1 = ^OleVariant; {*} PWideString1 = ^WideString; {*} PWordBool1 = ^WordBool; {*} PSmallint1 = ^Smallint; {*} // *********************************************************************// // Interface: IRowCursor // Flags: (16) Hidden // GUID: {9F6AA700-D188-11CD-AD48-00AA003C9CB6} // *********************************************************************// IRowCursor = interface(IUnknown) ['{9F6AA700-D188-11CD-AD48-00AA003C9CB6}'] end; // *********************************************************************// // DispIntf: CMapX // Flags: (4112) Hidden Dispatchable // GUID: {9D6ED197-5910-11D2-98A6-00A0C9742CCA} // *********************************************************************// CMapX = dispinterface ['{9D6ED197-5910-11D2-98A6-00A0C9742CCA}'] property DataSetGeoField: WideString dispid 1; property Version: WideString readonly dispid 2; property hWnd: OLE_HANDLE readonly dispid -515; property Annotations: CMapXAnnotations readonly dispid 3; property Dataset: IRowCursor dispid 4; property Layers: CMapXLayers readonly dispid 5; property AutoRedraw: WordBool dispid 6; property Zoom: Double dispid 7; property CenterX: Double dispid 8; property CenterY: Double dispid 9; property Geoset: WideString dispid 10; property GeoSetWidth: Double readonly dispid 11; property MapPaperHeight: Double readonly dispid 12; property MapPaperWidth: Double readonly dispid 13; property MaxSearchTime: Smallint dispid 14; property PaperUnit: PaperUnitConstants dispid 15; property PreferCompactLegends: WordBool dispid 16; property DefaultStyle: CMapXStyle dispid 17; property GeoDictionary: WideString dispid 18; property DataSetTheme: ThemeTypeConstants dispid 19; property CurrentTool: ToolConstants dispid 20; property MousePointer: CursorConstants dispid 21; property Datasets: CMapXDatasets readonly dispid 22; property Title: CMapXTitle readonly dispid 23; property TitleText: WideString dispid 24; property MapUnit: MapUnitConstants dispid 25; property Rotation: Double dispid 26; property Geosets: CMapXGeosets readonly dispid 27; property AreaUnit: AreaUnitConstants dispid 28; property Bounds: CMapXRectangle dispid 29; property DisplayCoordSys: CMapXCoordSys dispid 30; property NumericCoordSys: CMapXCoordSys dispid 31; property ExportSelection: WordBool dispid 32; property SelectionStyle: CMapXStyle dispid 33; property FeatureFactory: CMapXFeatureFactory readonly dispid 49; property DefaultConversionResolution: Integer dispid 50; property BackColor: OLE_COLOR dispid -501; property MousewheelSupport: MousewheelSupportConstants dispid 51; property MatchNumericFields: WordBool dispid 52; property MapScreenWidth: Single readonly dispid 53; property MapScreenHeight: Single readonly dispid 54; property RedrawInterval: Integer dispid 55; property SearchPath: WideString dispid 56; property MatchThreshold: Smallint dispid 57; property WaitCursorEnabled: WordBool dispid 58; property PanAnimationLayer: WordBool dispid 60; property InfotipPopupDelay: Integer dispid 61; property MouseIcon: WideString dispid 62; property InfotipSupport: WordBool dispid 63; procedure ConvertCoord(var ScreenX: Single; var ScreenY: Single; var MapX: Double; var MapY: Double; Direction: Smallint); dispid 34; procedure ZoomTo(Zoom: Double; X: Double; Y: Double); dispid 35; procedure CreateCustomTool(ToolNumber: Smallint; Type_: Smallint; Cursor: OleVariant; ShiftCursor: OleVariant; CtrlCursor: OleVariant; bInfoTips: OleVariant); dispid 36; function Distance(X1: Double; Y1: Double; X2: Double; Y2: Double): Double; dispid 37; procedure Refresh; dispid -550; procedure PrintMap(hDC: OLE_HANDLE; X: Integer; Y: Integer; W: Integer; H: Integer); dispid 38; procedure ExportMap(const Destination: WideString; Format: Smallint; Width: OleVariant; Height: OleVariant); dispid 39; procedure PropertyPage; dispid 40; procedure ConvertCoordV(var ScreenX: OleVariant; var ScreenY: OleVariant; var MapX: OleVariant; var MapY: OleVariant; Direction: Smallint); dispid 41; procedure SetSize(Width: Integer; Height: Integer); dispid 42; function IsPointVisible(X: Double; Y: Double): WordBool; dispid 43; function ClipLine(var X1: Double; var Y1: Double; var X2: Double; var Y2: Double): WordBool; dispid 44; function ClipLineV(var X1: OleVariant; var Y1: OleVariant; var X2: OleVariant; var Y2: OleVariant): WordBool; dispid 45; function GetControl: Integer; dispid 46; procedure SaveMapAsGeoset(const Name: WideString; const Filespec: WideString); dispid 47; // function ExportMapToMTF(const Destination: WideString; sMapDataCSys: Smallint; // lMapDataCSysPrecision: Integer; bCompressMapData: WordBool): WordBool; dispid 48; // procedure Die(const Password: WideString); dispid 59; procedure Pan(ScreenX: Single; ScreenY: Single); dispid 64; procedure AboutBox; dispid -552; end; // *********************************************************************// // DispIntf: CMapXEvents // Flags: (4096) Dispatchable // GUID: {9D6ED198-5910-11D2-98A6-00A0C9742CCA} // *********************************************************************// CMapXEvents = dispinterface ['{9D6ED198-5910-11D2-98A6-00A0C9742CCA}'] procedure Click; dispid -600; procedure DblClick; dispid -601; procedure Error(Number: Smallint; var Description: WideString; Scode: Integer; const Source: WideString; const HelpFile: WideString; HelpContext: Integer; var CancelDisplay: WordBool); dispid -608; procedure KeyDown(var KeyCode: Smallint; Shift: Smallint); dispid -602; procedure KeyPress(var KeyAscii: Smallint); dispid -603; procedure KeyUp(var KeyCode: Smallint; Shift: Smallint); dispid -604; procedure MouseMove(Button: Smallint; Shift: Smallint; X: Single; Y: Single); dispid -606; procedure MouseDown(Button: Smallint; Shift: Smallint; X: Single; Y: Single); dispid -605; procedure MouseUp(Button: Smallint; Shift: Smallint; X: Single; Y: Single); dispid -607; procedure SelectionChanged; dispid 1; procedure ResolveDataBind(Flag: Smallint; NumMatches: Smallint; Matches: OleVariant; var Choice: Smallint; var Cancel: WordBool); dispid 2; procedure ToolUsed(ToolNum: Smallint; X1: Double; Y1: Double; X2: Double; Y2: Double; Distance: Double; Shift: WordBool; Ctrl: WordBool; var EnableDefault: WordBool); dispid 3; procedure RequestData(const DataSetName: WideString; Row: Integer; Field: Smallint; var Value: OleVariant; var Done: WordBool); dispid 4; procedure DataMismatch(const DataSetName: WideString; Row: Integer; var GeoFieldValue: WideString); dispid 5; procedure MapViewChanged; dispid 6; procedure AnnotationAdded(const Annotation: IDispatch); dispid 7; procedure AnnotationChanged(ChangeType: Smallint; const Annotation: IDispatch; var EnableDefault: WordBool); dispid 8; procedure ThemeModifyRequested(const Theme: IDispatch); dispid 9; procedure DrawUserLayer(const Layer: IDispatch; hOutputDC: OLE_HANDLE; hAttributeDC: OLE_HANDLE; const RectFull: IDispatch; const RectInvalid: IDispatch); dispid 10; procedure PolyToolUsed(ToolNum: Smallint; Flags: Integer; const Points: IDispatch; bShift: WordBool; bCtrl: WordBool; var EnableDefault: WordBool); dispid 11; procedure MouseWheel(Flags: Integer; zDelta: Smallint; var X: Single; var Y: Single; var EnableDefault: WordBool); dispid 12; procedure MapInitialized; dispid 13; procedure ResolveDataBindEx(Flag: Smallint; NumMatches: Smallint; Matches: OleVariant; var Choice: Smallint; var Cancel: WordBool); dispid 14; procedure MapDraw(Flag: Smallint); dispid 15; end; // *********************************************************************// // DispIntf: CMapXLayers // Flags: (4112) Hidden Dispatchable // GUID: {77306D42-5C82-11CF-8795-00AA00B7EF73} // *********************************************************************// CMapXLayers = dispinterface ['{77306D42-5C82-11CF-8795-00AA00B7EF73}'] property Count: Integer readonly dispid 1; property AnimationLayer: CMapXLayer dispid 9; property Bounds: CMapXRectangle readonly dispid 12; property InsertionLayer: CMapXLayer dispid 15; procedure ClearSelection; dispid 2; function Move(From: Smallint; To_: Smallint): WordBool; dispid 3; function Add(LayerInfo: OleVariant; Position: OleVariant): CMapXLayer; dispid 4; procedure AddGeoSetLayers(const GeoSetName: WideString); dispid 5; function Item(Index: OleVariant): CMapXLayer; dispid 6; procedure Remove(Index: OleVariant); dispid 7; function AddUserDrawLayer(const Name: WideString; Position: Smallint): CMapXLayer; dispid 8; function CreateLayer(const Name: WideString; Filespec: OleVariant; Position: OleVariant; KeyLength: OleVariant; CoordSys: OleVariant): CMapXLayer; dispid 10; function LayersDlg(HelpFile: OleVariant; HelpID: OleVariant): WordBool; dispid 11; function AddServerLayer(const Name: WideString; const ConnectString: WideString; const Query: WideString; Position: OleVariant; Options: OleVariant): CMapXLayer; dispid 13; procedure RemoveAll; dispid 14; end; // *********************************************************************// // DispIntf: CMapXLayerInfo // Flags: (4112) Hidden Dispatchable // GUID: {30D28170-FE33-11D2-9878-0060089F59A5} // *********************************************************************// CMapXLayerInfo = dispinterface ['{30D28170-FE33-11D2-9878-0060089F59A5}'] property Type_: Smallint dispid 1; procedure AddParameter(const ParamName: WideString; Param: OleVariant); dispid 2; end; // *********************************************************************// // DispIntf: CMapXLayer // Flags: (4112) Hidden Dispatchable // GUID: {77306D48-5C82-11CF-8795-00AA00B7EF73} // *********************************************************************// //*******************************************************************************S CMapXLayer = dispinterface ['{77306D48-5C82-11CF-8795-00AA00B7EF73}'] property Name: WideString dispid 1; property Visible: WordBool dispid 2; property Selectable: WordBool dispid 3; property _Name: WideString dispid 0; property Filespec: WideString readonly dispid 4; property LabelProperties: CMapXLabelProperties readonly dispid 5; property AutoLabel: WordBool dispid 6; property ZoomLayer: WordBool dispid 7; property OverrideStyle: WordBool dispid 8; property Style: CMapXStyle dispid 9; property ZoomMin: Double dispid 10; property ZoomMax: Double dispid 11; property Selection: CMapXSelection readonly dispid 12; property PredominantFeatureType: Smallint readonly dispid 13; property Find: CMapXLayerFind readonly dispid 14; property Type_: Smallint readonly dispid 15; property KeyField: WideString dispid 16; property CoordSys: CMapXCoordSys readonly dispid 17; property Bounds: CMapXRectangle readonly dispid 32; property DrawLabelsAfter: WordBool dispid 37; property Datasets: CMapXDatasets readonly dispid 39; property ShowNodes: WordBool dispid 43; property ShowCentroids: WordBool dispid 44; property ShowLineDirection: WordBool dispid 45; property Editable: WordBool dispid 46; procedure LabelAtPoint(X: Double; Y: Double); dispid 18; procedure ClearCustomLabels; dispid 19; procedure UpdateFeature(Target: OleVariant; Source: OleVariant; RowValues: OleVariant); dispid 20; function AddFeature(const SourceFeature: IDispatch; RowValues: OleVariant): CMapXFeature; dispid 21; procedure DeleteFeature(Target: OleVariant); dispid 22; procedure Invalidate(InvalidRect: OleVariant); dispid 23; function SearchWithinDistance(const Source: IDispatch; Distance: Double; Units: Smallint; SearchType: Smallint): CMapXFeatures; dispid 24; function SearchWithinRectangle(const Rectangle: IDispatch; SearchType: Smallint): CMapXFeatures; dispid 25; function AllFeatures: CMapXFeatures; dispid 26; function NoFeatures: CMapXFeatures; dispid 27; function SearchWithinFeature(const Feature: IDispatch; SearchType: Smallint): CMapXFeatures; dispid 28; function SearchAtPoint(const Point: IDispatch): CMapXFeatures; dispid 29; procedure DrillDownRemoveFeatures(const Level: WideString; FeatureKeys: OleVariant); dispid 30; procedure DrillDownAddFeatures(const Level: WideString; FeatureKeys: OleVariant); dispid 31; function GetDrilldownFeaturesByID(const strLevel: WideString; FeatureID: OleVariant): CMapXFeatures; dispid 33; procedure DrilldownReset(const strLevel: WideString); dispid 34; function GetFeatureByID(FeatureID: Integer): CMapXFeature; dispid 35; procedure Refresh; dispid 36; function FeatureIDFromFeatureName(const strKeyValue: WideString): Integer; dispid 38; function Search(const strWhere: WideString): CMapXFeatures; dispid 40; procedure BeginAccess(BeginAccessType: LayerBeginAccessConstants); dispid 41; procedure EndAccess(EndAccessType: OleVariant); dispid 42; end; // *********************************************************************// // DispIntf: CMapXField // Flags: (4112) Hidden Dispatchable // GUID: {77306D4C-5C82-11CF-8795-00AA00B7EF73} // *********************************************************************// CMapXField = dispinterface ['{77306D4C-5C82-11CF-8795-00AA00B7EF73}'] property Type_: FieldTypeConstants readonly dispid 1; property Name: WideString readonly dispid 2; property _Name: WideString dispid 0; property AggregationFunction: AggregationFunctionConstants readonly dispid 3; end; // *********************************************************************// // DispIntf: CMapXDataset // Flags: (4112) Hidden Dispatchable // GUID: {77306D51-5C82-11CF-8795-00AA00B7EF73} // *********************************************************************// CMapXDataset = dispinterface ['{77306D51-5C82-11CF-8795-00AA00B7EF73}'] property Name: WideString dispid 1; property RowCount: Integer readonly dispid 2; property Fields: CMapXFields readonly dispid 3; property Themes: CMapXThemes readonly dispid 4; property GeoField: Integer readonly dispid 5; property SecondaryGeoField: Integer readonly dispid 6; property Layer: CMapXLayer readonly dispid 7; property Type_: Smallint readonly dispid 11; property ReadOnly: WordBool readonly dispid 12; procedure Refresh; dispid 8; property Value[Row: OleVariant; Column: OleVariant]: OleVariant readonly dispid 9; property _Value[Row: OleVariant; Column: OleVariant]: OleVariant readonly dispid 0; property SourceRows[Row: OleVariant]: CMapXSourceRows readonly dispid 10; property RowValues[Row: OleVariant]: CMapXRowValues readonly dispid 13; function AddField(const Name: WideString; const Expression: WideString): CMapXField; dispid 14; end; 。。。。 // *********************************************************************// // OLE Control Proxy class declaration // Control Name : TMap // Help String : MapInfo MapX V4 // Default Interface: CMapX // Def. Intf. DISP? : Yes // Event Interface: CMapXEvents // TypeFlags : (38) CanCreate Licensed Control // *********************************************************************// TMapError = procedure(Sender: TObject; Number: Smallint; var Description: WideString; Scode: Integer; const Source: WideString; const HelpFile: WideString; HelpContext: Integer; var CancelDisplay: WordBool) of object; TMapResolveDataBind = procedure(Sender: TObject; Flag: Smallint; NumMatches: Smallint; Matches: OleVariant; var Choice: Smallint; var Cancel: WordBool) of object; TMapToolUsed = procedure(Sender: TObject; ToolNum: Smallint; X1: Double; Y1: Double; X2: Double; Y2: Double; Distance: Double; Shift: WordBool; Ctrl: WordBool; var EnableDefault: WordBool) of object; TMapRequestData = procedure(Sender: TObject; const DataSetName: WideString; Row: Integer; Field: Smallint; var Value: OleVariant; var Done: WordBool) of object; TMapDataMismatch = procedure(Sender: TObject; const DataSetName: WideString; Row: Integer; var GeoFieldValue: WideString) of object; TMapAnnotationAdded = procedure(Sender: TObject; const Annotation: IDispatch) of object; TMapAnnotationChanged = procedure(Sender: TObject; ChangeType: Smallint; const Annotation: IDispatch; var EnableDefault: WordBool) of object; TMapThemeModifyRequested = procedure(Sender: TObject; const Theme: IDispatch) of object; TMapDrawUserLayer = procedure(Sender: TObject; const Layer: IDispatch; hOutputDC: OLE_HANDLE; hAttributeDC: OLE_HANDLE; const RectFull: IDispatch; const RectInvalid: IDispatch) of object; TMapPolyToolUsed = procedure(Sender: TObject; ToolNum: Smallint; Flags: Integer; const Points: IDispatch; bShift: WordBool; bCtrl: WordBool; var EnableDefault: WordBool) of object; TMapMouseWheel = procedure(Sender: TObject; Flags: Integer; zDelta: Smallint; var X: Single; var Y: Single; var EnableDefault: WordBool) of object; TMapResolveDataBindEx = procedure(Sender: TObject; Flag: Smallint; NumMatches: Smallint; Matches: OleVariant; var Choice: Smallint; var Cancel: WordBool) of object; TMapMapDraw = procedure(Sender: TObject; Flag: Smallint) of object; TMap = class(TOleControl) private 。。。。 {$INCLUDE MapXLib_TLB.pvt_decl} protected public {$INCLUDE MapXLib_TLB.pub_decl} published end; CoLayers = class class function Create: CMapXLayers; class function CreateRemote(const MachineName: string): CMapXLayers; end; CoLayerInfo = class class function Create: CMapXLayerInfo; class function CreateRemote(const MachineName: string): CMapXLayerInfo; end; CoLayer = class class function Create: CMapXLayer; class function CreateRemote(const MachineName: string): CMapXLayer; end; CoField = class class function Create: CMapXField; class function CreateRemote(const MachineName: string): CMapXField; end; CoDataset = class class function Create: CMapXDataset; class function CreateRemote(const MachineName: string): CMapXDataset; end; CoThemes = class class function Create: CMapXThemes; class function CreateRemote(const MachineName: string): CMapXThemes; end; CoTheme = class class function Create: CMapXTheme; class function CreateRemote(const MachineName: string): CMapXTheme; end; 。。。。。 procedure Register; implementation uses ComObj; {$INCLUDE MapXLib_TLB.func} .....。。。。{ function TMap.ExportMapToMTF(const Destination: WideString; sMapDataCSys: Smallint; lMapDataCSysPrecision: Integer; bCompressMapData: WordBool): WordBool; begin Result := ControlInterface.ExportMapToMTF(Destination, sMapDataCSys, lMapDataCSysPrecision, bCompressMapData); end; procedure TMap.Die(const Password: WideString); begin ControlInterface.Die(Password); end; } procedure TMap.Pan(ScreenX: Single; ScreenY: Single); begin ControlInterface.Pan(ScreenX, ScreenY); end; procedure TMap.AboutBox; begin ControlInterface.AboutBox; end; class function CoLayers.Create: CMapXLayers; begin Result := CreateComObject(CLASS_Layers) as CMapXLayers; end; class function CoLayers.CreateRemote(const MachineName: string): CMapXLayers; begin Result := CreateRemoteComObject(MachineName, CLASS_Layers) as CMapXLayers; end; class function CoLayerInfo.Create: CMapXLayerInfo; begin Result := CreateComObject(CLASS_LayerInfo) as CMapXLayerInfo; end; class function CoLayerInfo.CreateRemote(const MachineName: string): CMapXLayerInfo; begin Result := CreateRemoteComObject(MachineName, CLASS_LayerInfo) as CMapXLayerInfo; end; //*********************************************************************** class function CoLayer.Create: CMapXLayer; begin Result := CreateComObject(CLASS_Layer) as CMapXLayer; end; class function CoLayer.CreateRemote(const MachineName: string): CMapXLayer; begin Result := CreateRemoteComObject(MachineName, CLASS_Layer) as CMapXLayer; end; class function CoField.Create: CMapXField; begin Result := CreateComObject(CLASS_Field) as CMapXField; end; class function CoField.CreateRemote(const MachineName: string): CMapXField; begin Result := CreateRemoteComObject(MachineName, CLASS_Field) as CMapXField; end; .................... procedure Register; begin RegisterComponents('ActiveX',[TMap]); end; end.發表人 - zzmbeyond01 於 2004/05/10 14:23:29 |
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
感谢william大大!
自己尝试了一下,工作得很好,但是觉得不灵活。
代码如下:
Unit2 ...省略 type IMyInterface = interface(IInterface) ['{7FCCC658-4CA9-4819-ABE2-97D163E7B280}'] function GetUSALayer: CMapXLayer; procedure SetUSALayer(USALayer: CMapXLayer); property USALayer: CMapXLayer read GetUSALayer write SetUSALayer; procedure showmyInter; end; type TMyUSAlayer = class(TInterfacedObject, IMyInterface) private FUSALayer: CMapXLayer; FMap: TMap; function GetUSALayer: CMapXLayer; procedure SetUSALayer(USALayer: CMapXLayer); public constructor create(Map: TMap); property USALayer: CMapXLayer read FUSALayer write FUSALayer; procedure showmyInter; end; implementation { Mylayer } constructor TMyUSAlayer.create(Map: TMap); begin FMap := Tmap.Create(nil); FMap := Map; //获得对Map的引用 end; function TMyUSAlayer.GetUSALayer: CMapXLayer; begin USALayer := FMap.Layers.Item('USA'); end; procedure TMyUSAlayer.SetUSALayer(USALayer: CMapXLayer); begin if USALayer.Name = 'USA' then FUSALayer := USALayer else showmessage('no USA Layer!'); end; procedure TMyUSAlayer.showmyInter; begin showmessage('hello world!'); end; //****************************************** Unit1 type TForm1 = class(TForm) Map1: TMap; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; // TMyMap = class(TMap, IMyAddedInterface) var Form1: TForm1; my: TMyUSAlayer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin my:= TMyUSAlayer.Create(Map1); my.USALayer:=Map1.Layers.Item('USA'); showmessage(my.USALayer.Name); end; |
zzmbeyond01
中階會員 ![]() ![]() ![]() 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |