Forráskód Böngészése

恢复代码遗漏

MaiXinRong 9 éve
szülő
commit
fba2cdb115
3 módosított fájl, 104 hozzáadás és 30 törlés
  1. 42 17
      Frames/BillsCompileFme.pas
  2. 40 4
      Frames/BillsMeasureFme.pas
  3. 22 9
      Frames/ProjectManagerFme.pas

+ 42 - 17
Frames/BillsCompileFme.pas

@@ -5,7 +5,7 @@ interface
 uses
   BillsCompileDm, UtilMethods, BillsClipboard, sdIDTree, BatchReplaceBillsFrm,
   CheckAndClearFrm, DealBillsFrm, BillsPasteSelectFrm,
-  sdDB, BillsTree,
+  sdDB, BillsTree, sdIDTreeCells,
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
   Dialogs, ActnList, sdGridDBA, sdGridTreeDBA, dxBar, ZJGrid, StdCtrls,
   ExtCtrls;
@@ -67,8 +67,6 @@ type
     procedure actnImportGclBillsToXmjUpdate(Sender: TObject);
     procedure actnImportGclBillsToXmjExecute(Sender: TObject);
     procedure actnImportPlaneFxBillsToXmjExecute(Sender: TObject);
-    procedure zgBillsCompileCellTextChanged(Sender: TObject; Col,
-      Row: Integer);
   private
     FBillsCompileData: TBillsCompileData;
     FShowIDField: Boolean;
@@ -82,6 +80,8 @@ type
 
     procedure SetShowIDField(AValue: Boolean);
 
+    procedure ExpandMouseDown(AGridCell: TzjCell);
+
     procedure BeginExpandNode;
     procedure EndExpandNode;
 
@@ -214,6 +214,7 @@ begin
   stdBillsCompile.IDTree := FBillsCompileData.BillsCompileTree;
   with TProjectData(FBillsCompileData.ProjectData) do
     stdBillsCompile.Column('LockedInfo').ReadOnly := ProjProperties.PhaseCount > 0;
+  zgBillsCompile.OnExpandMouseDown := ExpandMouseDown;
 end;
 
 destructor TBillsCompileFrame.Destroy;
@@ -229,7 +230,13 @@ begin
     dxpmBillsCompile.PopupFromCursorPos
   else
   begin
-
+    if CheckExprsColumn then
+      laEdtExprs.Text := zgBillsCompile.CurCell.EditText
+    else
+      laEdtExprs.Text := '';
+    with stdBillsCompile.DataView do
+      if Assigned(Current) then
+        laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
   end;
 end;
 
@@ -283,10 +290,7 @@ begin
   iCol := zgBillsCompile.CurCol-zgBillsCompile.FixedColCount;
   Result := (iCol = stdBillsCompile.VisibleCol('OrgQuantity'))
          or (iCol = stdBillsCompile.VisibleCol('MisQuantity'))
-         or (iCol = stdBillsCompile.VisibleCol('OthQuantity'))
-         or (iCol = stdBillsCompile.VisibleCol('OrgTotalPrice'))
-         or (iCol = stdBillsCompile.VisibleCol('MisTotalPrice'))
-         or (iCol = stdBillsCompile.VisibleCol('OthTotalPirce'));
+         or (iCol = stdBillsCompile.VisibleCol('OthQuantity'));
 end;
 
 procedure TBillsCompileFrame.laEdtExprsKeyDown(Sender: TObject;
@@ -541,6 +545,7 @@ end;
 
 procedure TBillsCompileFrame.BeginExpandNode;
 begin
+  zgBillsCompile.BeginUpdate;
   zgBillsCompile.OnCellGetColor := nil;
   BeginUpdateWindow(zgBillsCompile.Handle);
   stdBillsCompile.DisableControl;
@@ -551,7 +556,7 @@ begin
   stdBillsCompile.EnableControl;
   EndUpdateWindow(zgBillsCompile.Handle);
   zgBillsCompile.OnCellGetColor := zgBillsCompileCellGetColor;
-  zgBillsCompile.Invalidate;
+  zgBillsCompile.EndUpdate;
 end;
 
 procedure TBillsCompileFrame.RefreshPhase_Stage;
@@ -609,16 +614,36 @@ begin
   end;
 end;
 
-procedure TBillsCompileFrame.zgBillsCompileCellTextChanged(Sender: TObject;
-  Col, Row: Integer);
+procedure TBillsCompileFrame.ExpandMouseDown(AGridCell: TzjCell);
+
+  procedure CommonExpand(vNode: TsdIDTreeNode);
+  begin
+    AGridCell.Grid.BeginUpdate;
+    vNode.Expanded := not vNode.Expanded;
+    AGridCell.Grid.EndUpdate;
+    AGridCell.Grid.InvalidateView(AGridCell.ViewRect);
+  end;
+
+  procedure QuikExpand(vNode: TsdIDTreeNode);
+  begin
+    Screen.Cursor := crHourGlass;
+    BeginExpandNode;
+    try
+      vNode.Expanded := not vNode.Expanded;
+    finally
+      EndExpandNode;
+      Screen.Cursor := crDefault;
+    end;
+  end;
+
+var
+  stnNode: TsdIDTreeNode;
 begin
-  if CheckExprsColumn then
-    laEdtExprs.Text := zgBillsCompile.CurCell.EditText
+  stnNode := TsdIDTreeCell(AGridCell).TreeNode;
+  if stnNode.PosterityCount > 10000 then
+    QuikExpand(stnNode)
   else
-    laEdtExprs.Text := '';
-  with stdBillsCompile.DataView do
-    if Assigned(Current) then
-      laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
+    CommonExpand(stnNode);
 end;
 
 end.

+ 40 - 4
Frames/BillsMeasureFme.pas

@@ -3,7 +3,7 @@ unit BillsMeasureFme;
 interface
 
 uses
-  BillsMeasureDm, UtilMethods, BillsClipboard,
+  BillsMeasureDm, UtilMethods, BillsClipboard, sdIDTreeCells,
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ZJGrid, ComCtrls, ToolWin, StdCtrls, ExtCtrls, sdGridDBA,
   sdGridTreeDBA, sdDB, ActnList, dxBar, sdIDTree, JimLabels;
@@ -60,6 +60,8 @@ type
     FOnAfterSetBookmark: TBookmarkRefreshEvent;
     FShowAlias: Boolean;
 
+    procedure ExpandMouseDown(AGridCell: TzjCell);
+
     function CheckExprsColumn: Boolean;
 
     procedure SetColumnVisible(const AColumn: string; AVisible: Boolean);
@@ -114,6 +116,7 @@ begin
   inherited Create(AProjectFrame);
   FBillsMeasureData := ABillsMeasureData;
   stdBillsMeasure.IDTree := FBillsMeasureData.BillsMeasureTree;
+  zgBillsMeasure.OnExpandMouseDown := ExpandMouseDown;
 end;
 
 destructor TBillsMeasureFrame.Destroy;
@@ -205,8 +208,8 @@ begin
   // 书签
   if TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0 then
   begin
-    StageRec := TBillsIDTreeNode(stnNode).StageRec;
-    if Assigned(StageRec) and StageRec.HasBookMark.AsBoolean then
+    StageRec := stnNode.StageRec;
+    if Assigned(StageRec) and StageRec.HasBookmark.AsBoolean then
       AColor := $00CFE2F9;
   end;
   // 根据节点创建期数底色不同
@@ -586,6 +589,7 @@ end;
 
 procedure TBillsMeasureFrame.BeginExpandNode;
 begin
+  zgBillsMeasure.BeginUpdate;
   zgBillsMeasure.OnCellGetColor := nil;
   BeginUpdateWindow(zgBillsMeasure.Handle);
   stdBillsMeasure.DisableControl;
@@ -596,7 +600,7 @@ begin
   stdBillsMeasure.EnableControl;
   EndUpdateWindow(zgBillsMeasure.Handle);
   zgBillsMeasure.OnCellGetColor := zgBillsMeasureCellGetColor;
-  zgBillsMeasure.Invalidate;
+  zgBillsMeasure.EndUpdate;
 end;
 
 procedure TBillsMeasureFrame.ExpandCurPhase;
@@ -655,4 +659,36 @@ begin
   stdBillsMeasure.Column('PM_AddTotalPrice').Visible := AValue;
 end;
 
+procedure TBillsMeasureFrame.ExpandMouseDown(AGridCell: TzjCell);
+
+  procedure CommonExpand(vNode: TsdIDTreeNode);
+  begin
+    AGridCell.Grid.BeginUpdate;
+    vNode.Expanded := not vNode.Expanded;
+    AGridCell.Grid.EndUpdate;
+    AGridCell.Grid.InvalidateView(AGridCell.ViewRect);
+  end;
+
+  procedure QuikExpand(vNode: TsdIDTreeNode);
+  begin
+    Screen.Cursor := crHourGlass;
+    BeginExpandNode;
+    try
+      vNode.Expanded := not vNode.Expanded;
+    finally
+      EndExpandNode;
+      Screen.Cursor := crDefault;
+    end;
+  end;
+
+var
+  stnNode: TsdIDTreeNode;
+begin
+  stnNode := TsdIDTreeCell(AGridCell).TreeNode;
+  if stnNode.PosterityCount > 10000 then
+    QuikExpand(stnNode)
+  else
+    CommonExpand(stnNode);
+end;
+
 end.

+ 22 - 9
Frames/ProjectManagerFme.pas

@@ -623,16 +623,20 @@ procedure TProjectManagerFrame.zgProjectsDrawCellText(ACanvas: TCanvas;
   const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
   const Text: String; var ADefaultDraw: Boolean);
 
-  procedure GetBitmap(AImage: TBitmap);
+  procedure GetBitmap(AImage: TBitmap; ANode: TsdIDTreeNode);
   begin
-    with stdProjects.IDTree.Items[ACoord.Y - 1] do
-      if Rec.ValueByName('Type').AsInteger = 0 then
-        if Expanded and HasChildren then
+    if Assigned(ANode) and Assigned(ANode.Rec) then
+    begin
+      if ANode.Rec.ValueByName('Type').AsInteger = 0 then
+        if ANode.Expanded and ANode.HasChildren then
           MainForm.Images.GetBitmap(34, AImage)
         else
           MainForm.Images.GetBitmap(34, AImage)
       else
         MainForm.Images.GetBitmap(11, AImage);
+    end
+    else
+      AImage := nil;
   end;
 
 const
@@ -642,13 +646,15 @@ var
   Img: TBitmap;
   Cell: TZjCell;
   rImg: TRect;
+  vNode: TsdIDTreeNode;
 begin
   if (ACoord.X = 1) and (ACoord.Y > zgProjects.FixedRowCount - 1) then
   begin
     Cell := zgProjects.Cells[ACoord.X, ACoord.Y];
     Img := TBitmap.Create;
     try
-      GetBitmap(Img);
+      vNode := stdProjects.IDTree.Items[ACoord.Y-zgProjects.FixedRowCount];
+      GetBitmap(Img, vNode);
       case Cell.Align of
         gaTopLeft, gaTopCenter, gaTopRight:
           rImg := Rect(ARect.Left + 2, ARect.Top, ARect.Left + rIconWidth, ARect.Top + rIconHeight);
@@ -850,14 +856,21 @@ procedure TProjectManagerFrame.actnImportExecute(Sender: TObject);
 
 var
   sFileName, sProjectName: string;
+  vCur: TsdIDTreeNode;
 begin
   if SelectFile(sFileName, '.mtf;*.mpf') then
   begin
-    if SameText(ExtractFileExt(sFileName), '.mtf')
-      and (stdProjects.IDTree.Selected.Rec.ValueByName('Type').AsInteger = 0) then
-      sProjectName := GetImportProjectName(sFileName, stdProjects.IDTree.Selected)
+    vCur := stdProjects.IDTree.Selected;
+    if Assigned(vCur) then
+    begin
+      if SameText(ExtractFileExt(sFileName), '.mtf')
+        and (vCur.Rec.ValueByName('Type').AsInteger = 0) then
+        sProjectName := GetImportProjectName(sFileName, stdProjects.IDTree.Selected)
+      else
+        sProjectName := GetImportProjectName(sFileName, stdProjects.IDTree.Selected.Parent);
+    end
     else
-      sProjectName := GetImportProjectName(sFileName, stdProjects.IDTree.Selected.Parent);
+      sProjectName := GetImportProjectName(sFileName, vCur);
 
     Screen.Cursor := crHourGlass;
     try