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

📄 main.pas

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

    SpaceDown: Boolean;

    keycounter: integer;

    //The EditorQueryForm which is docked to the QueryPnl
    DockedEditorQueryForm: TForm;
  end;

var
  MainForm: TMainForm;

implementation

{$R *.xfm}

uses MainDM, ZoomSel, EER,
  PaletteTools, PaletteModel, PaletteDatatypes, OptionsModel, Options,
  EERPageSetup, PaletteNav, EERExportSQLScript, DBConnSelect,
  EERReverseEngineering, EERSynchronisation, EERStoreInDatabase, Splash,
  EERDM, EditorTable, EditorRelation, EditorRegion, EditorNote,
  EditorImage, GUIDM, DBDM, EditorQuery, EditorQueryDragTarget,
  Tips, EERPlaceModel, DBEERDM, EERExportImportDM;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnEvent:=DoApplicationEvent;

  //Get Version string, defined in DBDesigner4.dpr
  Version:=SplashForm.VersionLbl.Caption;

  //Initialize DMMain and DMGUI
  DMMain:=TDMMain.Create(self);
  DMGUI:=TDMGUI.Create(self);

  //Initialize Language Translation
  DMMain.LoadLanguageFromIniFile;
  DMMain.LoadTranslatedMessages;

  //Initialize DMDB and DMEER
  DMDB:=TDMDB.Create(self);
  DMEER:=TDMEER.Create(self);

  DMEERExportImport:=TDMEERExportImport.Create(self);

  DMMain.InitForm(self);

  //Create the QueryDragTarget for all models
  EditorQueryDragTargetForm:=TEditorQueryDragTargetForm.Create(self);

  SetMenuItemChecks;

  KeyWasUp:=True;

  SpaceDown:=False;

  Application.ShowMainForm:=True;

  //WindowState:=wsMaximized;

  Application.OnRestore:=ApplicationRestore;

  //List for Tab key to hide palettes
  TabHidePalettes:=TList.Create;

  TabHasBeenPressed:=False;
  TabHasBeenPressedBeforeInactive:=False;

  PluginList:=TStringList.Create;

  //Restore original size of ToolsPnls
  DesignToolsPnl.Height:=487;
  QueryToolsPnl.Height:=254;

{$IFDEF LINUX}
  CheckLinuxDesktopFile;
{$ENDIF}

  ActivateDeactivateCounter:=0;
  ApplicationIsDeactivated:=False;

  //Enable Timer for Palettes and Model load
  ShowPalettesTmr.Enabled:=True;

{$IFNDEF USE_IXMLDBMODELType}
  ImportERwin41XMLModelMI.Enabled:=False;
{$ENDIF}
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  TabHidePalettes.Free;
  PluginList.Free;

  DMMain.SaveWinPos(self, True);

  EditorQueryDragTargetForm.Free;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //Clear tmpindices
  DMMain.DelFilesFromDir(DMMain.SettingsPath, 'tmpindex*.*');

  TEditorQueryForm(DockedEditorQueryForm).StoreLayout(DMGUI.DockedQueryPnlMode);
end;

procedure TMainForm.ZoomLblClick(Sender: TObject);
begin
  if(ActiveMDIChild<>nil)then
  begin
    if(ActiveMDIChild.Classname='TEERForm')then
    begin
      ZoomSelForm:=TZoomSelForm.Create(self);
      try
        ZoomSelForm.Left:=Left+6;
        ZoomSelForm.Top:=Top+Height-ZoomSelForm.Height+15;
        ZoomSelForm.FocusZoom(TEERForm(ActiveMDIChild).EERModel.GetZoomFac);
        if(ZoomSelForm.ShowModal=mrOK)then
          TEERForm(ActiveMDIChild).EERModel.SetZoomFac(ZoomSelForm.ZoomFac);
      finally
        ZoomSelForm.Free;
      end;

      SetFocus;
    end;
  end;
end;

procedure TMainForm.ExitMIClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.AboutMIClick(Sender: TObject);
begin
  SplashForm:=TSplashForm.Create(self);
  try
    SplashForm.VersionLbl.Caption:=Version;
    SplashForm.ShowModal;
  finally
    //SplashForm.Free;
  end;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  //WindowState:=wsMaximized;
  DMMain.RestoreWinPos(self, True);
end;

procedure TMainForm.SaveAsMIClick(Sender: TObject);
begin
  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
    begin
      TEERForm(ActiveMDIChild).SaveAs;
    end;
end;

procedure TMainForm.SaveMIClick(Sender: TObject);
begin
  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
    begin
      if(TEERForm(ActiveMDIChild).EERModel.ModelFilename='')or(CompareText(Copy(TEERForm(ActiveMDIChild).EERModel.ModelFilename, 1, Length('Noname')), 'Noname')=0)then
        SaveAsMIClick(self)
      else
      begin
        TEERForm(ActiveMDIChild).EERModel.SaveToFile(TEERForm(ActiveMDIChild).EERModel.ModelFilename);

        TEERForm(ActiveMDIChild).EERModel.IsChanged:=False;
        DisableSaveImgs;

        DMGUI.SetStatusCaption(DMMain.GetTranslatedMessage('The model was successfully saved to %s.', 198, TEERForm(ActiveMDIChild).EERModel.ModelFilename));
      end;
    end;
end;

procedure TMainForm.OpenFile(fname: string; AppendModel: Boolean);
var theEERForm: TEERForm;
  theModelStr: TStringList;
begin
  if(Not(FileExists(fname)))then
    raise EInOutError.Create(DMMain.GetTranslatedMessage('File not found:', 11)+#13#10+
      fname);

  if(AppendModel)and(ActiveMDIChild<>nil)then
  begin
    theEERForm:=TEERForm(ActiveMDIChild);

    //Get new IDs for objects in the file
    theModelStr:=TStringList.Create;
    try
      theModelStr.LoadFromFile(fname);
      theModelStr.Text:=DMEER.AssignNewIDsToEERObjects(theModelStr.Text);

      //Create temp file
      fname:=DMMain.SettingsPath+'plugin_tmp.xml';
      DeleteFile(fname);
      theModelStr.SaveToFile(fname);
    finally
      theModelStr.Free;
    end;
  end
  else
  begin
    theEERForm:=nil;

    if(ActiveMDIChild<>nil)then
      if(ActiveMDIChild.Classname='TEERForm')then
        if(CompareText(Copy(TEERForm(ActiveMDIChild).EERModel.ModelFilename, 1, 6), 'Noname')=0)and
          (Not(TEERForm(ActiveMDIChild).EERModel.IsChanged))then
          theEERForm:=TEERForm(ActiveMDIChild);

    if(theEERForm=nil)then
      theEERForm:=TEERForm(NewEERModel);
  end;

  theEERForm.EERModel.LoadFromFile(fname, Not(((AppendModel)and(ActiveMDIChild<>nil))), ((AppendModel)and(ActiveMDIChild<>nil)),
    Not(((AppendModel)and(ActiveMDIChild<>nil))), ((AppendModel)and(ActiveMDIChild<>nil)));

  //Add file to recentopenfiles list
  if(Not((AppendModel)and(ActiveMDIChild<>nil)))then
  begin
    DMGUI.AddFileToRecentFilesList(fname);
  end;

  //Delete temp file if the model was appended
  if(AppendModel)and(ActiveMDIChild<>nil)then
    DeleteFile(fname);

  theEERForm.WindowState:=wsMaximized;

  //Because of Delphi Bug -> MainMenu is aligned right
  //Refresh Menu (because of CLX bug)
  {Menu:=nil;
  Menu:=MainMenu;}
end;

procedure TMainForm.DisplayEntityLevelMIClick(Sender: TObject);
begin
  TMenuItem(Sender).Checked:=True;
  DMEER.DisplayMode:=TMenuItem(Sender).Tag;

  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
      TEERForm(ActiveMDIChild).EERModel.Refresh;
end;

procedure TMainForm.PhysicalSchemaLevelMIClick(Sender: TObject);
begin
  TMenuItem(Sender).Checked:=Not(TMenuItem(Sender).Checked);
  DMEER.DisplayPhysicalSchema:=TMenuItem(Sender).Checked;

  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
      TEERForm(ActiveMDIChild).EERModel.Refresh;
end;

procedure TMainForm.NewMIClick(Sender: TObject);
var theForm: TForm;
begin
  theForm:=NewEERModel;

  theForm.WindowState:=wsMaximized;
end;

function TMainForm.NewEERModel: TForm;
var theEERForm: TEERForm;
begin
  theEERForm:=TEERForm.Create(self);

  //theEERForm.WindowState:=wsMaximized;
  AddToMDIWindowMenu(theEERForm);

  NewEERModel:=theEERForm;
end;

procedure TMainForm.AddToMDIWindowMenu(theForm: TForm);
var theMenuItem: TMenuItem;
  i: integer;
begin
  //Create the ChildForms MenuItem in the Window Menu
  for i:=0 to WindowsMI.Count-1 do
    if(WindowsMI.Items[i].GroupIndex=59)then
      WindowsMI.Items[i].Checked:=False;

  theMenuItem:=TMenuItem.Create(self);
  theMenuItem.Name:=theForm.Name+'MI';
  theMenuItem.Caption:=TEERForm(theForm).EERModel.GetModelName;
  theMenuItem.GroupIndex:=59;
  theMenuItem.RadioItem:=True;
  theMenuItem.Checked:=True;
  theMenuItem.OnClick:=MDIWindowMIClick;

  TEERForm(theForm).theFormMenuItem:=theMenuItem;

  WindowsMI.Add(theMenuItem);
end;

procedure TMainForm.MDIWindowMIClick(Sender: TObject);
var i: integer;
begin
  //Set Focus to selected ChildForm
  for i:=0 to WindowsMI.Count-1 do
    if(WindowsMI.Items[i].GroupIndex=59)then
      WindowsMI.Items[i].Checked:=False;

  for i:=0 to MDIChildCount-1 do
    if(TEERForm(MDIChildren[I]).theFormMenuItem=Sender)then
      TEERForm(MDIChildren[I]).SetFocus;

  TMenuItem(Sender).Checked:=True;
end;

procedure TMainForm.CascadeMIClick(Sender: TObject);
begin
  Cascade;
end;

procedure TMainForm.TileMIClick(Sender: TObject);
begin
  Tile;
end;

procedure TMainForm.ToolsMIClick(Sender: TObject);
begin
  ToolsMI.Checked:=Not(ToolsMI.Checked);
  PaletteToolsForm.Visible:=ToolsMI.Checked;
end;

procedure TMainForm.ToolsdockedMIClick(Sender: TObject);
begin
  ToolsdockedMI.Checked:=Not(ToolsdockedMI.Checked);
  ToolsPnl.Visible:=ToolsdockedMI.Checked;
end;

procedure TMainForm.DatatypesMIClick(Sender: TObject);
begin
  DatatypesMI.Checked:=Not(DatatypesMI.Checked);
  PaletteDataTypesForm.Visible:=DatatypesMI.Checked;
end;

procedure TMainForm.DBModelMIClick(Sender: TObject);
begin
  DBModelMI.Checked:=Not(DBModelMI.Checked);
  PaletteModelFrom.Visible:=DBModelMI.Checked;
end;

procedure TMainForm.CloseMIClick(Sender: TObject);
begin
  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
      ActiveMDIChild.Close;
end;

procedure TMainForm.EERModelOptionsMIClick(Sender: TObject);
begin
  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
    begin
      OptionsModelForm:=TOptionsModelForm.Create(self);
      try
        OptionsModelForm.SetModel(TEERForm(ActiveMDIChild).EERModel);
        OptionsModelForm.ShowModal;
      finally
        OptionsModelForm.Free;
      end;
    end;
end;

procedure TMainForm.DeleteMIClick(Sender: TObject);
var ObjectList: TList;
  i, j: integer;
  s: string;
begin
  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
    begin
      ObjectList:=TList.Create;
      try
        TEERForm(ActiveMDIChild).EERModel.GetEERObjectList([EERAllObjects], ObjectList, True);

        //Add ALL relations from tables
        for i:=0 to ObjectList.Count-1 do
          if(TEERObj(ObjectList[i]) is TEERTable)then
          begin
            //Add starting Relations
            for j:=0 to TEERTable(ObjectList[i]).RelStart.Count-1 do
              if(ObjectList.IndexOf(TEERTable(ObjectList[i]).RelStart[j])=-1)then
                ObjectList.Add(TEERTable(ObjectList[i]).RelStart[j]);

            //Add ending Relations
            for j:=0 to TEERTable(ObjectList[i]).RelEnd.Count-1 do
              if(ObjectList.IndexOf(TEERTable(ObjectList[i]).RelEnd[j])=-1)then
                ObjectList.Add(TEERTable(ObjectList[i]).RelEnd[j]);

          end;

        TEERForm(ActiveMDIChild).EERModel.SortEERObjectListByObjName(ObjectList);

        s:='';
        for i:=0 to ObjectList.Count-1 do
          s:=s+TEERObj(ObjectList[i]).ObjName+', ';

        s:=Copy(s, 1, Length(s)-2);

        if(MessageDlg('Are you sure you want to delete the selected Objects?'+#13#10+
          'The following Objects will be deleted:'+#13#10#13#10+
          s, mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
          TEERForm(ActiveMDIChild).EERModel.DeleteSelectedObjs;
      finally
        ObjectList.Free;
      end;
    end;
end;

procedure TMainForm.DeleteMIShow(Sender: TObject);
begin
  TMenuItem(Sender).Enabled:=False;

  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
      if(TEERForm(ActiveMDIChild).EERModel.GetSelectedObjsCount>0)then
        TMenuItem(Sender).Enabled:=True;

end;

procedure TMainForm.NotationStandardMIClick(Sender: TObject);
begin
  TMenuItem(Sender).Checked:=Not(TMenuItem(Sender).Checked);
  DMEER.Notation:=TMenuItem(Sender).Tag;

  if(ActiveMDIChild<>nil)then
    if(ActiveMDIChild.Classname='TEERForm')then
    begin
      TEERForm(ActiveMDIChild).EERModel.SetZoomFac(TEERForm(ActiveMDIChild).EERModel.GetZoomFac);
      TEERForm(ActiveMDIChild).EERModel.Refresh;
    end;

⌨️ 快捷键说明

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