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

📄 palettemodel.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 2 页
字号:
procedure TPaletteModelFrom.DeleteMIClick(Sender: TObject);
begin
  //Columns cannot be selected
  if(Assigned(TablesTreeView.Selected))then
    if(Assigned(TablesTreeView.Selected.Data))and
      (TablesTreeView.Selected.ImageIndex<>1)and
      (TablesTreeView.Selected.ImageIndex<>2)then
    begin
      TEERObj(TablesTreeView.Selected.Data).DeleteObj;

      RefreshTablesTreeView(EERModel);
    end;
end;

procedure TPaletteModelFrom.OptionsImgClick(Sender: TObject);
begin
  PalettePopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;

procedure TPaletteModelFrom.RefreshPalMIClick(Sender: TObject);
begin
  if(MainForm.ActiveMDIChild<>nil)then
    if(MainForm.ActiveMDIChild.Classname='TEERForm')then
      RefreshTablesTreeView(TEERForm(MainForm.ActiveMDIChild).EERModel);
end;

procedure TPaletteModelFrom.FormActivate(Sender: TObject);
begin
  //Application.MainForm.SetFocus;
end;

procedure TPaletteModelFrom.AddBtnClick(Sender: TObject);
var theEERTable: TEERTable;
  theEvent: QCustomEventH;
begin
  if(MainForm.ActiveMDIChild<>nil)then
    if(MainForm.ActiveMDIChild.Classname='TEERForm')then
    begin
      //Create the new table
      theEERTable:=TEERForm(MainForm.ActiveMDIChild).EERModel.NewTable(100, 100, True);

      //Refresh the TreeView
      RefreshTablesTreeView(TEERForm(MainForm.ActiveMDIChild).EERModel);

      //Edit the new created table
      theEvent := QCustomEvent_create(QEventType_EditTable, theEERTable);
      sendCLXEvent(Application.MainForm.Handle, theEvent);
    end;
end;

procedure TPaletteModelFrom.DeleteBtnClick(Sender: TObject);
begin
  DeleteMIClick(self);
end;

procedure TPaletteModelFrom.FormDeactivate(Sender: TObject);
begin
  {if(Visible)then
    if(Not(DMMain.IsFormStayingOnTop(self)))then
      QApplication_sendEventAndDelete(Application.MainForm.Handle, QCustomEvent_create(QEventType_RestoreStayOnTopForms, self));}
end;

procedure TPaletteModelFrom.ScrolltoselectedObjectMIClick(Sender: TObject);
begin
  if(TablesTreeView.Selected<>nil)then
    if(Assigned(TablesTreeView.Selected.Data))and
      (TablesTreeView.Selected.ImageIndex<>1)and
      (TablesTreeView.Selected.ImageIndex<>2)then
    begin
      if(MainForm.ActiveMDIChild<>nil)then
        if(MainForm.ActiveMDIChild.Classname='TEERForm')then
          TEERForm(MainForm.ActiveMDIChild).ScrollInView(
            TEERObj(TablesTreeView.Selected.Data));
    end;
end;

procedure TPaletteModelFrom.ShowLinkedModelsMIShow(Sender: TObject);
begin
  MainForm.ShowLinkedModelsMIShow(Sender);
end;

procedure TPaletteModelFrom.ShowLinkedModelsMIClick(Sender: TObject);
begin
  MainForm.ShowLinkedModelsMIClick(Sender);
end;

procedure TPaletteModelFrom.RefreshLinkedObjectsMIClick(Sender: TObject);
begin
  MainForm.RefreshLinkedObjectsMIClick(Sender);
end;

procedure TPaletteModelFrom.TablesPBoxPaint(Sender: TObject);
begin
  //Paint Text (for XTF smooth fonts)
  TPaintBox(Sender).Canvas.Font.Color:=clBlack;
  TPaintBox(Sender).Canvas.TextOut(0, 0,
    DMMain.GetTranslatedMessage('', TPaintBox(Sender).Tag));
end;

procedure TPaletteModelFrom.TablesPBoxClick(Sender: TObject);
begin
  TabsImg.BringToFront;
  TablesPBox.BringToFront;
  ModelPBox.BringToFront;
  PageControl.ActivePage:=TablesSheet;

  OptionsImg.BringToFront;
end;

procedure TPaletteModelFrom.ModelPBoxClick(Sender: TObject);
begin
  //As long as the Model Page is not implemented
  Exit;

  Tabs2Img.BringToFront;
  TablesPBox.BringToFront;
  ModelPBox.BringToFront;
  PageControl.ActivePage:=ModelSheet;

  OptionsImg.BringToFront;
end;

procedure TPaletteModelFrom.TablesTreeViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var theNode: TTreeNode;
begin
  if(MainForm.ActiveMDIChild=nil)then
    Exit;

  theNode:=TablesTreeView.GetNodeAt(X, Y);

  //check if a table should be dragged
  if(theNode<>nil)then
    if(theNode.Data<>nil)then
      if(TObject(theNode.Data) is TEERTable)then
      begin
        TablesTreeView.Selected:=theNode;
        TablesTreeView.BeginDrag(False, 5);
      end;
end;

procedure TPaletteModelFrom.TablesTreeViewDragOver(Sender, Source: TObject;
  X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if(MainForm.ActiveMDIChild=nil)then
    Exit;

  Accept:=False;

  //Accept drag onto itself
  if(Source is TTreeView)then
    if(TTreeView(Source).Name='TablesTreeView')then
      Accept:=True;
end;

procedure TPaletteModelFrom.TablesTreeViewDragDrop(Sender, Source: TObject;
  X, Y: Integer);
var theNode: TTreeNode;
  i, newpos: integer;
  DraggedTable, TargetTable: TEERTable;
  SelectedItemsList: TList;
begin
  if(Source is TTreeView)and(MainForm.ActiveMDIChild<>nil)then
    if(TTreeView(Source).Name='TablesTreeView')then
    begin
      TargetTable:=nil;

      theNode:=TablesTreeView.GetNodeAt(X, Y);
      if(theNode<>nil)then
        if(theNode.Data<>nil)then
          if(TObject(theNode.Data) is TEERTable)then
            TargetTable:=TEERTable(theNode.Data);


      //Get gragged Table
      DraggedTable:=nil;
      if(TablesTreeView.Selected<>nil)then
        if(TablesTreeView.Selected.Data<>nil)then
          if(TObject(TablesTreeView.Selected.Data) is TEERTable)then
            DraggedTable:=TEERTable(TablesTreeView.Selected.Data);

      if(TargetTable=DraggedTable)then
        Exit;

      //One Table is dragged
      if(DraggedTable<>nil)then
      begin
        if(TargetTable<>nil)then
        begin
          if(TargetTable.OrderPos<DraggedTable.OrderPos)then
            newpos:=TargetTable.OrderPos
          else
            newpos:=TargetTable.OrderPos+1;

          //Move all Objects with an equal higher OrderPos down
          for i:=0 to EERModel.ComponentCount-1 do
            if(EERModel.Components[i].ClassParent=TEERObj)then
              if(TEERObj(EERModel.Components[i]).OrderPos>=newpos)then
                TEERObj(EERModel.Components[i]).OrderPos:=
                  TEERObj(EERModel.Components[i]).OrderPos+1;

          DraggedTable.OrderPos:=newpos;

          RefreshTablesTreeView(EERModel);
        end
        else
        begin
          //Move to last position
          newpos:=0;
          for i:=0 to EERModel.ComponentCount-1 do
            if(EERModel.Components[i].ClassParent=TEERObj)then
              if(TEERObj(EERModel.Components[i]).OrderPos>=newpos)then
              newpos:=TEERObj(EERModel.Components[i]).OrderPos+1;

          DraggedTable.OrderPos:=newpos;

          RefreshTablesTreeView(EERModel);
        end;
      end
      //Two or more tables might be dragged
      else
      begin
        SelectedItemsList:=TList.Create;
        try
          for i:=0 to TablesTreeView.Items.Count-1 do
            if(TablesTreeView.Items[i].Selected)and
              (TablesTreeView.Items[i].Data<>nil)and
              (TablesTreeView.Items[i].Level=0)then
              if(TObject(TablesTreeView.Items[i].Data) is TEERTable)then
              SelectedItemsList.Add(TablesTreeView.Items[i].Data);

          if(SelectedItemsList.Count>0)then
          begin
            //Dragged onto another table
            if(TargetTable<>nil)then
            begin
              if(TargetTable.OrderPos<TEERTable(SelectedItemsList[0]).OrderPos)then
                newpos:=TargetTable.OrderPos
              else
                newpos:=TargetTable.OrderPos+1;

              //Move all Objects with an equal higher OrderPos down
              for i:=0 to EERModel.ComponentCount-1 do
                if(EERModel.Components[i].ClassParent=TEERObj)then
                  if(TEERObj(EERModel.Components[i]).OrderPos>=newpos)then
                    TEERObj(EERModel.Components[i]).OrderPos:=
                      TEERObj(EERModel.Components[i]).OrderPos+SelectedItemsList.Count;


              for i:=0 to SelectedItemsList.Count-1 do
                TEERTable(SelectedItemsList[i]).OrderPos:=newpos+i;

              RefreshTablesTreeView(EERModel);
            end
            else
            begin
              //Move to last position
              newpos:=0;
              for i:=0 to EERModel.ComponentCount-1 do
                if(EERModel.Components[i].ClassParent=TEERObj)then
                  if(TEERObj(EERModel.Components[i]).OrderPos>=newpos)then
                  newpos:=TEERObj(EERModel.Components[i]).OrderPos+1;

              for i:=0 to SelectedItemsList.Count-1 do
                TEERTable(SelectedItemsList[i]).OrderPos:=newpos+i+1;

              RefreshTablesTreeView(EERModel);
            end;
          end;
        finally
          SelectedItemsList.Free;
        end;
      end;
    end;
end;

procedure TPaletteModelFrom.ReorderTablesbyNameMIClick(Sender: TObject);
var ObjList: TList;
  NumberList: TStringList;
  i: integer;
begin
  ObjList:=TList.Create;
  NumberList:=TStringList.Create;
  try
    EERModel.GetEERObjectList([EERTable], ObjList);
    EERModel.SortEERObjectListByObjName(ObjList);

    for i:=0 to ObjList.Count-1 do
      NumberList.Add(FormatFloat('00000000', TEERTable(ObjList[i]).OrderPos));

    NumberList.Sort;

    for i:=0 to ObjList.Count-1 do

      TEERTable(ObjList[i]).OrderPos:=StrToInt(NumberList[i]);

    RefreshTablesTreeView(EERModel);
  finally
    ObjList.Free;
    NumberList.Free;
  end;
end;

procedure TPaletteModelFrom.ReorderTablesbyRegionMIClick(Sender: TObject);
var ObjList, RegionList, AlreadySorted: TList;
  NumberList: TStringList;
  i, j, k: integer;
begin
  ObjList:=TList.Create;
  RegionList:=TList.Create;
  AlreadySorted:=TList.Create;
  NumberList:=TStringList.Create;
  try
    //Build NumberList
    EERModel.GetEERObjectList([EERTable], ObjList);
    EERModel.SortEERObjectListByObjName(ObjList);

    for i:=0 to ObjList.Count-1 do
      NumberList.Add(FormatFloat('00000000', TEERTable(ObjList[i]).OrderPos));

    NumberList.Sort;

    //Get regions
    EERModel.GetEERObjectList([EERRegion], RegionList);
    EERModel.SortEERObjectListByObjName(RegionList);

    k:=0;
    for i:=0 to RegionList.Count-1 do
    begin
      ObjList.Clear;
      TEERRegion(RegionList[i]).GetEERObjsInRegion([EERTable], ObjList, False);
      EERModel.SortEERObjectListByObjName(ObjList);

      for j:=0 to ObjList.Count-1 do
      begin
        //If the table has not already been sorted (on two regions for the same time)
        if(AlreadySorted.IndexOf(ObjList[j])=-1)then
        begin
          TEERTable(ObjList[j]).OrderPos:=StrToInt(NumberList[k]);
          AlreadySorted.Add(ObjList[j]);
          inc(k);
        end;
      end;
    end;

    //Now sort the tables which are on no region
    EERModel.GetEERObjectList([EERTable], ObjList);
    EERModel.SortEERObjectListByObjName(ObjList);

    for i:=0 to ObjList.Count-1 do
      if(AlreadySorted.IndexOf(ObjList[i])=-1)then
      begin
        TEERTable(ObjList[i]).OrderPos:=StrToInt(NumberList[k]);
        inc(k);
      end;

    RefreshTablesTreeView(EERModel);
  finally
    ObjList.Free;
    RegionList.Free;
    NumberList.Free;
    AlreadySorted.Free;
  end;
end;

end.

⌨️ 快捷键说明

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