⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ezbasicctrls.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
Unit EzBasicCtrls;

{***********************************************************}
{     EzGIS/CAD Components                                  }
{   (c) 2003 EzSoft Engineering                             }
{         All Rights Reserved                               }
{***********************************************************}

{$I EZ_FLAG.PAS}
Interface

Uses
  SysUtils, Classes, Windows, StdCtrls, Controls, Graphics, Printers, ExtCtrls,
  Forms, Messages, EzBaseExpr, EzLib, EzSystem, EzBase, EzRtree, EzBaseGIS,
  EzEntities, ezimpl, EzExpressions;

Const
  {(*}
  EZDEXT = '.EZD';
  EZXEXT = '.EZX';
  EPJEXT = '.EPJ';
  MAPEXT = '.EZM';
  UDFEXT = '.UDF';
  CADEXT = '.EZC';
  LONG_FIELDS_EXT = '.FLD';
  LAYER_VERSION_NUMBER = 100;
  MAP_ID = 8006;
  MAP_VERSION_NUMBER = 100;
  {*)}

Type

  {-----------------------------------------------------------------------------}
  //                    TEzMemLayerInfo
  {-----------------------------------------------------------------------------}

  TEzMemLayerInfo = Class( TEzBaseLayerInfo )
  Protected
    Function GetOverlappedTextAction: TEzOverlappedTextAction; Override;
    Procedure SetOverlappedTextAction( Value: TEzOverlappedTextAction ); Override;
    Function GetOverlappedTextColor: TColor; Override;
    Procedure SetOverlappedTextColor( Value: TColor ); Override;
    Function GetTextHasShadow: Boolean; Override;
    Procedure SetTextHasShadow( Value: boolean ); Override;
    Function GetTextFixedSize: Byte; Override;
    Procedure SetTextFixedSize( Value: Byte ); Override;
    Function GetVisible: boolean; Override;
    Procedure SetVisible( Value: boolean ); Override;
    Function GetSelectable: boolean; Override;
    Procedure SetSelectable( Value: boolean ); Override;
    Function GetIsCosmethic: boolean; Override;
    Procedure SetIsCosmethic( value: boolean ); Override;
    Function GetExtension: TEzRect; Override;
    Procedure SetExtension( Const Value: TEzRect ); Override;
    Function GetIDCounter: integer; Override;
    Procedure SetIDCounter( Value: integer ); Override;
    Function GetIsAnimationLayer: boolean; Override;
    Procedure SetIsAnimationLayer( Value: boolean ); Override;
    Function GetIsIndexed: boolean; Override;
    Procedure SetIsIndexed( Value: boolean ); Override;
    Function GetCoordsUnits: TEzCoordsUnits; Override;
    Procedure SetCoordsUnits( Value: TEzCoordsUnits ); Override;
    Function GetCoordSystem: TEzCoordSystem; Override;
    Procedure SetCoordSystem( Value: TEzCoordSystem ); Override;
    Function GetUseAttachedDB: Boolean; Override;
    Procedure SetUseAttachedDB( Value: Boolean ); Override;
    Function GetLocked: Boolean; Override;
    Procedure SetLocked( Value: Boolean ); Override;
  End;


  {-----------------------------------------------------------------------------}
  //                    TEzMemoryLayer - layer used for in memory entities
  {-----------------------------------------------------------------------------}

  TEzMemoryLayer = Class( TEzBaseLayer )
  Private
    FEntities: TList; { entities are maintained in a list }
    FIsOpened: Boolean;
    FCopierStream: TStream;
    { record specific data }
    FRecno: Integer;
    FEofCrack: Boolean;
    ol: TIntegerList;
    FFiltered: Boolean;
    FFilterRecno: Integer;
    Function InternalCopyEntity( Entity: TEzEntity ): TEzEntity;
    Procedure UpdateMapExtension( Const R: TEzRect );
  Protected
    FHeader: TEzLayerHeader;
    FDelStatus: TBits;
    Function GetRecno: Integer; Override;
    Procedure SetRecno( Value: Integer ); Override;
    Function GetRecordCount: Integer; Override;
    Function GetDBTable: TEzBaseTable; Override;
    Function GetActive: Boolean; Override;
    Procedure SetActive( Value: Boolean ); Override;
  Public
    Constructor Create( Layers: TEzBaseLayers; Const AFileName: String ); Override;
    Destructor Destroy; Override;
    Procedure InitializeOnCreate( Const FileName: String;
                                  AttachedDB, IsAnimation: Boolean;
                                  CoordSystem: TEzCoordSystem;
                                  CoordsUnits: TEzCoordsUnits;
                                  FieldList: TStrings ); Override;

    Procedure Assign( Source: TEzBaseLayer ); Override;
    Procedure Open; Override;
    Procedure Close; Override;
    Procedure ForceOpened; Override;
    Procedure WriteHeaders( FlushFiles: Boolean ); Override;
    Function AddEntity( Entity: TEzEntity ): Integer; Override;
    Procedure DeleteEntity( RecNo: Integer ); Override;
    Procedure UnDeleteEntity( RecNo: Integer ); Override;
    Function QuickUpdateExtension: TEzRect; Override;
    Function UpdateExtension: TEzRect; Override;
    Function LoadEntityWithRecNo( RecNo: Longint ): TEzEntity; Override;
    Function EntityWithRecno( Recno: Integer ): TEzEntity; Override;
    Procedure UpdateEntity( RecNo: Integer; Entity2D: TEzEntity ); Override;
    Procedure Pack( ShowMessages: Boolean ); Override;
    Procedure Repair; Override;
    Procedure Zap; Override;

    Procedure First; Override;
    Procedure Last; Override;
    Procedure Next; Override;
    Function Eof: Boolean; Override;
    Procedure StartBuffering; Override;
    Procedure EndBuffering; Override;
    Procedure SetGraphicFilter( s: TSearchType; Const visualWindow: TEzRect ); Override;
    Procedure CancelFilter; Override;
    Function ContainsDeleted: Boolean; Override;
    Procedure Recall; Override;
    Function SendEntityToBack( ARecno: Integer ): Integer; Override;
    Function BringEntityToFront( ARecno: Integer ): Integer; Override;
    Function RecIsDeleted: boolean; Override;
    Procedure RecLoadEntity2( Entity: TEzEntity ); Override;
    Function RecLoadEntity: TEzEntity; Override;
    Function RecExtension: TEzRect; Override;
    Function RecEntityID: TEzEntityID; Override;
    Function RecEntity: TEzEntity; Override;

    Function GetBookmark: Pointer; Override;
    Procedure GotoBookmark( Bookmark: Pointer ); Override;
    Procedure FreeBookmark( Bookmark: Pointer ); Override;

    Procedure RebuildTree; Override;

    Procedure CopyRecord( SourceRecno, DestRecno: Integer ); Override;
    Function DefineScope( Const Scope: String ): Boolean; Override;
    Function DefinePolygonScope( Polygon: TEzEntity; Const Scope: String;
      Operator: TEzGraphicOperator ): Boolean; Override;
    function GetExtensionForRecords( List: TIntegerList ): TEzRect; Override;

    Procedure SaveToFile;
    Procedure LoadFromFile;
    Procedure SaveToStream( Stream: TStream );
    Procedure LoadFromStream( Stream: TStream );
    Function IsDeleted( Recno: Integer ): Boolean;

    Property Entities: TList read FEntities;
  End;

  {----------------------------------------------------------------------------}
  {                  TEzLayers - for desktop layers                            }
  {----------------------------------------------------------------------------}

  TEzLayers = Class( TEzBaseLayers )
  Public
    Function Add( Const FileName: String; LayerType: TEzLayerType ): Integer; Override;
    Function CreateNew( Const FileName: String; FieldList: TStrings = Nil ): TEzBaseLayer; Override;
    Function CreateNewEx( Const FileName: String; CoordSystem: TEzCoordSystem;
      CoordsUnits: TEzCoordsUnits; FieldList: TStrings = Nil ): TEzBaseLayer; Override;
    Function CreateNewCosmethic( Const FileName: String ): TEzBaseLayer; Override;
    Function CreateNewAnimation( Const FileName: String ): TEzBaseLayer; Override;
    Function Delete( Const LayerName: String; DeleteFiles: Boolean ): Boolean; Override;
  End;

  {------------------------------------------------------------------------------}
  //            r-tree descendant classes
  {------------------------------------------------------------------------------}

  TEzRTNode = Class( TRTNode )
  Public
    Procedure Read( NId: Integer ); Override;
    Procedure Write; Override;
    Procedure AddNodeToFile; Override;
    Procedure DeleteNodeFromFile; Override;
  End;

  {------------------------------------------------------------------------------}
  //            TRTree used in desktop
  {------------------------------------------------------------------------------}

  TEzRTree = Class( TRTree )
  Public
    IdxRtx: TStream; // The file id of this rtree, if opened
    IdxRtc: TStream; // Catalog stream
    IdxOpened: Boolean;
    Function CreateNewNode: TRTNode; Override;
    Function Open( Const Name: String; Mode: Word ): integer; Override;
    Procedure Close; Override;
    Function CreateIndex( Const Name: String; Multiplier: Integer ): integer; Override;
    Procedure FlushFiles; Override;
    Procedure ReadCatalog( Var IdxInfo: TRTCatalog ); Override;
    Procedure WriteCatalog( Const IdxInfo: TRTCatalog ); Override;
    Procedure DropIndex; Override;
  End;

  { TSHPLayer - a layer for opening ArcView .shp files }

  PFourBytes = ^TFourBytes;
  TFourBytes = Array[0..3] Of byte;

  PEightBytes = ^TEightBytes;
  TEightBytes = Array[0..7] Of byte;

  // 20 bytes
  //TpPointRec = ^TPointRec;
  {(*}
  TPointRec = packed record
    ShapeType  : integer;         // Little         1 - point
    Node       : TEzPoint;
  end;

  //TpPointRec = ^TPointRec;
  TMultiPointRec = packed record
    ShapeType: Integer;           // Little                 8 - multipoint
    Extent   : TEzRect;           // Little
    NumPoints: Integer;           // Little
    // follows every point
  end;

 // 8 bytes
 //TpRecHeader = ^TRecHeader;
 TRecHeader = packed record
   RecNumber  : integer;                 // Big             ? 1 based
   RecLength  : integer;                 // Big             ? # of words
 end;

 // 100 bytes
 //TpShapeHeader = ^TShapeHeader;
 TShapeHeader = packed record
   FileCode   : integer;                 // Big Endian      ( 9994 big )
   Filler1    : array[0..4] of integer;  // Big Endian      0
   FileLength : integer;                 // Big Endian      # of words
   Version    : integer;                 // Little Endian   1000
   ShapeType  : integer;                 // Little Endian   0,1,3,5,8
   Extent     : TEzRect;                 // Little Endian
   Filler2    : array[0..7] of integer;  // Big Endian      0
 end;

 // 8 bytes - offset of first shape object set to 50 words
 //TpIndexRec = ^TIndexRec;
 TIndexRec = packed record
   Offset     : integer;                 // Big Endian
   Length     : integer;                 // Big Endian
 end;

 // 44 bytes
 //TpPartsHeader = ^TPartsHeader;
 TPartsHeader = packed record
   ShapeType  : integer;                 // Little          3,5 - Arc,Polygon
   Extent     : TEzRect;
   NumParts   : integer;                 // Little
   NumPoints  : integer;                 // Little
 end;
  {*)}

{-----------------------------------------------------------------------------}
//                    TSHPLayerInfo
{-----------------------------------------------------------------------------}

  TSHPLayerInfo = Class( TEzBaseLayerInfo )
  Protected
    Function GetOverlappedTextAction: TEzOverlappedTextAction; Override;
    Procedure SetOverlappedTextAction( Value: TEzOverlappedTextAction ); Override;
    Function GetOverlappedTextColor: TColor; Override;
    Procedure SetOverlappedTextColor( Value: TColor ); Override;
    Function GetTextHasShadow: Boolean; Override;
    Procedure SetTextHasShadow( Value: boolean ); Override;
    Function GetTextFixedSize: Byte; Override;
    Procedure SetTextFixedSize( Value: Byte ); Override;
    Function GetVisible: boolean; Override;
    Procedure SetVisible( Value: boolean ); Override;
    Function GetSelectable: boolean; Override;
    Procedure SetSelectable( Value: boolean ); Override;
    Function GetIsCosmethic: boolean; Override;
    Procedure SetIsCosmethic( value: boolean ); Override;
    Function GetExtension: TEzRect; Override;
    Procedure SetExtension( Const Value: TEzRect ); Override;
    Function GetIDCounter: integer; Override;
    Procedure SetIDCounter( Value: integer ); Override;
    Function GetIsAnimationLayer: boolean; Override;
    Procedure SetIsAnimationLayer( Value: boolean ); Override;
    Function GetIsIndexed: boolean; Override;
    Procedure SetIsIndexed( Value: boolean ); Override;
    Function GetCoordsUnits: TEzCoordsUnits; Override;
    Procedure SetCoordsUnits( Value: TEzCoordsUnits ); Override;
    Function GetCoordSystem: TEzCoordSystem; Override;
    Procedure SetCoordSystem( Value: TEzCoordSystem ); Override;
    Function GetUseAttachedDB: Boolean; Override;
    Procedure SetUseAttachedDB( Value: Boolean ); Override;
    Function GetLocked: Boolean; Override;
    Procedure SetLocked( Value: Boolean ); Override;
  End;

  {-----------------------------------------------------------------------------}
  //                    TSHPLayer
  {-----------------------------------------------------------------------------}

  TSHPLayer = Class( TEzBaseLayer )
  Private
    FHeader: TEzLayerHeader;
    FRecno: Integer;
    FSHPStream: TStream;
    FSHXStream: TStream;
    FDbTable: TEzBaseTable;
    FEofCrack: Boolean;
    FCurrentLoaded: integer;
    FUpdateRtree: Boolean;
    { buffering }
    ol: TIntegerList;
    FBuffSHX, FBuffSHP: TEzBufferedRead;
    FFilterRecno: Integer;
    FFiltered: boolean;

    { shape information }
    FShapeHeader: TShapeHeader;
    FShapeType: Integer;
    { follows the data that will be read in buffering }
    FIndexRec: TIndexRec;
    Function InternalLoadEntity( Stream: TStream ): TEzEntity;
    Function BuffSHP: TStream;
    Procedure ReadIndexRec( Recnum: Integer );
    Procedure CheckExtent( Var Extent: TEzRect );
    Procedure CheckNode( Var Node: TEzPoint );
    //Procedure UpdateMapExtension( Const R: TEzRect );
  Protected
    Function GetRecno: Integer; Override;
    Procedure SetRecno( Value: Integer ); Override;
    Function GetRecordCount: Integer; Override;
    Function GetActive: Boolean; Override;
    Procedure SetActive( Value: Boolean ); Override;
    Function GetDBTable: TEzBaseTable; Override;
  Public
    Constructor Create( Layers: TEzBaseLayers; Const AFileName: String ); Override;
    Destructor Destroy; Override;
    Procedure InitializeOnCreate( Const FileName: String;
      AttachedDB, IsAnimation: Boolean; CoordSystem: TEzCoordSystem;
      CoordsUnits: TEzCoordsUnits; FieldList: TStrings ); Override;
    Procedure StartBatchInsert; Override;
    Procedure FinishBatchInsert; Override;
    Procedure SetGraphicFilter( s: TSearchType; Const VisualWindow: TEzRect ); Override;
    Procedure CancelFilter; Override;
    Procedure GetFieldList( Strings: TStrings ); Override;
    Procedure Assign( Source: TEzBaseLayer ); Override;
    Procedure Open; Override;
    Procedure Close; Override;
    Procedure ForceOpened; Override;
    Procedure WriteHeaders( FlushFiles: Boolean ); Override;
    Function AddEntity( Entity: TEzEntity ): Integer; Override;
    Procedure DeleteEntity( RecNo: Integer ); Override;
    Procedure UnDeleteEntity( RecNo: Integer ); Override;
    Function UpdateExtension: TEzRect; Override;
    Function QuickUpdateExtension: TEzRect; Override;
    Function LoadEntityWithRecNo( RecNo: Longint ): TEzEntity; Override;
    Procedure UpdateEntity( RecNo: Integer; Entity2D: TEzEntity ); Override;
    Procedure Pack( ShowMessages: Boolean ); Override;
    Procedure Repair; Override;
    Procedure Zap; Override;

    Function Eof: Boolean; Override;
    Procedure First; Override;
    Procedure Last; Override;
    Procedure Next; Override;
    Procedure StartBuffering; Override;
    Procedure EndBuffering; Override;
    Function ContainsDeleted: Boolean; Override;
    Procedure Recall; Override;

    Function GetBookmark: Pointer; Override;
    Procedure GotoBookmark( Bookmark: Pointer ); Override;
    Procedure FreeBookmark( Bookmark: Pointer ); Override;

    Function SendEntityToBack( ARecno: Integer ): Integer; Override;
    Function BringEntityToFront( ARecno: Integer ): Integer; Override;
    Function RecIsDeleted: boolean; Override;
    Procedure RecLoadEntity2( Entity: TEzEntity ); Override;
    Function RecLoadEntity: TEzEntity; Override;
    Function RecExtension: TEzRect; Override;
    Function RecEntityID: TEzEntityID; Override;
    Procedure RebuildTree; Override;
    Procedure CopyRecord( SourceRecno, DestRecno: Integer ); Override;
    Function DefineScope( Const Scope: String ): Boolean; Override;
    Function DefinePolygonScope( Polygon: TEzEntity; Const Scope: String;
      Operator: TEzGraphicOperator ): Boolean; Override;
    Procedure Synchronize; Override;
    function GetExtensionForRecords( List: TIntegerList ): TEzRect; Override;
  End;

  {-----------------------------------------------------------------------------}
  //                    TEzMapInfo generic for desktop layers
  {-----------------------------------------------------------------------------}

  TEzMapInfo = Class( TEzBaseMapInfo )
  Private
    FMapHeader: TEzMapHeader;
{$IFDEF BCB}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -