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

📄 editortable.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      Pen.Color:=clWhite;
      MoveTo(Rect.Left, Rect.Top+1);
      LineTo(Rect.Right, Rect.Top+1);

      Pen.Color:=clGray;
      MoveTo(Rect.Left, Rect.Bottom-2);
      LineTo(Rect.Right-1{$IFDEF LINUX}+1{$ENDIF}, Rect.Bottom-2);
      if(ACol<>0)and(ACol<>2)then
      begin
        MoveTo(Rect.Right-2, Rect.Bottom-2);
        LineTo(Rect.Right-2, Rect.Top+1);
      end;

      Pen.Color:=clShadow;
      MoveTo(Rect.Left, Rect.Bottom-1);
      LineTo(Rect.Right-1{$IFDEF LINUX}+1{$ENDIF}, Rect.Bottom-1);
      if(ACol<>0)and(ACol<>2)then
        LineTo(Rect.Right-1{$IFDEF LINUX}+1{$ENDIF}, Rect.Top);

      if(ColumnGridColumnCaptions.Count=7)then
      begin
        Case ACol of
          1:
            TextOut(Rect.Left+1-18, Rect.Top+2, ColumnGridColumnCaptions[0]);
          3:
            TextOut(Rect.Left+1-18, Rect.Top+2, ColumnGridColumnCaptions[1]);
          4:
            TextOut(Rect.Left+1, Rect.Top+2, ColumnGridColumnCaptions[2]);
          5:
            TextOut(Rect.Left+4, Rect.Top+2, ColumnGridColumnCaptions[3]);
          6:
            TextOut(Rect.Left+3, Rect.Top+2, ColumnGridColumnCaptions[4]);
          7:
            TextOut(Rect.Left+3, Rect.Top+2, ColumnGridColumnCaptions[5]);
          8:
            TextOut(Rect.Left+3, Rect.Top+2, ColumnGridColumnCaptions[6]);
        end;
      end;
    end;
  end;
end;

procedure TEditorTableForm.ColumnGridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if(ARow=0)or(ACol=0)or(ACol=2)or(ACol=4)or(ACol=5)or(ACol=6)then
    CanSelect:=False
  else
    CanSelect:=True;
end;

procedure TEditorTableForm.ColumnGridDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:=False;
  if(Source<>nil)then
  begin
    if(Source.Classname='TListView')then
    begin
      if(TListView(Source).Name='CommonDataTypesListView')then
        Accept:=True;
    end;

    if(Source.Classname='TTreeView')then
    begin
      if(TTreeView(Source).Name='AllDataTypesTV')then
        Accept:=True;
    end;

    if(Source=Sender)then
      Accept:=True;
  end;
end;

procedure TEditorTableForm.ColumnGridDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var ACol, ARow: Longint;
  i, j: integer;
  DropedDataType: TEERDatatype;
  theCol: TEERColumn;
begin
  DropedDataType:=nil;

  ColumnGrid.MouseToCell(X, Y, ACol, ARow);

  if(ARow>0)and(ARow<=EERTable.Columns.Count)then
  begin
    if(Source.Classname='TListView')then
    begin
      if(TListView(Source).Name='CommonDataTypesListView')then
      begin
        if(TListView(Source).Selected<>nil)then
          if(TListView(Source).Selected.Data<>nil)then
            DropedDataType:=TEERDatatype(TListView(Source).Selected.Data);
      end
    end;

    if(Source.Classname='TTreeView')then
    begin
      if(TTreeView(Source).Name='AllDataTypesTV')then
      begin
        if(TTreeView(Source).Selected<>nil)then
          if(TTreeView(Source).Selected.Data<>nil)then
            DropedDataType:=TEERDatatype(TTreeView(Source).Selected.Data);
      end;
    end;

    if(Assigned(DropedDataType))then
    begin
      //If not ParamRequired, assign datatype to all selected
      if(DropedDataType.ParamRequired)or
        (ColumnGrid.Selection.Top=ColumnGrid.Selection.Bottom)then
      begin
        //Assign Datatype to the Column
        TEERColumn(EERTable.Columns[ARow-1]).idDatatype:=
          DropedDataType.id;

        //Clear DatatypeParams
        TEERColumn(EERTable.Columns[ARow-1]).DatatypeParams:='';

        //Get Option Defaults
        for i:=0 to DropedDataType.OptionCount-1 do
          TEERColumn(EERTable.Columns[ARow-1]).OptionSelected[i]:=
            DropedDataType.OptionDefaults[i];
      end
      else
      begin
        for i:=ColumnGrid.Selection.Top-1 to ColumnGrid.Selection.Bottom-1 do
        begin
          if(i>=EERTable.Columns.Count)then
            break;

          theCol:=TEERColumn(EERTable.GetColumnByIndex(i));

          if(theCol=nil)then
            continue;

          if(theCol.IsForeignKey)then
            continue;

          theCol.idDatatype:=DropedDataType.id;
          theCol.DatatypeParams:='';

          for j:=0 to DropedDataType.OptionCount-1 do
            theCol.OptionSelected[j]:=
              DropedDataType.OptionDefaults[j];
        end;
      end;

      ColumnGrid.Col:=3;
      ColumnGrid.Row:=ARow;

      ColumnGrid.Invalidate;

      if(DropedDataType.ParamRequired)then
        EditDatatype;
    end
    else if(Source=Sender)then
    begin
      if(ARow<>DragStartRow)then
      begin
        //if(ssShift in DragShiftState)and(ssCtrl in DragShiftState)then
        if(ssShift in Application.KeyState)and
          (ssCtrl in Application.KeyState)then
        begin
          //when Ctrl+Shift is pressed assign same datatype
          theCol:=TEERColumn(EERTable.Columns[ARow-1]);

          theCol.idDatatype:=TEERColumn(EERTable.Columns[DragStartRow-1]).idDatatype;
          theCol.DatatypeParams:=TEERColumn(EERTable.Columns[DragStartRow-1]).DatatypeParams;
        end
        else
        begin
          //Switch both columns in position
          EERTable.Columns.Move(DragStartRow-1, ARow-1);
        end;

        ColumnGrid.Invalidate;
      end;
    end;
  end;
end;

procedure TEditorTableForm.TableNameEdKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if(Key=Key_Return)then
  begin
    ColumnGrid.SetFocus;
    EditCellStr;
  end;
end;

procedure TEditorTableForm.ColumnGridKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if(Key=Key_Tab)or(Key=Key_Right)then
  begin
    if(ColumnGrid.Col=8)and(Key=Key_Right)then
      ColumnGrid.Col:=1
    else if(ColumnGrid.Col=8)and(Key=Key_Tab)then
    begin
      ColumnGrid.Col:=1;
      //Go down one row
      if(ColumnGrid.Row<ColumnGrid.RowCount-1)then
        ColumnGrid.Row:=ColumnGrid.Row+1;

      //When in last row, cursor one down and edit, to create new
      if(ColumnGrid.Row=ColumnGrid.RowCount-1)then
        Key:=Key_Return;
    end
    else if(ColumnGrid.Col=3)then
    begin
      ColumnGrid.Col:=7;
      Key:=0;
    end
    else if(ColumnGrid.Col=1)then
      ColumnGrid.Col:=3;
  end;

  if(Key=Key_Left)then
  begin
    if(ColumnGrid.Col=3)then
      ColumnGrid.Col:=1
    else if(ColumnGrid.Col=7)then
      ColumnGrid.Col:=3
    else if(ColumnGrid.Col=1)then
    begin
      ColumnGrid.Col:=8;
      Key:=0;
    end;
  end;

  //Use StringEditor
  if(Key=Key_Return)or(Key=Key_Enter)then
  begin
    if(ColumnGrid.Col=1)or(ColumnGrid.Col=7)or(ColumnGrid.Col=8)then
      EditCellStr;

    if(ColumnGrid.Col=3)then
      EditDatatype;
  end;

  if((Not(DoCellEdit))and
    ((Key>=Ord('a'))and(Key<=Ord('z')))or
    ((Key>=Ord('A'))and(Key<=Ord('Z'))))then
  begin
    if(ColumnGrid.Col=1)or(ColumnGrid.Col=7)or(ColumnGrid.Col=8)then
      if(Shift=[ssShift])then
        EditCellStr(Chr(Key))
      else
        EditCellStr(Chr(Key-Ord('A')+Ord('a')));
  end;

  if(Key=Key_Delete)then
  begin
    DeleteColumnMIClick(self);
  end;

  if(Key=Key_Insert)then
  begin
    InsertColumn;
  end;
end;

procedure TEditorTableForm.InsertColumn;
var theColumn: TEERColumn;
  i: integer;
begin
  //Insert new column
  theColumn:=TEERColumn.Create(EERTable);
  try
    theColumn.ColName:='';
    theColumn.PrevColName:='';
    theColumn.Obj_id:=DMMain.GetNextGlobalID;
    theColumn.Pos:=ColumnGrid.Row-1;
    theColumn.idDatatype:=TEERModel(EERModel).DefaultDataType;
    theColumn.DatatypeParams:='';
    theColumn.Width:=-1;
    theColumn.Prec:=-1;
    theColumn.PrimaryKey:=(ColumnGrid.Row=0);
    theColumn.NotNull:=(ColumnGrid.Row=0);
    theColumn.AutoInc:=False;
    theColumn.IsForeignKey:=False;

    if(TEERModel(EERModel).GetDataType(theColumn.idDatatype)=nil)then
      raise EInOutError.Create('The Datatype of the column cannot be found. '#13#10+
        'idDatatype: '+IntToStr(theColumn.idDatatype));

    //Get Option Defaults
    for i:=0 to TEERDatatype(TEERModel(EERModel).GetDataType(theColumn.idDatatype)).OptionCount-1 do
      theColumn.OptionSelected[i]:=
        TEERDatatype(TEERModel(EERModel).GetDataType(theColumn.idDatatype)).OptionDefaults[i];

    theColumn.DefaultValue:='';

    EERTable.Columns.Insert(ColumnGrid.Row-1, theColumn);

    //Add an empty row an go down there
    ColumnGrid.RowCount:=ColumnGrid.RowCount+1;
  except
    theColumn.Free;
  end;

  ColumnGrid.Refresh;

  EditCellStr('');
end;

procedure TEditorTableForm.EditDatatype;
begin
  if(ColumnGrid.Row<=EERTable.Columns.Count)then
  begin
    //User must not edit datatype of FK Column
    if(Not(TEERColumn(EERTable.Columns[ColumnGrid.Row-1]).IsForeignKey))or
      (Not(DMEER.SyncDatatypesOfForeignKeys))then
    begin

      DoCellEdit:=False;

      EditorTableFieldDatatypeInplaceEditor.SetData(EERModel, self,
        TEERColumn(EERTable.Columns[ColumnGrid.Row-1]),
        EERModel.GetDataType(TEERColumn(EERTable.Columns[ColumnGrid.Row-1]).idDatatype),
        TEERColumn(EERTable.Columns[ColumnGrid.Row-1]).DatatypeParams,
        MidLeftPnl.Width+ColumnGrid.ColWidths[0]+ColumnGrid.ColWidths[1]+ColumnGrid.ColWidths[2]+1,
        MidPnl.Top+19*(ColumnGrid.Row-ColumnGrid.TopRow+1)+2);


      DoCellEdit:=True;
    end;
  end;
end;

procedure TEditorTableForm.EditCellStr(NewName: string = '');
var doIt: Boolean;
begin
  DoCellEdit:=False;

  if(ColumnGrid.Row<=EERTable.Columns.Count)or
    ((ColumnGrid.Row>EERTable.Columns.Count)and(ColumnGrid.Col=1))then
  begin
    doIt:=True;

    //User must not edit name of FK Column
    if(ColumnGrid.Row<=EERTable.Columns.Count)and(ColumnGrid.Col=1)then
      if(TEERColumn(EERTable.Columns[ColumnGrid.Row-1]).IsForeignKey)then
        doIt:=False;

    if(doIt)then
    begin
      TEditorTableFieldEdit(EditorTableFieldEdit).SetData(self, ColumnGrid.Col, ColumnGrid.Row-1, NewName);
      EditorTableFieldEdit.Show;
      EditorTableFieldEdit.BringToFront;
      EditorTableFieldEdit.SetFocus;
      if(NewName<>'')then
      begin
        EditorTableFieldEdit.SelStart:=Length(NewName);
        EditorTableFieldEdit.SelLength:=0;
      end;

      DoCellEdit:=True;
    end;
  end;
end;

procedure TEditorTableForm.ColumnGridMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var ACol, ARow: Longint;
  theRect: TGridRect;
  tmpCol: integer;
begin
  ColumnGrid.MouseToCell(X, Y, ACol, ARow);

  if(DoCellEdit=False)and(Button=mbLeft)then
    TEditorTableFieldEdit(EditorTableFieldEdit).ApplyChanges;

  {if(ACol=3)then
  begin
    EditDatatype;
    Exit;
  end;}

  //Activate Windows like edit of cell
  if(Button=mbLeft)then
  begin
    if(MouseEditTmr.Enabled=True)and(DragStartRow=ARow)and(LastClickedCol=ACol)then
    begin
      DoCellEdit:=True;
    end
    else
    begin
      if(Not(ssShift in Shift))then
      begin
        tmpCol:=ACol;
        if(tmpCol=0)or(tmpCol=2)or(tmpCol=4)or(tmpCol=5)or(tmpCol=6)then
          tmpCol:=1;

        theRect.Left := tmpCol;
        theRect.Top := ARow;
        theRect.Right := tmpCol;
        theRect.Bottom := ARow;

        ColumnGrid.Selection:=theRect;
      end;

      DragStartRow:=ARow;
      LastClickedCol:=ACol;
      //DragShiftState:=Shift;
      ColumnGrid.BeginDrag(False, 5);

⌨️ 快捷键说明

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