線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2587
推到 Plurk!
推到 Facebook!

接口继承

尚未結案
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-22 11:28:15 IP:218.70.xxx.xxx 未訂閱
各位大大好: 我有个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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-05 15:26:50 IP:219.153.xxx.xxx 未訂閱
请问各位大大有从现有的ActiveX控件进行继承的吗?
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-06 10:52:37 IP:147.8.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-06 19:37:02 IP:218.70.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-07 10:30:54 IP:147.8.xxx.xxx 未訂閱
I think you should try to inherit from TInterfacedObject instead of TObject. But you are not expanding the ActiveX control? This way you are going to create an object supporting the CMapXLayer interface.
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-07 11:08:44 IP:218.70.xxx.xxx 未訂閱
TMyLayer=class(TInterfacedObject ,CMapXLayer)--报错:interface type required 是不是CMapXLayer(CMapXLayer = dispinterface )这种类型不能够实现?我查资料也没有查到。
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-07 11:30:29 IP:147.8.xxx.xxx 未訂閱
I think you should not use dispinterface, dispinterface works as a lookup table for the clients' convenience. Perhaps you could post the imported xxx_TLB.pas file and list out what do you want to do?
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-07 16:18:02 IP:218.70.xxx.xxx 未訂閱
我在单元引用文件中,已经添加了啊 uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, OleCtrls, MapXLib_TLB; 是不是购买的软件进行了封装? 發表人 - zzmbeyond01 於 2004/05/07 16:25:51
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-07 16:37:54 IP:147.8.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-05-07 17:49:27 IP:219.153.xxx.xxx 未訂閱
谢谢william大大! MapXLib_TLB文件中我以前就已经找过了,没有interface类型的。 有实现CMapXLayer接口的指针 CoLayers = class class function Create: CMapXLayers; class function CreateRemote(const MachineName: string): CMapXLayers; end; 我是希望创建实现该接口的类,增加一些特定的属性。
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-05-08 14:47:34 IP:218.70.xxx.xxx 未訂閱
我已经很好的从TMap(地图类)进行了派生。 我现在想 实现对特定的图层Layer增加一些属性和操作,不知道怎么实现,在地图中我感觉对图层Layer像是以接口的形式操作的。而CMapXLayer接口又不能 以  
 TMyLayer=class(TObject ,CMapXLayer)--报错:需要接口类型
  public name:String;
  procedure showname;
  end;
这种形式出现
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-05-10 09:27:22 IP:147.8.xxx.xxx 未訂閱
Perhaps you could post the TLB.pas file for discussion?
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-05-10 14:15:40 IP:218.70.xxx.xxx 未訂閱
 
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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-05-10 14:34:37 IP:218.70.xxx.xxx 未訂閱
william大大: 我想问一下,如果我用一个新类,比如Mylayer实现了图层(Layer)的接口,进行了扩展。如何实现在TMap类中象调用原layer接口一样调用呢? 在使用TMap控件的程序中Map.layers.item(1) ——>返回CMapXlayer接口
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-05-10 14:48:47 IP:147.8.xxx.xxx 未訂閱
I think TMap is the wrapper VCL generated and you should inherit from TMap. If you want to add more interface, just add it, e.g. TMyMap = class(TMap, IMyAddedInterface)
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-05-10 21:14:54 IP:218.70.xxx.xxx 未訂閱
感谢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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-05-10 21:17:57 IP:218.70.xxx.xxx 未訂閱
多谢william大大! < >< >
系統時間:2024-07-01 21:13:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!