📄 tseditor.pas
字号:
{*******************************************************}
{ }
{ 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 + -