📄 ezbasicctrls.pas
字号:
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 + -