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

📄 editortable.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  if(IndexListBox.ItemIndex>-1)then
  begin
    theName:=IndexListBox.Items[IndexListBox.ItemIndex];

    if(CompareText(theName, 'PRIMARY')<>0)then
    begin
      if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Please enter the Index Name:', 3), DMMain.GetTranslatedMessage('Name of Index:', 4),
        theName))then
      begin
        TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).IndexName:=theName;

        RefreshCurrentIndex;
      end;
    end;
  end;
end;

procedure TEditorTableForm.IndexTypeCBoxCloseUp(Sender: TObject);
begin
  if(IndexTypeCBox.ItemIndex>0)then
    TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).IndexKind:=
      IndexTypeCBox.ItemIndex;

  if(IndexTypeCBox.ItemIndex=0)then
    IndexTypeCBox.ItemIndex:=
      TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).IndexKind;
end;

procedure TEditorTableForm.IndexColListBoxMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if(Button=mbLeft)then
  begin
    DragStartRow:=IndexColListBox.ItemAtPos(Point(X, Y), True);
    if(DragStartRow>-1)then
      IndexColListBox.BeginDrag(False, 5);
  end
  else if(Button=mbRight)then
  begin
    IndexColumnsPopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  end;

end;

procedure TEditorTableForm.DelIndexBtnClick(Sender: TObject);
var //theIndex: TEERIndex;
  i: integer;
  doIt: Boolean;
begin
  if(IndexListBox.ItemIndex>-1)then
  begin
    if(MessageDlg(DMMain.GetTranslatedMessage('Do you really want to delete the selected index?', 5),
      mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
    begin
      if(CompareText(IndexListBox.Items[IndexListBox.ItemIndex], 'PRIMARY')<>0)then
      begin
        //ask again if the index is a FKRefDefIndex
        if(TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).FKRefDef_Obj_id>-1)then
        begin
          doIt:=False;

          if(MessageDlg(DMMain.GetTranslatedMessage('The selected Index was created automatically '+
            'and will be recreated after this editor is closed if the '+
            '[Automatically create Index on FK Fields] option is enabled. '+#13#10#13#10+
            'To disable automatical Index creation please check the model''s '+
            'edit options.'+#13#10#13#10+
            'Are you shure you want to delete the selected index?', 6),
            mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
          begin
            //Check all relations and set FKRefDefIndex_Obj_id=-1
            for i:=0 to EERModel.ComponentCount-1 do
              if(EERModel.Components[i].ClassNameIs('TEERRel'))then
                if(TEERRel(EERModel.Components[i]).Obj_id=
                  TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).FKRefDef_Obj_id)then
                begin
                  TEERRel(EERModel.Components[i]).FKRefDefIndex_Obj_id:=-1;
                  doIt:=True;
                  break;
                end;
          end;
        end
        else
          doIt:=True;

        if(doIt)then
        begin
          EERTable.Indices.Delete(IndexListBox.ItemIndex);

          if(EERTable.Indices.Count>0)then
            ShowIndex(TEERIndex(EERTable.Indices[EERTable.Indices.Count-1]).Obj_id)
          else
            ShowIndex(-1);
        end;
      end
      else
      begin
        for i:=0 to EERTable.Columns.Count-1 do
          TEERColumn(EERTable.Columns[i]).PrimaryKey:=False;

        CheckPrimaryIndex;

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

procedure TEditorTableForm.ColumnGridDblClick(Sender: TObject);
begin
  if(ColumnGrid.Row=0)then
    Exit;

  //Use StringEditor
  if((ColumnGrid.Col=1)and(LastClickedCol=1))or(ColumnGrid.Col=7)or(ColumnGrid.Col=8)then
    EditCellStr;

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

procedure TEditorTableForm.PasteSQLInsertMIClick(Sender: TObject);
var s, s2: string;
  i: integer;
begin
  //store Clipboard
  s2:=Clipboard.AsText;

  s:=EERTable.GetSQLInsertCode;

  for i:=0 to EERTable.Columns.Count-1 do
  begin
    if(i<EERTable.Columns.Count-1)then
      s:=s+', ';
  end;

  s:=s+');'+#13#10#13#10;

  StdInsertMemo.SelText:=s;
  StdInsertMemo.SelStart:=StdInsertMemo.SelStart+StdInsertMemo.SelLength;
  StdInsertMemo.SelLength:=0;

  Clipboard.AsText:=s2;
end;

procedure TEditorTableForm.FormShow(Sender: TObject);
begin
  DMMain.RestoreWinPos(self, True);
end;

procedure TEditorTableForm.MouseEditTmrTimer(Sender: TObject);
begin
  {//Simulate delayed double click
  if(DoCellEdit)then
    EditCellStr;

  MouseEditTmr.Enabled:=False;}
end;

procedure TEditorTableForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if(Key=Key_F1)then
    DMMain.ShowHelp('editors', 'table');

  if(Key=Key_Escape)then
  begin
    if(ActiveControl=EditorTableFieldEdit)or
      (ActiveControl=EditorTableFieldDatatypeInplaceEditor.DatatypeCBox)then
      SetFocus
    else
      AbortBtnClick(self);
  end;
end;

procedure TEditorTableForm.FormDeactivate(Sender: TObject);
begin
  {if(DoCellEdit)then
  begin
    if(EditorTableFieldEdit.Visible)then
      TEditorTableFieldEdit(EditorTableFieldEdit).ApplyChanges(-1);
    if(EditorTableFieldDatatypeInplaceEditor.Visible)then
      EditorTableFieldDatatypeInplaceEditor.ApplyChanges(-1);
  end;}

  if(Not(DMMain.IsFormStayingOnTop(self)))then
    sendCLXEvent(Application.MainForm.Handle, QCustomEvent_create(QEventType_RestoreStayOnTopForms, self));
end;

procedure TEditorTableForm.EditIndexColumnLengthMIClick(Sender: TObject);
var theIndex: TEERIndex;
  s: string;
begin
  if(IndexColListBox.ItemIndex>-1)then
  begin
    theIndex:=TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]);

    //Look for ID in the Params
    s:=theIndex.ColumnParams.Values[theIndex.Columns[IndexColListBox.ItemIndex]];

    if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Please enter the Length Parameter:', 7), DMMain.GetTranslatedMessage('Length:', 8), s))then
    begin
      if(s<>'')then
        theIndex.ColumnParams.Values[theIndex.Columns[IndexColListBox.ItemIndex]]:=s
      else
        if(theIndex.ColumnParams.IndexOfName(theIndex.Columns[IndexColListBox.ItemIndex])>=0)then
          theIndex.ColumnParams.Delete(theIndex.ColumnParams.IndexOfName(theIndex.Columns[IndexColListBox.ItemIndex]));
    end;

    ShowIndex(theIndex.Obj_id);
  end;
end;

procedure TEditorTableForm.SubmitBtnClick(Sender: TObject);
begin
  Close;
end;

procedure TEditorTableForm.AbortBtnClick(Sender: TObject);
begin
  DiscardChanges:=True;

  Close;
end;

procedure TEditorTableForm.SubmitBtnMouseEnter(Sender: TObject);
begin
  TSpeedButton(Sender).Enabled:=True;
end;

procedure TEditorTableForm.SubmitBtnMouseLeave(Sender: TObject);
begin
  TSpeedButton(Sender).Enabled:=False;
end;

procedure TEditorTableForm.PageControlTreeViewChange(Sender: TObject;
  Node: TTreeNode);
begin
  TablePageControl.ActivePageIndex:=PageControlTreeView.Selected.AbsoluteIndex;
  PageControlTitleLbl.Caption:=PageControlTreeView.Selected.Text;
end;

procedure TEditorTableForm.FormResize(Sender: TObject);
begin
  //TableNameEd
  TableNameEd.Width:=Width-(702-164);

  //Column Name
  ColumnGrid.ColWidths[1]:=(Width-702) div 4+104;
  //Column Comments
  ColumnGrid.ColWidths[8]:=(Width-702) div 4*3+100;


  //PageControlTitle
  PageControlTitleShape.Width:=Width-(702-533);
  PageControlTitlePnl.Width:=Width-(702-531);

  //PageControl
  TablePageControl.Width:=Width-(702-541);

  //Index page
  IndexListBox.Width:=Width-(702-121);
  NewIndexBtn.Left:=Width-702+121;
  DelIndexBtn.Left:=Width-702+121;
  IndexGroupbox.Left:=156+Width-702;
  IndexColumnsLbl.Left:=322+Width-702;
  IndexDragHintLbl.Left:=366+Width-702;
end;

procedure TEditorTableForm.ClearAllSQLInsertsMIClick(Sender: TObject);
begin
  StdInsertMemo.Lines.Clear;
end;

procedure TEditorTableForm.OptionSplitterMoved(Sender: TObject);
begin
  PageControlTreeView.Height:=OptionsPnl.Height-(172-155);
  TablePageControl.Height:=OptionsPnl.Height-(172-135);
end;

procedure TEditorTableForm.OptionSplitterCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if(NewSize<172)then
    Accept:=False;
end;

procedure TEditorTableForm.AddColPrefixMIClick(Sender: TObject);
var s: string;
  theCol: TEERColumn;
  i: integer;
  s1, s2: string;
  DoPrefix: Boolean;
begin
  DoPrefix:=True;

  if(Sender.ClassNameIs('TMenuItem'))then
    if(TMenuItem(Sender).Name='AddColPostfixMI')then
      DoPrefix:=False;

  if(DoPrefix)then
  begin
    s1:=DMMain.GetTranslatedMessage('Enter a Prefix for the selected columns ...', 98);
    s2:=DMMain.GetTranslatedMessage('Prefix:', 99);
  end
  else
  begin
    s1:=DMMain.GetTranslatedMessage('Enter a Postfix for the selected columns ...', 100);
    s2:=DMMain.GetTranslatedMessage('Postfix:', 101);
  end;


  if(DMMain.ShowStringEditor(s1, s2, s))then
    if(s<>'')then
    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
          if(MessageDlg(DMMain.GetTranslatedMessage('%s is a Foreign Key Column and '+
            'cannot be edited.', 102, theCol.ColName), mtConfirmation,
            [mbYes, mbNo], 0)<>mrYes)then
            continue;

        if(DoPrefix)then
          theCol.ColName:=s+theCol.ColName
        else
          theCol.ColName:=theCol.ColName+s;
      end;

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

      ColumnGrid.Repaint;

      ShowIndex(EERTable.CheckPrimaryIndex);
    end;
end;

procedure TEditorTableForm.AddColumnstoSelectedIndexMIClick(
  Sender: TObject);
var i: integer;
  theCol: TEERColumn;
  theIndex: TEERIndex;
begin
  if(IndexListBox.ItemIndex>-1)and
    (IndexListBox.ItemIndex<=EERTable.Indices.Count-1)then
  begin
    theIndex:=TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]);

    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(theIndex.Columns.IndexOf(IntToStr(theCol.Obj_id))=-1)then
      begin
        theIndex.Columns.Add(IntToStr(theCol.Obj_id));

        if(CompareText(theIndex.IndexName, 'PRIMARY')=0)then
        begin
          theCol.PrimaryKey:=True;

          ColumnGrid.Invalidate;
        end;

        ShowIndex(theIndex.Obj_id);
      end;
    end;
  end;
end;

procedure TEditorTableForm.MoveRowupMIClick(Sender: TObject);
begin
  if(ColumnGrid.Row>1)then
  begin
    EERTable.Columns.Move(ColumnGrid.Row-1, ColumnGrid.Row-2);
    ColumnGrid.Row:=ColumnGrid.Row-1;

    ColumnGrid.Invalidate;
  end;
end;

procedure TEditorTableForm.MoveRowdownMIClick(Sender: TObject);
begin
  if(ColumnGrid.Row<ColumnGrid.RowCount-2)then
  begin
    EERTable.Columns.Move(ColumnGrid.Row-1, ColumnGrid.Row);
    ColumnGrid.Row:=ColumnGrid.Row+1;

    ColumnGrid.Invalidate;
  end;
end;

end.

⌨️ 快捷键说明

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