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

📄 tseditor.pas

📁 企业进销存管理系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{*******************************************************}
{                                                       }
{       Top Support Visual Components                   }
{       TopGrid Component Editor                        }
{                                                       }
{       Copyright (c) 1997 - 1999 Top Support           }
{                                                       }
{*******************************************************}

unit TsEditor;

{$INCLUDE TSCmpVer}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, MMSystem,
  ComCtrls, TsDesign, TSDBGrid, StdCtrls, Grids_ts, TSGrid, ExtCtrls,
  {$IFDEF TSVER_V6} Variants, DesignIntf, DesignEditors, VCLEditors, {$ELSE} DsgnIntf, {$ENDIF}
  TypInfo, TSSetLib, ClipBrd,
  {$IFDEF TSVER_V3} ToolWin, {$ELSE} TSD3EditorControls, Menus, Buttons, {$ENDIF}
  RichEdit, Buttons, Db, Menus, TSMask, TSImagelistEditor,
  TSImageList, TSCommon, TSMbcs, TSDateTimeDef, TSDateTime;

const
    WM_UPDATEINSPECTOR = WM_USER + 1;
    WM_ROWCHANGED = WM_USER + 2;
    WM_SETTOGRIDEDITOR = WM_USER + 3;

    MaxDisplayModeIndex = 1;
    AlwaysUseCellPropListCount = 1000;

type
    TtsDesignInfo = class;
    TtsDBDesignInfo = class;

    TtsGridEditor = class(TComponentEditor)
    public
        procedure Edit; override;
        function GetVerbCount: Integer; override;
        function GetVerb(Index: integer): string; override;
        procedure ExecuteVerb(Index: integer); override;
    end;

    PGridData = ^TGridData;
    PRowData = ^TRowData;
    PCurColsInRowData = ^TCurColsInRowData;
    TGridData = array[0..(MaxListSize div ((SizeOf(PRowData) div SizeOf(LongInt)) + 1))] of PRowData;
    TRowData = array[0..(MaxListSize div ((SizeOf(Variant) div SizeOf(LongInt)) + 1))] of Variant;
    TCurColsInRowData = array[0..MaxListSize] of integer;

    TGridValues = Class(TObject)
    protected
        FCols: integer;
        FRows: integer;
        GridData: PGridData;
        CurRowsInGridData: integer; //Nr of Rows allocated
        CurColsInRowData: PCurColsInRowData; //Nr of Cols allocated per row
    public
        constructor Create(Cols, Rows: integer);
        destructor  Destroy; override;

        function GetValue(DataCol, DataRow: Integer): Variant;
        procedure SetValue(DataCol, DataRow: Integer; Value: Variant);
        procedure DeleteRows(FromRow, ToRow: integer);
        procedure DeleteCols(FromCol, ToCol: integer);
    end;

    TtsTabElement = record
        ComponentEditor: TtsComponentEditor;
        TopRow: integer;
        CurRow: integer;
        DisplayModeName: string;
        NumberofToggleValues: integer;
        NumberofInvisibleValues: integer;
    end;

    PtsTabList = ^TtsTabList;
    TtsTabList = array[0..(MaxListSize div ((SizeOf(TtsTabElement) div SizeOf(Longint)) + 1))] of TtsTabElement;

    TtsGridSelection = record
        GridStatus: TtsGridStatus;
        SelectedCells: integer;
        SelectedCols: integer;
        SelectedRows: integer;
        SelectedFrom: TList;
        SelectedTo: TList;
    end;
    PtsGridSelection = ^TtsGridSelection;

    TtsBaseGridClass = class of TtsBaseGrid;

    PEditor = ^TEditor;
    TEditor = class(TObject)
    protected
        FComboGrid: Boolean;
        FDesignInfo: TtsDesignInfo;
        grdExampleClass : TtsBaseGridClass;
        grdExample: TtsBaseGrid;
        CurrentTab: integer;

        FTabInfo: PtsTabList;
        FTabInfoCount: Integer;
        FCellPropList: TtsSetList;
        UseCellPropList: Boolean;
        CellPropListIndex: integer;
        FirstEditorCell: TPersistent;
        NextEditorCell: TPersistent;
        IdEditorCell: TPersistent;
        FirstEditorRow: TPersistent;
        NextEditorRow: TPersistent;
        IdEditorRow: TPersistent;
        ExampleKeyIsDown: Boolean;
        ExampleMouseIsDown: Boolean;
        UpdateComponentsOnUp: Boolean;
        ScanCanceled: Boolean;
        InColResize: Boolean;
        FieldNames: TStringList;
        ValColumns: TGridValues;

        function  GetDesignInfo: TtsDesignInfo;
        procedure SetGrdExample;
        function  GetDataBound: Boolean;
        procedure GetFieldNames;
        procedure SetRightTabsVisible;
        procedure CreateTabInfo;
        procedure ResetTabInfo;
        function  GetTabInfo: PtsTabList;
        function  GetCellPropList: TtsSetList;

        property TabInfo: PtsTabList read GetTabInfo;
        property CellPropList: TtsSetList read GetCellPropList;
        property DataBound: Boolean read GetDataBound;
        property DesignInfo: TtsDesignInfo read GetDesignInfo;
    public
        constructor Create(grdClass : TtsBaseGridClass; ComboGrid: Boolean);
        destructor  Destroy; override;
    end;

    {TtsDesignInfo}
    TtsDesignInfo = class(TObject)
    protected
        FBaseGrid: TtsBaseGrid;

        function  GetCellButtonType(DataCol: LongInt; DataRow: Variant): TtsButtonType; virtual;
        function  GetCellCombo(DataCol: LongInt; DataRow: Variant): TtsCombo; virtual;
        procedure SetCellCombo(DataCol: LongInt; DataRow: Variant; Value: TtsCombo); virtual;
        function  GetCellControlType(DataCol: LongInt; DataRow: Variant): TtsControlType; virtual;
        function  GetCombo: TtsCombo;
        function  GetCurrentDataRow: Variant; virtual;
        procedure SetCurrentDataRow(Value: Variant); virtual;
        function  GetRowButtonType(DataRow: Variant): TtsButtonType; virtual;
        function  GetRowCombo(DataRow: Variant): TtsCombo; virtual;
        procedure SetRowCombo(DataRow: Variant; Value: TtsCombo); virtual;
        function  GetRowControlType(DataRow: Variant): TtsControlType; virtual;
        function  GetSelectedCells: TRect;
        function  GetSelectedRows: TtsSelection;
    public
        constructor Create(BaseGrid: TtsBaseGrid);

        procedure GetFirstSelectedCell(var DataCol: integer; var DataRow: Variant; StatusSet: TtsGridStats); virtual;
        procedure GetNextSelectedCell(var DataCol: integer; var DataRow: Variant; StatusSet: TtsGridStats); virtual;
        function CellSelected(DataCol: integer; DataRow: Variant; StatusSet: TtsGridStats): Boolean; virtual;
        function CellSelectedCount(StatusSet: TtsGridStats): integer; virtual;
        function GetVisibleRowCount(FromRow, ToRow: Variant): integer; virtual;
        function GetFirstVisibleRow: Variant; virtual;
        function GetNextVisibleRow(DataRow: Variant): Variant; virtual;
        function GetVisibleColCount: integer;
        function GetFirstVisibleCol: integer;
        function GetNextVisibleCol(DataCol: integer): integer;

        property CellButtonType[DataCol: LongInt; DataRow: Variant]: TtsButtonType read GetCellButtonType;
        property CellCombo[DataCol: LongInt; DataRow: Variant]: TtsCombo read GetCellCombo write SetCellCombo;
        property CellControlType[DataCol: LongInt; DataRow: Variant]: TtsControlType read GetCellControlType;
        property Combo: TtsCombo read GetCombo;
        property CurrentDataRow : Variant read GetCurrentDataRow write SetCurrentDataRow;
        property RowButtonType[DataRow: Variant]: TtsButtonType read GetRowButtonType;
        property RowCombo[DataRow: Variant]: TtsCombo read GetRowCombo write SetRowCombo;
        property RowControlType[DataRow: Variant]: TtsControlType read GetRowControlType;
        property SelectedCells: TRect read GetSelectedCells;
        property SelectedRows: TtsSelection read GetSelectedRows;
    end;

    {TtsDBDesignInfo}

    TtsDBDesignInfo = class(TtsDesignInfo)
    protected
        function  GetCustomDBGrid: TtsCustomDBGrid;
        procedure SetCustomDBGrid(CustomDBGrid: TtsCustomDBGrid);

        function  GetCellButtonType(DataCol: LongInt; DataRow: Variant): TtsButtonType; override;
        function  GetCellCombo(DataCol: LongInt; DataRow: Variant): TtsCombo; override;
        procedure SetCellCombo(DataCol: LongInt; DataRow: Variant; Value: TtsCombo); override;
        function  GetCellControlType(DataCol: LongInt; DataRow: Variant): TtsControlType; override;
        function  GetCurrentCell: TtsDBCurrentCell;
        function  GetCurrentDataRow: Variant; override;
        procedure SetCurrentDataRow(Value: Variant); override;
        function  GetDataBound: Boolean;
        function  GetDataSource: TDataSource;
        procedure SetDataSource(Value: TDataSource);
        function  GetFieldState: TtsFieldState;
        procedure SetFieldState(Value: TtsFieldState);
        function  GetRowButtonType(DataRow: Variant): TtsButtonType; override;
        function  GetRowCombo(DataRow: Variant): TtsCombo; override;
        function  GetRowControlType(DataRow: Variant): TtsControlType; override;
        procedure SetRowCombo(DataRow: Variant; Value: TtsCombo); override;

    public
        procedure GetFirstSelectedCell(var DataCol: integer; var DataRow: Variant; StatusSet: TtsGridStats); override;
        procedure GetNextSelectedCell(var DataCol: integer; var DataRow: Variant; StatusSet: TtsGridStats); override;
        function CellSelected(DataCol: integer; DataRow: Variant; StatusSet: TtsGridStats): Boolean; override;
        function CellSelectedCount(StatusSet: TtsGridStats): integer; override;
        function GetVisibleRowCount(FromRow, ToRow: Variant): integer; override;
        function GetFirstVisibleRow: Variant; override;
        function GetNextVisibleRow(DataRow: Variant): Variant; override;

        property Grid: TtsCustomDBGrid read GetCustomDBGrid write SetCustomDBGrid;

        property CellButtonType[DataCol: LongInt; DataRow: Variant]: TtsButtonType read GetCellButtonType;
        property CellCombo[DataCol: LongInt; DataRow: Variant]: TtsCombo read GetCellCombo write SetCellCombo;
        property CurrentDataRow: Variant read GetCurrentDataRow;
        property DataBound: Boolean read GetDataBound;
        property DataSource: TDataSource read GetDataSource write SetDataSource;
        property FieldState: TtsFieldState read GetFieldState write SetFieldState;
        property RowButtonType[DataRow: Variant]: TtsButtonType read GetRowButtonType;
        property RowCombo[DataRow: Variant]: TtsCombo read GetRowCombo write SetRowCombo;
    end;

    tsUserShowOptions = set of (suoDesignBehaviour, suoShowInvisibleGrid, suoShowInvisibleCombo);

  TfrmInspector = class(TForm)
    Splitter1: TSplitter;
    pnlInspectorWTabs: TPanel;
    tabInspector: TPageControl;
    tabGridProperties: TTabSheet;
    tabColumnProperties: TTabSheet;
    tabRowProperties: TTabSheet;
    tabCellProperties: TTabSheet;
    Panel3: TPanel;
    pnlGrdExample: TPanel;
    ToolBar1: TToolBar;
    ToolButton2: TToolButton;
    butCancel: TButton;
    butOK: TButton;
    ToolButton3: TToolButton;
    ceGrid: TtsComponentEditor;
    ceColumn: TtsComponentEditor;
    ceRow: TtsComponentEditor;
    ceCell: TtsComponentEditor;
    ceComboGrid: TtsComponentEditor;
    ceComboColumn: TtsComponentEditor;
    ceComboRow: TtsComponentEditor;
    ceComboCell: TtsComponentEditor;
    pnlScanning: TPanel;
    lblScanning: TLabel;
    prbScanning: TProgressBar;
    butStop: TSpeedButton;
    pnlCustomizeColumns: TPanel;
    pnlInspector: TPanel;
    Panel8: TPanel;
    splInspector: TSplitter;
    Panel11: TPanel;
    lblGridColumns: TLabel;
    lblFieldState: TLabel;
    grdColumns: TtsGrid;
    butAdd: TBitBtn;
    butRemove: TBitBtn;
    cmbFieldState: TComboBox;
    tabCustomizeColumns: TTabSheet;
    Panel10: TPanel;
    grdHeading: TtsGrid;
    grdInspector: TtsGridInspector;
    pmnGrid: TPopupMenu;
    mnuDelColumns: TMenuItem;
    mnuInsColumns: TMenuItem;
    N1: TMenuItem;
    mnuInsRow: TMenuItem;
    mnuDelRows: TMenuItem;
    pmnGridInspector: TPopupMenu;
    munReset: TMenuItem;
    mnuAddColumn: TMenuItem;
    mnuAddRow: TMenuItem;
    pnlInvisible: TPanel;
    sepSizer: TToolButton;
    Label1: TLabel;
    grdDatafields: TtsGrid;
    butAll: TSpeedButton;
    butUnselected: TSpeedButton;
    butAddSelected: TBitBtn;
    butAddAll: TBitBtn;
    Label2: TLabel;
    ToolButton1: TToolButton;
    pnlInspectorGrid: TPanel;
    Panel9: TPanel;
    Panel1: TPanel;
    Panel2: TPanel;
    chkDesignBehaviour: TCheckBox;
    chkInvisibleRowsCols: TCheckBox;
    butNew: TSpeedButton;
    butOpen: TSpeedButton;
    butSave: TSpeedButton;
    butReset: TSpeedButton;
    ToolButton4: TToolButton;
    butLoadPicture: TSpeedButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    butClearPicture: TSpeedButton;
    lblDesignProperty: TLabel;
    butHelp: TButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    grdSample: TtsGrid;
    procedure WndProc(var Message: TMessage); override;
    procedure FormResize(Sender: TObject);
    procedure tabInspectorChange(Sender: TObject);
    procedure tabInspectorChanging(Sender: TObject;
      var AllowChange: Boolean);
    procedure SendUpdateComponents;
    procedure RegisterPropEditors;
    procedure FormActivate(Sender: TObject);
    procedure InsertField(FieldName: string);
    function GetEditorCol(SenderEditor: TEditor; DisplayCol: integer): TPersistent;
    function GetFirstEditorRow(SenderEditor: TEditor; DataRow: Variant): TPersistent;
    function GetNextEditorRow(SenderEditor: TEditor; DataRow: Variant): TPersistent;
    function GetFirstEditorCell(SenderEditor: TEditor; DataCol: integer; DataRow: Variant): TPersistent;
    function GetNextEditorCell(SenderEditor: TEditor; DataCol: integer; DataRow: Variant): TPersistent;
    procedure StartScanComponents(lbl: string; Writing: Boolean; MaxCount: integer; var Cancel: Boolean);
    procedure NextScannedComponent(Writing: Boolean; CurCount, MaxCount: integer; var Cancel: Boolean);
    procedure EndScanComponents;
    procedure CheckButStopClick;
    procedure GetFirstSelectedCol(SenderEditor: TEditor; var DisplayCol: integer);
    procedure GetNextSelectedCol(SenderEditor: TEditor; var DisplayCol: integer);
    procedure GetFirstSelectedRow(SenderEditor: TEditor; var DataRow: Variant);
    procedure GetNextSelectedRow(SenderEditor: TEditor; var DataRow: Variant);
    procedure GetFirstSelectedCell(SenderEditor: TEditor; var DataCol: integer; var DataRow: Variant);
    procedure GetNextSelectedCell(SenderEditor: TEditor; var DataCol: integer; var DataRow: Variant);
    procedure GetNextCellProp(SenderEditor: TEditor; var DataCol: integer; var DataRow: Variant);

    function CellType(Editor: TEditor; DataCol: integer; DataRow: variant): TtsControlType;
    procedure Splitter1Moved(Sender: TObject);
    procedure splInspectorMoved(Sender: TObject);
    procedure SetDisplayModes;
    procedure ceGridGetComponentInfo(Sender: TObject;
      DisplayMode: TtsGroupElement);
    procedure ceColumnGetComponentInfo(Sender: TObject;
      DisplayMode: TtsGroupElement);
    procedure ceGridGetFirstSelectedComponent(Sender: TObject;
      var Component: TPersistent);
    procedure ceColumnGetFirstSelectedComponent(Sender: TObject;
      var Component: TPersistent);
    procedure ceRowGetFirstSelectedComponent(Sender: TObject;
      var Component: TPersistent);
    procedure ceCellGetFirstSelectedComponent(Sender: TObject;
      var Component: TPersistent);
    procedure ceColumnGetNextSelectedComponent(Sender: TObject;
      var Component: TPersistent);
    procedure ceRowGetNextSelectedComponent(Sender: TObject;
      var Component: TPersistent);
    procedure ceCellGetNextSelectedComponent(Sender: TObject;

⌨️ 快捷键说明

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