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

📄 ezbasegis.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    Function GetExtension(MarginSize: Integer = 4;
      ExactArea: Boolean = False): TEzRect;

    Procedure BeginUpdate;
    Procedure EndUpdate;

    Procedure ApplySymbolStyle( Style: TEzSymbolTool; const Apply: TEzSymbolApply );
    Procedure ApplyPenStyle( Style: TEzPenTool; const Apply: TEzPenApply );
    Procedure ApplyBrushStyle( Style: TEzBrushTool; const Apply: TEzBrushApply );
    Procedure ApplyFontStyle( Style: TEzFontTool; const Apply: TEzFontApply );

    Property Count: Integer Read GetCount;
    Property NumSelected: Integer Read GetNumSelected;
    Property DrawBox: TEzBaseDrawBox Read FDrawBox Write FDrawBox;
    Property InUpdate: Boolean Read FInUpdate Write FInUpdate;
    Property Items[Index: Integer]: TEzSelectionLayer Read Get; Default;
  End;

  {-------------------------------------------------------------------------------}
  {                  Undo object                                                  }
  {-------------------------------------------------------------------------------}

  TEzUndoAction = ( uaUndelete, uaDelete, uaUnTransform );

  { TEzUndoSingle }
  TEzUndoSingle = Class
  Private
    FGlobalUndoAction: TEzUndoAction;
    FLastOffset: Integer;
    FDrawBox: TEzBaseDrawBox;
    FCount: Integer;
    FTempStream: TStream;
    FMustReset: Boolean;
    Function GetUndoStream: TStream;
  Public
    Constructor Create( DrawBox: TEzBaseDrawBox );
    Destructor Destroy; Override;

    Procedure BeginUndo(GlobalUndoAction: TEzUndoAction);
    Procedure AddUndo( Layer: TEzBaseLayer; Recno: Integer;
      UndoAction: TEzUndoAction );
    Procedure EndUndo;

    { mark all entities for copying from the selection }
    { mark all the deleted entities from the selection }
    Procedure AddUnDeleteFromSelection;
    { mark all transformed entities from selection}
    Procedure AddUnTransformFromSelection;
    { mark one entity for transform }
    Procedure AddUnTransform( Layer: TEzBaseLayer; RecNo: Integer );

    Procedure Undo;
    Function GetVerb: String;
  End;

  TEzUndoPool = Class
  Private
    FDrawBox: TEzBaseDrawBox;
    FUndoLimit: Integer;
    FList: TList;
    FMulti: TEzUndoSingle;
    FUndoFileName: string;

    Procedure SetUndoLimit( Value: Integer );
    Procedure AdjustStack;
  Public
    Constructor Create( DrawBox: TEzBaseDrawBox );
    Destructor Destroy; Override;

    Procedure BeginUndo(GlobalUndoAction: TEzUndoAction);
    Procedure AddUndo( Layer: TEzBaseLayer; Recno: Integer;
      Action: TEzUndoAction );
    Procedure EndUndo;
    Procedure Pop;

    { mark all entities for copying from the selection }
    Procedure CopyToClipboardFromSelection;
    { mark all the deleted entities from the selection }
    Procedure AddUnDeleteFromSelection;
    { mark all transformed entities from selection}
    Procedure AddUnTransformFromSelection;
    { mark one entity for transform }
    Procedure AddUnTransform( Layer: TEzBaseLayer; RecNo: Integer );
    Procedure PasteFromClipboardTo(GIS: TEzBaseGIS=Nil);

    Function CanUndo: boolean;
    Function CanPaste: Boolean;
    Procedure Undo;
    Procedure Clear(Clean: Boolean=False);
    Function GetVerb: String;

    Property UndoLimit: Integer Read FUndoLimit Write SetUndoLimit;
  End;

  {-------------------------------------------------------------------------------}
  {                  TEzEntityList                                                }
  {-------------------------------------------------------------------------------}

  TEzEntityList = Class
  Private
    FList: TList;

    Function Get( Index: Integer ): TEzEntity;
  Public
    Constructor Create;
    Destructor Destroy; Override;

    Procedure Add( Ent: TEzEntity );
    Procedure Insert( Index: Integer; Ent: TEzEntity );
    Procedure Delete( Index: Integer );
    Procedure Extract( Index: Integer );
    Procedure Exchange( Index1, Index2: Integer );
    Procedure ExtractAll;

    Function Count: Integer;
    Procedure Clear;

    Property Items[Index: Integer]: TEzEntity Read Get; Default;
  End;

  {-------------------------------------------------------------------------------}
  {                  TEzBaseDrawBox                                               }
  {-------------------------------------------------------------------------------}

  { Events definition for TEzBaseDrawBox }

  TEzMouseEvent = Procedure( Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer; Const WX, WY: Double ) Of Object;

  TEzMouseMoveEvent = Procedure( Sender: TObject; Shift: TShiftState;
    X, Y: Integer; Const WX, WY: Double ) Of Object;

  TEzZoomChangeEvent = Procedure( Sender: TObject; Const Scale: Double ) Of Object;

  TEzBeforeSelectEvent = Procedure( Sender: TObject; Layer: TEzBaseLayer;
    Recno: Integer; Var CanSelect: Boolean ) Of Object;

  { This event is used for both: when the entity is selected and unselected }
  TEzEntitySelectEvent = Procedure( Sender: TObject; Layer: TEzBaseLayer;
    RecNo: Integer ) Of Object;

  { When an entity is DOUBLE clicked in a TEzBaseDrawBox }
  TEzEntityDblClickEvent = Procedure( Sender: TObject; Layer: TEzBaseLayer;
    RecNo: Integer; Var Processed: Boolean ) Of Object;

  { When an entity is clicked in a TEzBaseDrawBox }
  TEzEntityClickEvent = Procedure( Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer; Const WX, WY: Double;
    Layer: TEzBaseLayer; RecNo: Integer; var Processed: Boolean ) Of Object;

  TEzClickEvent = Procedure( Sender: TObject; X, Y: Integer;
    const XWorld, YWorld: Double ) Of Object;

  {-------------------------------------------------------------------------------}
  //             TEzBaseDrawBox - abstract control
  {-------------------------------------------------------------------------------}

  TEzBaseDrawBox = Class( TCustomControl )
  Private
    FGIS: TEzBaseGIS;
    FGrapher: TEzGrapher;
    FScreenBitmap: TBitmap;
    FIsAerial: Boolean;

    FSelection: TEzSelection;
    FUndo: TEzUndoPool;
    FBlinkCount: Integer;
    FBlinkRate: Integer;

    FHMin: Integer;
    FHMax: Integer;
    FHPosition: Integer;
    FVMin: Integer;
    FVMax: Integer;
    FVPosition: Integer;
    FHSmallChange: TScrollBarInc;
    FHLargeChange: TScrollBarInc;
    FVSmallChange: TScrollBarInc;
    FVLargeChange: TScrollBarInc;
    //FPageSize: Integer;
    FScrollBars: TScrollStyle;

    FBorderStyle: TBorderStyle; {border style to use}
    FFlatScrollBar: Boolean;
    FComCtlVersion: Boolean;

    FRubberPen: TPen;
    FOutputDevices: TEzOutputDevices;
    FShowControlPoints: Boolean;
    FShowTransfPoints: Boolean;

    FTempEntities: TEzEntityList; { List used for temporary entities }
    FNeedsRepaint: Boolean;

    FGridInfo: TEzGridInfo;
    FScreenGrid: TEzScreenGrid;
    FShowMapExtents: Boolean;
    FShowLayerExtents: Boolean;

    FSnapToGuidelinesDist: double;
    FSnapToGuidelines: boolean;
    FHideVertexNumber: Boolean;

    FSymbolMarker: Integer;
    FNumDecimals: Integer;
    FNoPickFilter: TEzEntityIDs;
    FStackedSelect: Boolean;
    FPartialSelect: Boolean;
    FDelayShowHint: Integer;
    FTileBitmap: TBitmap;
    FThematicSeriesColors: TEzThematicSeriesColor;
    FUpdateOnScroll: Boolean;
    FDropRepeat: Integer;
    //FOldSize: TPoint;
    FDefaultScaleUnits: TEzScaleUnits;
    FInUpdate: Boolean;
    FInRepaint: Boolean;
    FZoomWithMargins: Boolean;

    { threads }
    FUseThread: Boolean;

    { BASIC event handlers }
    FOnPaint: TNotifyEvent;
    FOnBeginRepaint: TNotifyEvent;
    FOnEndRepaint: TNotifyEvent;
    FOnGridError: TNotifyEvent;
    FOnMouseDown2D: TEzMouseEvent;
    FOnMouseUp2D: TEzMouseEvent;
    FOnMouseMove2D: TEzMouseMoveEvent;

    FOnHScroll: TScrollEvent;
    FOnVScroll: TScrollEvent;
    FOnHChange: TNotifyEvent;
    FOnVChange: TNotifyEvent;
    FOnBeforeScroll: TNotifyEvent;
    FOnAfterScroll: TNotifyEvent;

    { event handlers. }
    FOnCustomClick: TEzClickEvent;
    FOnEntityDblClick: TEzEntityDblClickEvent;
    FOnBeforeInsert: TEzBeforeInsertEvent;

    FOnAfterInsert: TEzEntityEvent;
    FOnBeforeSelect: TEzBeforeSelectEvent;
    FOnAfterSelect: TEzEntitySelectEvent;
    FOnAfterUnSelect: TEzEntitySelectEvent;

    FOnZoomChange: TEzZoomChangeEvent;
    FOnEntityChanged: TEzEntityEvent;
    FOnShowHint: TEzShowHintEvent;

    FOnSelectionChanged: TNotifyEvent;
    FOnGisChanged: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    FOnMouseEnter: TNotifyEvent;

    { basic procedures }
    Procedure CalcScrollBarDeltas( var DeltaX, DeltaY: Integer );
    Procedure SetBorderStyle( Const Value: forms.TBorderStyle );
    Procedure SetScrollBars( Value: TScrollStyle );

    Procedure WMHScroll( Var Msg: TWMHScroll ); Message WM_HSCROLL;
    Procedure WMVScroll( Var Msg: TWMVScroll ); Message WM_VSCROLL;
    Procedure CMCtl3DChanged( Var m: TMessage ); Message CM_CTL3DCHANGED;
    Procedure WMEraseBkgnd( Var m: TWMEraseBkgnd ); Message WM_ERASEBKGND;

    Procedure SetFlatScrollBar( Value: Boolean );
    Procedure SetGridInfo( value: TEzGridInfo );
    Procedure SetScreenGrid( value: TEzScreenGrid );
    Procedure SetShowLayerExtents( value: boolean );
    Procedure SetShowMapExtents( value: boolean );

    { GIS specific procedures }
    Procedure SetHParams( APosition, AMin, AMax: Integer );
    Procedure SetVParams( APosition, AMin, AMax: Integer );
    Procedure SetPageSize( Value: Integer );
    procedure CMMouseEnter (var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave (var Msg: TMessage); message CM_MOUSELEAVE;

  Protected

    { protected declarations }
    Procedure ViewChanged( Sender: TObject ); Dynamic;
    Procedure HChange; Dynamic;
    Procedure VChange; Dynamic;
    Procedure CreateWnd; Override;
    Procedure HScroll( ScrollCode: TScrollCode; Var ScrollPos: Integer ); Dynamic;
    Procedure VScroll( ScrollCode: TScrollCode; Var ScrollPos: Integer ); Dynamic;

    Procedure Paint; Override;

    Procedure MouseMove( Shift: TShiftState; X, Y: Integer ); Override;
    Procedure MouseDown( Button: TMouseButton; Shift: TShiftState; X, Y: Integer ); Override;
    Procedure MouseUp( Button: TMouseButton; Shift: TShiftState; X, Y: Integer ); Override;

    { repaint all the objects contained in WCRect. }
    Procedure UpdateViewport( WCRect: TEzRect ); Virtual;
    Procedure DrawGrid( Const WCRect: TEzRect );
    Function IsDesigning: Boolean;

    { GIS specific }
    Procedure SetGIS( Value: TEzBaseGIS );
    Procedure Notification( AComponent: TComponent; Operation: TOperation ); Override;
    Function GetLayerByName( Const LayerName: String ): TEzBaseLayer;

  Public
    { public declarations }
  {$IFDEF IS_OCX}
    FOCX_Owner : IUnknown;
  {$ENDIF}

    Constructor Create( AOwner: TComponent ); Override;
    Destructor Destroy; Override;

    Procedure Resize; Overr

⌨️ 快捷键说明

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