浏览代码

云版,打开项目过程中,切换界面回项目管理,报错。
如有时间,这部分改动及原因代码,应重构,目前严重背离设计模式。
不过,我断定,肯定是没有时间的。

MaiXinRong 9 年之前
父节点
当前提交
f8b55653b5
共有 3 个文件被更改,包括 42 次插入25 次删除
  1. 16 16
      Forms/MainFrm.dfm
  2. 11 7
      Forms/MainFrm.pas
  3. 15 2
      Frames/ProjectManagerFme.pas

+ 16 - 16
Forms/MainFrm.dfm

@@ -20,8 +20,8 @@ object MainForm: TMainForm
   TextHeight = 12
   object jtsProjects: TJimTabSet
     Left = 0
-    Top = 49
-    Width = 734
+    Top = 48
+    Width = 742
     Height = 21
     Align = alTop
     BackgroundColor = clGradientInactiveCaption
@@ -45,8 +45,8 @@ object MainForm: TMainForm
   end
   object dxStatusBar: TdxStatusBar
     Left = 0
-    Top = 480
-    Width = 734
+    Top = 484
+    Width = 742
     Height = 20
     Panels = <
       item
@@ -78,12 +78,12 @@ object MainForm: TMainForm
     object dxStatusBarContainer2: TdxStatusBarContainerControl
       Left = 604
       Top = 2
-      Width = 128
+      Width = 136
       Height = 16
       object ProgressBar: TProgressBar
         Left = 0
         Top = 0
-        Width = 128
+        Width = 136
         Height = 16
         Align = alClient
         Max = 200
@@ -93,9 +93,9 @@ object MainForm: TMainForm
   end
   object jpsMain: TJimPages
     Left = 0
-    Top = 70
-    Width = 734
-    Height = 410
+    Top = 69
+    Width = 742
+    Height = 415
     ActivePage = jpsMainProjectsManager
     ActivePageIndex = 0
     Align = alClient
@@ -103,8 +103,8 @@ object MainForm: TMainForm
     object jpsMainProjectsManager: TJimPage
       Left = 0
       Top = 0
-      Width = 734
-      Height = 410
+      Width = 742
+      Height = 415
       TabName = 'ProjectsManager'
       Caption = 'ProjsMgr'
       object pnlUser: TPanel
@@ -201,8 +201,8 @@ object MainForm: TMainForm
     object jpsMainProjects: TJimPage
       Left = 0
       Top = 0
-      Width = 734
-      Height = 410
+      Width = 742
+      Height = 415
       TabName = 'Projects'
       Caption = 'Projects'
       object jpsProjects: TJimPages
@@ -220,7 +220,7 @@ object MainForm: TMainForm
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -12
-    Font.Name = #24494#36719#38597#40657
+    Font.Name = #23435#20307
     Font.Style = []
     Bars = <
       item
@@ -270,7 +270,7 @@ object MainForm: TMainForm
         Caption = #24037#20855#26639
         DockedDockingStyle = dsTop
         DockedLeft = 0
-        DockedTop = 27
+        DockedTop = 26
         DockingStyle = dsTop
         FloatLeft = 484
         FloatTop = 279
@@ -379,7 +379,7 @@ object MainForm: TMainForm
     DockControlHeights = (
       0
       0
-      49
+      48
       0)
     object dxsiFile: TdxBarSubItem
       Caption = #25991#20214'(&F)'

+ 11 - 7
Forms/MainFrm.pas

@@ -204,7 +204,7 @@ type
     procedure UpdateProgressBar(APosition: Integer);
     procedure UpdateProgressHint(const AHint: string);
 
-    procedure CreateProjectView(ARec: TsdDataRecord);
+    function CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
 
     procedure LocateProjectView(AIndex: Integer);
     procedure DeleteProjectView(AIndex: Integer);
@@ -217,7 +217,7 @@ type
     procedure UpdateProgress(APos: Integer; const AHint: string);
     procedure LocateProject(AProjectID: Integer);
     function HasOpened(AProjectID: Integer): Boolean;
-    procedure OpenProject(ARec: TsdDataRecord);
+    function OpenProject(ARec: TsdDataRecord): TProjectFrame;
 
     property CurProjectFrame: TProjectFrame read GetCurProjectFrame;
     property ProjectManagerFrame: TProjectManagerFrame read FProjectManagerFrame;
@@ -361,12 +361,15 @@ begin
   FProjectManagerFrame.Free;
 end;
 
-procedure TMainForm.OpenProject(ARec: TsdDataRecord);
+function TMainForm.OpenProject(ARec: TsdDataRecord): TProjectFrame;
 begin
   if not HasOpened(ARec.ValueByName('ID').AsInteger) then
-    CreateProjectView(ARec)
+    Result := CreateProjectView(ARec)
   else
+  begin
     LocateProject(ARec.ValueByName('ID').AsInteger);
+    Result := CurProjectFrame;
+  end;
 end;
 
 function TMainForm.HasOpened(AProjectID: Integer): Boolean;
@@ -381,7 +384,7 @@ begin
     jpsMain.ActivePage := jpsMainProjects;
 end;
 
-procedure TMainForm.CreateProjectView(ARec: TsdDataRecord);
+function TMainForm.CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
 
   function CreateNewProjectPage: TJimPage;
   begin
@@ -396,7 +399,7 @@ procedure TMainForm.CreateProjectView(ARec: TsdDataRecord);
     jtsProjects.TabIndex := Result;
   end;
 
-  procedure CreateProjectFrame(AProjectData: TProjectData; APage: TJimPage);
+  function CreateProjectFrame(AProjectData: TProjectData; APage: TJimPage): TProjectFrame;
   var
     ProjectFrame: TProjectFrame;
   begin
@@ -404,6 +407,7 @@ procedure TMainForm.CreateProjectView(ARec: TsdDataRecord);
     FProjectFrames.Add(ProjectFrame);
     ProjectFrame.Parent := APage;
     ProjectFrame.Align := alClient;
+    Result := ProjectFrame;
   end;
 
 var
@@ -412,7 +416,7 @@ begin
   jpsMain.ActivePage := jpsMainProjects;
   jimPage := CreateNewProjectPage;
   CreateNewProjectTab(ARec.ValueByName('Name').AsString, jimPage);
-  CreateProjectFrame(OpenProjectManager.Open(ARec), jimPage);
+  Result := CreateProjectFrame(OpenProjectManager.Open(ARec), jimPage);
   ProjectManager.AddOpenTenderBackup(ARec.ValueByName('ID').AsInteger);
 end;
 

+ 15 - 2
Frames/ProjectManagerFme.pas

@@ -153,7 +153,7 @@ implementation
 uses
   MainFrm, UtilMethods, ProjectCommands, Globals, ConfigDoc, ConstUnit,
   WebNewTenderFrm, PHPWebDm, Math, CslJson, mProgressFrm, ProgressHintFrm,
-  ShellAPI;
+  ShellAPI, ProjectFme;
 
 {$R *.dfm}
 
@@ -370,6 +370,8 @@ var
     Result := True;
   end;
 
+var
+  CurProjectFme: TProjectFrame;
 begin
   // 打开前先下载更新
   Screen.Cursor := crHourGlass;
@@ -391,10 +393,21 @@ begin
         Exit;
     end;
 
-    MainForm.OpenProject(vRec);
+    CurProjectFme := MainForm.OpenProject(vRec);
 
     if G_IsCloud then
     begin
+      // 云版,如果用户在打开项目的过程中,切换界面回项目管理,MainFrom.CurProjectFrame值为nil,后面的调用,包括MainForm.actnCloseProject.Execute都会出错
+      // 其中由于前面调用的MainForm.LocateProject触发的一系列事件中,调用到了SetPropertyVisible,其中执行了Screen.Cursor := crDefault
+      // 导致鼠标状态还原,用户可以点击,单机版下测试,属性状态为crHourGlass时,亦可以切换会项目管理
+      // 按逻辑,CheckFileAndCloudCheckerList这种方法不应在界面,应在控制器,亦不可直接调用MainForm.actnCloseProject.Execute
+      // 怕按逻辑改动引起更多Bug,故继续错下去,检查MainForm.CurProjectFrame是否正确,并再次禁用鼠标
+      if CurProjectFme <> MainForm.CurProjectFrame then
+      begin
+        Screen.Cursor := crHourGlass;
+        MainForm.LocateProject(CurProjectFme.ProjectData.ProjectID);
+      end;
+
       if not MainForm.CurProjectFrame.CheckFileAndCloudChekerList then
       begin
         sHint := '项目校验:“' + FBidName + '”文件中的审核人和云端的审核人不一致,' +