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

📄 editortable.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit EditorTable;

//----------------------------------------------------------------------------------------------------------------------
//
// This file is part of fabFORCE DBDesigner4.
// Copyright (C) 2002 Michael G. Zinner, www.fabFORCE.net
//
// DBDesigner4 is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// DBDesigner4 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with DBDesigner4; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
//----------------------------------------------------------------------------------------------------------------------
//
// Unit EditorString.pas
// ---------------------
// Version 1.2, 21.03.2003, Mike
// Description
//   Editor for the tables
//
// Changes:
//   Version 1.2, 21.03.2003, Mike
//     Get only one GlobalID for the index in NewIndexBtnClick
//   Version 1.1, 20.03.2003, Mike
//     added popupmenu to IndexColumns to change length parameter
//     and EditIndexColumnLengthMIClick procedure
//   Version 1.0, 13.03.2003, Mike
//     initial version
//
//----------------------------------------------------------------------------------------------------------------------

interface

uses
  SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
  QStdCtrls, QImgList, QComCtrls, QGrids, Qt, EERModel, QExtCtrls,
  QCheckLst, QButtons, Math, QMenus, QTypes, StrUtils, QClipbrd,
  EditorTableFieldDatatypeInplace, QMask;

type
  TEditorTableForm = class(TForm)
    DatatypesImgList: TImageList;
    ColPopupMenu: TPopupMenu;
    DeleteColumnMI: TMenuItem;
    OptionsPnl: TPanel;
    TablePageControl: TPageControl;
    IndexSheet: TTabSheet;
    NewIndexBtn: TSpeedButton;
    DelIndexBtn: TSpeedButton;
    IndexGroupbox: TGroupBox;
    DeleteColFromIndexBtn: TSpeedButton;
    IndexTypeCBox: TComboBox;
    Label11: TLabel;
    IndexNameEd: TEdit;
    IndexColListBox: TListBox;
    IndexListBox: TListBox;
    StdInsertsSheet: TTabSheet;
    StdInsertMemo: TMemo;
    TblOptionsSheet: TTabSheet;
    Label4: TLabel;
    NextAutoIncEd: TEdit;
    Label5: TLabel;
    TblPasswordEd: TEdit;
    PackKeysCBox: TCheckBox;
    GroupBox1: TGroupBox;
    Label7: TLabel;
    AverageRowLengthEd: TEdit;
    RowChecksumCBox: TCheckBox;
    Label9: TLabel;
    MaxRowNumberEd: TEdit;
    Label8: TLabel;
    MinRowNumberEd: TEdit;
    RowFormatLU: TComboBox;
    Label14: TLabel;
    DelayKeyTblUpdatesCBox: TCheckBox;
    Label16: TLabel;
    TabSheet1: TTabSheet;
    RaidPnl: TGroupBox;
    RaidTypeLU: TComboBox;
    ChunksEd: TEdit;
    ChunkSizeEd: TEdit;
    ChunksLbl: TLabel;
    ChunksizeLbl: TLabel;
    UseRaidCBox: TCheckBox;
    Label15: TLabel;
    Label18: TLabel;
    Label6: TLabel;
    TblDataDirEd: TEdit;
    Label10: TLabel;
    TblIndexDirEd: TEdit;
    StdInsertsPopupMenu: TPopupMenu;
    PasteSQLInsertMI: TMenuItem;
    TopPnl: TPanel;
    Label1: TLabel;
    TableNameEd: TEdit;
    MidPnl: TPanel;
    MidLeftPnl: TPanel;
    Panel5: TPanel;
    ColumnGrid: TDrawGrid;
    MouseEditTmr: TTimer;
    CommentsSheet: TTabSheet;
    CommentsMemo: TMemo;
    TemporaryCBox: TCheckBox;
    IndexColumnsPopupMenu: TPopupMenu;
    EditIndexColumnLengthMI: TMenuItem;
    N1: TMenuItem;
    DeleteColumnFromIndexMI: TMenuItem;
    BottomPnl: TPanel;
    PageControlTreeView: TTreeView;
    PageControlTitlePnl: TPanel;
    PageControlTitleLbl: TLabel;
    IndexColumnsLbl: TLabel;
    IndexDragHintLbl: TLabel;
    BottomRightPnl: TPanel;
    SubmitBtn: TSpeedButton;
    AbortBtn: TSpeedButton;
    N2: TMenuItem;
    ClearAllSQLInsertsMI: TMenuItem;
    TopRightPnl: TPanel;
    Label3: TLabel;
    TableTypeCBox: TComboBox;
    Label17: TLabel;
    TablePrefixComboBox: TComboBox;
    nmTableCBox: TCheckBox;
    Label19: TLabel;
    OptionSplitter: TSplitter;
    PageControlTitleShape: TShape;
    N3: TMenuItem;
    AddColPrefixMI: TMenuItem;
    AddColPostfixMI: TMenuItem;
    N4: TMenuItem;
    AddColumnstoSelectedIndexMI: TMenuItem;
    MoveRowupMI: TMenuItem;
    MoveRowdownMI: TMenuItem;
    N5: TMenuItem;

    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ApplyChanges;

    procedure FormCreate(Sender: TObject);
    procedure ColumnGridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure ColumnGridDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ColumnGridSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure ColumnGridDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ColumnGridKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ColumnGridMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

    procedure SetTable(theTable: TEERTable);
    procedure TableNameEdKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure TableNameEdExit(Sender: TObject);
    procedure TablePageCBoxCloseUp(Sender: TObject);
    procedure ColumnGridMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

    procedure DeleteColumnMIClick(Sender: TObject);
    procedure NewIndexBtnClick(Sender: TObject);

    procedure CheckPrimaryIndex;
    procedure ShowIndex(index_id: integer);
    procedure IndexColListBoxDragOver(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    procedure IndexColListBoxDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    procedure DeleteColFromIndexBtnClick(Sender: TObject);

    procedure RefreshCurrentIndex;

    procedure IndexListBoxClick(Sender: TObject);
    procedure IndexListBoxDblClick(Sender: TObject);
    procedure IndexTypeCBoxCloseUp(Sender: TObject);
    procedure IndexColListBoxMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure DelIndexBtnClick(Sender: TObject);

    procedure EditDatatype;
    procedure EditCellStr(NewName: string = '');
    procedure ColumnGridDblClick(Sender: TObject);
    procedure PasteSQLInsertMIClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure MouseEditTmrTimer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormDeactivate(Sender: TObject);
    procedure EditIndexColumnLengthMIClick(Sender: TObject);
    procedure SubmitBtnClick(Sender: TObject);
    procedure AbortBtnClick(Sender: TObject);
    procedure SubmitBtnMouseEnter(Sender: TObject);
    procedure SubmitBtnMouseLeave(Sender: TObject);
    procedure PageControlTreeViewChange(Sender: TObject; Node: TTreeNode);
    procedure FormResize(Sender: TObject);
    procedure ClearAllSQLInsertsMIClick(Sender: TObject);
    procedure OptionSplitterMoved(Sender: TObject);
    procedure OptionSplitterCanResize(Sender: TObject;
      var NewSize: Integer; var Accept: Boolean);
    procedure GetTranslations;
    procedure AddColPrefixMIClick(Sender: TObject);
    procedure AddColumnstoSelectedIndexMIClick(Sender: TObject);
    procedure InsertColumn;
    procedure MoveRowupMIClick(Sender: TObject);
    procedure MoveRowdownMIClick(Sender: TObject);
  private
    { Private declarations }
    DiscardChanges: Boolean;

    DragStartRow: integer;
    LastClickedCol: integer;
    //DragShiftState: TShiftState;

    UndoXML: string;

    ColumnGridColumnCaptions: TStringList;
  public
    { Public declarations }
    EERModel: TEERModel;
    EERTable, SourceEERTable: TEERTable;

    EditorTableFieldEdit: TEdit;
    EditorTableFieldDatatypeInplaceEditor: TEditorTableFieldDatatypeInplaceEditor;

    DoCellEdit: Boolean;
  end;

var
  EditorTableForm: TEditorTableForm;

implementation

uses MainDM, EERDM, GUIDM, EditorTableField;

{$R *.xfm}

procedure TEditorTableForm.FormCreate(Sender: TObject);
begin
  DMMain.InitForm(self, True);

  DiscardChanges:=False;

  EERModel:=nil;
  EERTable:=nil;
  SourceEERTable:=nil;

  EditorTableFieldEdit:=TEditorTableFieldEdit.Create(self);
  EditorTableFieldDatatypeInplaceEditor:=TEditorTableFieldDatatypeInplaceEditor.Create(self);
  {EditorTableFieldEdit.Parent:=self;
  EditorTableFieldEdit.Visible:=False;}

  {Left:=(Screen.Width-Width) div 2-40;
  Top:=(Screen.Height-Height) div 2;}
  //DMMain.RestoreWinPos(self, True);

  ColumnGrid.Font.Name:=Font.Name;
  ColumnGrid.Font.Size:=Font.Size;
  ColumnGrid.Canvas.Font.Name:=Font.Name;
  ColumnGrid.Canvas.Font.Size:=Font.Size;

  ColumnGrid.ColCount:=9;
  //Column Icon
  ColumnGrid.ColWidths[0]:=20;
  //Column Name
  ColumnGrid.ColWidths[1]:=104;
  //Datatype Icon
  ColumnGrid.ColWidths[2]:=20;
  //Datatype
  ColumnGrid.ColWidths[3]:=115;
  //Not Null
  ColumnGrid.ColWidths[4]:=20;
  //Auto Inc
  ColumnGrid.ColWidths[5]:=20;
  //Options
  ColumnGrid.ColWidths[6]:=160;
  //Default Val
  ColumnGrid.ColWidths[7]:=80;
  //Comments
  ColumnGrid.ColWidths[8]:=100;

  ColumnGrid.Col:=1;
  ColumnGrid.Row:=1;

  ColumnGrid.RowCount:=2;

  PageControlTreeView.FullExpand;
  TablePageControl.ActivePageIndex:=0;

  IndexListBox.Clear;

  DoCellEdit:=False;

  IndexDragHintLbl.Font.Color:=clGray;
  PageControlTitleLbl.Font.Style:=[fsBold];

  ColumnGridColumnCaptions:=TStringList.Create;

  //Get translated strings
  GetTranslations;

  StdInsertMemo.Font.Name:=DMGUI.SQLTextFont;
  StdInsertMemo.Font.Size:=DMGUI.SQLTextFontSize;

  OptionsPnl.Height:=DMEER.TableSplitterPos;
  OptionSplitterMoved(self);

  BottomPnl.Top:=1000;
end;

procedure TEditorTableForm.FormDestroy(Sender: TObject);
begin
  DMMain.SaveWinPos(self, True);

  if(Assigned(EERTable))then
    EERTable.Free;

  ColumnGridColumnCaptions.Free;
end;

procedure TEditorTableForm.GetTranslations;
var theStrings: TStringList;
  i: integer;
begin
  //Translate ColumnGridColumn Captions
  ColumnGridColumnCaptions.Clear;

  DMMain.GetFormResourceStrings(self, 'ColumnGrid', ColumnGridColumnCaptions);

  if(ColumnGridColumnCaptions.Count=0)then
  begin
    ColumnGridColumnCaptions.Add('Column Name');
    ColumnGridColumnCaptions.Add('DataType');
    ColumnGridColumnCaptions.Add('NN');
    ColumnGridColumnCaptions.Add('AI');
    ColumnGridColumnCaptions.Add('Flags');
    ColumnGridColumnCaptions.Add('Default Value');
    ColumnGridColumnCaptions.Add('Comments');
  end;

  theStrings:=TStringList.Create;
  try
    //-------------------------------------
    //Translate PageControlTreeView Items
    DMMain.GetFormResourceStrings(self, 'PageControlTreeView', theStrings);

    for i:=0 to PageControlTreeView.Items.Count-1 do
      if(i<theStrings.Count)then
        PageControlTreeView.Items[i].Text:=theStrings[i];

    //-------------------------------------
    //Translate TableTypeCBox Items
    DMMain.GetFormResourceStrings(self, 'TableTypeCBox', theStrings);

    for i:=0 to TableTypeCBox.Items.Count-1 do
      if(i<theStrings.Count)then
        TableTypeCBox.Items[i]:=theStrings[i];
  finally
    theStrings.Free;
  end;

  //Translate PageControlTreeView Items
  PageControlTreeView.Items[0].Text:=DMMain.GetTranslatedMessage('Indices', 257);
  PageControlTreeView.Items[1].Text:=DMMain.GetTranslatedMessage('Table Options', 258);
  PageControlTreeView.Items[2].Text:=DMMain.GetTranslatedMessage('Advanced', 259);
  PageControlTreeView.Items[3].Text:=DMMain.GetTranslatedMessage('Standard Inserts', 260);
  PageControlTreeView.Items[4].Text:=DMMain.GetTranslatedMessage('Comments', 261);
end;


procedure TEditorTableForm.SetTable(theTable: TEERTable);
var i: integer;
begin
  SourceEERTable:=theTable;
  EERModel:=theTable.ParentEERModel;

  if(Assigned(EERTable))then
    EERTable.Free;
  EERTable:=TEERTable.Create(self, SourceEERTable.ObjName,
    EERModel.DefModelFont, EERModel.DefaultTableType,
    EERModel.DefaultTablePrefix, nil);

  //copy to temporary EERTable
  EERTable.Assign(SourceEERTable);
  //EERTable.Parent:=EERModel;

  EditorTableForm.TableNameEd.Text:=EERTable.ObjName;

  TablePrefixComboBox.Items.Assign(EERModel.TablePrefix);
  TablePrefixComboBox.ItemIndex:=EERModel.DefaultTablePrefix;

  PageControlTreeView.Selected:=PageControlTreeView.Items[EERModel.LastTableEditorPage];
  TablePageControl.ActivePageIndex:=EERModel.LastTableEditorPage;

  ColumnGrid.RowCount:=EERTable.Columns.Count+2;

  if(EERTable.Columns.Count=0)then
    TableNameEd.SelectAll;

⌨️ 快捷键说明

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