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

📄 wfeditorui.pas

📁 Delphi开发的一款流程图处理软件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    if View.SelCount = 0 then
      if View.GetConnectionAt(X, Y) <> nil then
        View.GetConnectionAt(X, Y).Selected := True;

    if View.SelCount = 0 then
      if View.GetObjectAt(X, Y) <> nil then
        View.GetObjectAt(X, Y).Selected := True;
  end;

  if Button = mbRight then begin
    P1 := View.ClientToScreen(Point(X, Y));
    DownPoint := Point(X, Y);
    ChartPopupMenu.Popup(P1.X, P1.Y);
  end;
end;

procedure TfWfEditorUI.ChartPopupMenuPopup(Sender: TObject);
var
  i, j, b, k: Integer;
  P1: TPoint;
begin
  with View do begin
    if SelectedConnectionCount > 0 then begin
    P1 := DownPoint;
    actRemovePoint.Enabled := False;
    if (GetHitTestAt(P1.X, P1.Y) * [htOnSelPoint]) <> [] then
      with View do
        for i := 0 to SelectedConnectionCount - 1 do with SelectedConnections[i] do begin
          j := GetNearestPoint(P1.X, P1.Y);
          b := 1;
          k := PointCount - 2;
          if ObjectSource <> nil then dec(b);
          if ObjectDest <> nil then inc(K);
          if (j >= b) and (j <= k) then begin
            actRemovePoint.Enabled := True;
            break;
          end;
        end;
    end else actRemovePoint.Enabled := False;
  end;
end;

procedure TfWfEditorUI.ViewSelected(Sender: TdxCustomFlowChart; Item:
        TdxFcItem);
var
  En: Boolean;
  i: Integer;
begin
  if not FChange then Exit;
  FChange := False;

  if (View.SelCount = 0) and (not btnCreateObject.Down) then pBkColor.Brush.Color := View.Color;

  if View.SelectedObjectCount > 0 then with View.SelectedObjects[0] do begin
    if (sbShape.Tag <> Integer(ShapeType)) and
       (TWfActiG(View.SelectedObjects[0]).ActiType<>atStart) and
       (TWfActiG(View.SelectedObjects[0]).ActiType<>atEnd) and
       (TWfActiG(View.SelectedObjects[0]).ActiType<>atTerminate) then
    begin
      sbShape.Tag := Integer(ShapeType);
      SetGlyph(sbShape, ShapePopupMenu);
    end else
    begin
      sbShape.Tag:=Integer(fcsRectangle);
      SetGlyph(sbShape, ShapePopupMenu);
    end;
    if sbLine.Tag <> ShapeWidth then begin
      sbLine.Tag := ShapeWidth;
      SetGlyph(sbLine, LinePopupMenu);
    end;
    pColor.Brush.Color := ShapeColor;
    pBkColor.Brush.Color := BkColor;
    if sbTextPosition.Tag <> (Integer(VertTextPos) * 3 + Integer(HorzTextPos)) then begin
      sbTextPosition.Tag := (Integer(VertTextPos) * 3 + Integer(HorzTextPos));
    SetGlyph(sbTextPosition, TextPositionPopupMenu);
    end;
    if sbImagePosition.Tag <> (Integer(VertImagePos) * 3 + Integer(HorzImagePos)) then begin
      sbImagePosition.Tag := (Integer(VertImagePos) * 3 + Integer(HorzImagePos));
      SetGlyph(sbImagePosition, ImagePositionPopupMenu);
    end;
    sbObjectFont.Font.Assign(Font);
  end;

  if View.SelectedConnectionCount > 0 then with View.SelectedConnections[0] do begin
    if sbStyle.Tag <> (Integer(Style) + 1) then begin
      sbStyle.Tag:= (Integer(Style) + 1);
      SetGlyph(sbStyle, StylePopupMenu);
    end;
    pColor.Brush.Color := Color;
    pBkColor.Brush.Color := ArrowSource.Color;
    if sbSourceArrow.Tag <> Integer(ArrowSource.ArrowType) then begin
      sbSourceArrow.Tag := Integer(ArrowSource.ArrowType);
      SetGlyph(sbSourceArrow, SourceArrowPopupMenu);
    end;
    if sbDestArrow.Tag <> Integer(ArrowDest.ArrowType) then begin
      sbDestArrow.Tag := Integer(ArrowDest.ArrowType);
      SetGlyph(sbDestArrow, DestArrowPopupMenu);
    end;
    if btnLine.Tag <> TWfConnG(View.SelectedConnections[0]).LineWidth then begin
      btnLine.Tag := TWfConnG(View.SelectedConnections[0]).LineWidth;
      SetGlyph(btnLine, LinePopupMenu);
    end;
    sbSArrowSize.Tag := (ArrowSource.Width - 5) div 5;
    sbDArrowSize.Tag := (ArrowDest.Width - 5) div 5;
    if sbSArrowSize.Tag < 1 then sbSArrowSize.Tag := 1;
    if sbDArrowSize.Tag < 1 then sbDArrowSize.Tag := 1;
    SetGlyph(sbSArrowSize, SArrowSizePopupMenu);
    SetGlyph(sbDArrowSize, DArrowSizePopupMenu);
    sbSPoint.Tag := PointSource;
    SetGlyph(sbSPoint, SPointPopupMenu);
    sbDPoint.Tag := PointDest;
    SetGlyph(sbDPoint, DPointPopupMenu);
    sbConnectFont.Font.Assign(Font);
  end;

  if Self.HandleAllocated then begin
    En := View.SelCount > 0;
    actCut.Enabled := En;
    actCopy.Enabled:= En and not View.SelHasSE;
    actClearSelection.Enabled := En;
    actDelete.Enabled := En;
    actProp.Enabled := En;
    actPaste.Enabled := Buf.Count > 0;

    En := View.SelectedObjectCount > 0;
    actBringToFront.Enabled := En;
    actSendToBack.Enabled := En;

    En := View.SelectedObjectCount > 1 ;
    actNewUnion.Enabled := En;

    En := ChartHasUnions(View) and (View.SelectedObjectCount > 0);
    actAddToUnion.Enabled := En;

    En := False;
    for i := 0 to View.SelectedObjectCount - 1 do
      if IsChildItemInUnion(View, View.SelectedObjects[i]) then begin
        En := True;
        break;
      end;
    actRemoveFromUnion.Enabled := En;

    En := False;
    for i := 0 to View.SelectedObjectCount - 1 do
     if IsMainItemInUnion(View.SelectedObjects[i]) then begin
       En := True;;
     end;
    actClearUnion.Enabled := En;

    En := ChartHasUnions(View);
    actClearAllUnions.Enabled := En;

  end;
  FChange := True;
end;

procedure TfWfEditorUI.ViewSelection(Sender: TdxCustomFlowChart; Item:
        TdxFcItem; var Allow: Boolean);
begin
  Allow := not ( btnZoomIn.Down or btnCreateObject.Down or btnCreateConnect.Down);
end;

procedure TfWfEditorUI.ClearBuf;
var
  i: Integer;
begin
  for i := 0 to Buf.Count - 1 do
    if TWfEditorBuferItem(Buf.Items[i]).ObjType = iConnection then
      TdxFcConnection(TWfEditorBuferItem(Buf.Items[i]).Obj).Free;
  for i := 0 to Buf.Count - 1 do
    if TWfEditorBuferItem(Buf.Items[i]).ObjType = iObject then
      TdxFcObject(TWfEditorBuferItem(Buf.Items[i]).Obj).Free;
  while Buf.Count > 0 do begin
    TWfEditorBuferItem(Buf.Items[0]).Free;
    Buf.Delete(0);
  end;
end;

procedure TfWfEditorUI.ConAssign(Source, Dest : TdxFcConnection);
var
  i: Integer;
begin
  Dest.Font.Assign(Source.Font);
  Dest.ParentFont := Source.ParentFont;
  Dest.Text := Source.Text;
  Dest.ArrowSource.ArrowType := Source.ArrowSource.ArrowType;
  Dest.ArrowSource.Height := Source.ArrowSource.Height;
  Dest.ArrowSource.Width := Source.ArrowSource.Width;
  Dest.ArrowSource.Color := Source.ArrowSource.Color;
  Dest.ArrowDest.ArrowType := Source.ArrowDest.ArrowType;
  Dest.ArrowDest.Height := Source.ArrowDest.Height;
  Dest.ArrowDest.Width := Source.ArrowDest.Width;
  Dest.ArrowDest.Color := Source.ArrowDest.Color;
  Dest.Color := Source.Color;
  Dest.PenStyle := Source.PenStyle;
  for i := 0 to Source.PointCount - 1 do
    Dest.AddPoint(Source.Points[i]);
  Dest.Style := Source.Style;
  Dest.Transparent := Source.Transparent;
end;

procedure TfWfEditorUI.CopyToBuf;
var
  i, j: Integer;
  ABufItem: TWfEditorBuferItem;
  SObj, DObj, AObj: TdxFcObject;
  ACon: TdxFcConnection;
  List: TList;
begin
  List := TList.Create;
  ClearBuf;
  for i := 0 to View.SelectedObjectCount - 1 do begin
    ABufItem := TWfEditorBuferItem.Create;
    AObj := TdxFcObject.Create(BufChart);
    ObjAssign(View.SelectedObjects[i], AObj);
    ABufItem.Obj := AObj;
    ABufItem.ObjType := iObject;
    Buf.Add(ABufItem);
    List.Add(AObj);
  end;
{
  for i := 0 to View.SelectedConnectionCount - 1 do begin
    ABufItem := TWfBuferItem.Create;
    ACon := TdxFcConnection.Create(BufChart);
    ConAssign(View.SelectedConnections[i], ACon);
    SObj := ACon.ObjectSource;
    DObj := ACon.ObjectDest;
    SObj := nil;
    DObj := nil;
    for j := 0 to View.SelectedObjectCount - 1 do begin
      if View.SelectedConnections[i].ObjectSource = View.SelectedObjects[j] then
        SObj := TdxFcObject(List.Items[j]);
      if View.SelectedConnections[i].ObjectDest = View.SelectedObjects[j] then
        DObj := TdxFcObject(List.Items[j]);
    end;
    ACon.SetObjectSource(SObj, View.SelectedConnections[i].PointSource);
    ACon.SetObjectDest(DObj, View.SelectedConnections[i].PointDest);
    ABufItem.Obj := ACon;
    ABufItem.ObjType := iConnection;
    Buf.Add(ABufItem);
  end;
}
  List.Free;
end;

procedure TfWfEditorUI.Layout(lt:TLayoutType);
var
  i,iT:Integer;
  function SelObjMaxWid:Integer;
  var
    j,jT:Integer;
  begin
    jT:=0;
    for j:=0 to View.SelectedObjectCount-1 do
      if View.SelectedObjects[j].Width>jT then
        jT:=View.SelectedObjects[j].Width;
    Result:=jT;
  end;
  function SelObjMinWid:Integer;
  var
    j,jT:Integer;
  begin
    jT:=10000;
    for j:=0 to View.SelectedObjectCount-1 do
      if View.SelectedObjects[j].Width<jT then
        jT:=View.SelectedObjects[j].Width;
    Result:=jT;
  end;
  function SelObjMaxHei:Integer;
  var
    j,jT:Integer;
  begin
    jT:=0;
    for j:=0 to View.SelectedObjectCount-1 do
      if View.SelectedObjects[j].Height>jT then
        jT:=View.SelectedObjects[j].Height;
    Result:=jT;
  end;
  function SelObjMinHei:Integer;
  var
    j,jT:Integer;
  begin
    jT:=10000;
    for j:=0 to View.SelectedObjectCount-1 do
      if View.SelectedObjects[j].Height<jT then
        jT:=View.SelectedObjects[j].Height;
    Result:=jT;
  end;
begin
  FChange:=False;
  case lt of
    ltAlignLeft:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Left:=View.SelectedObjects[0].Left;
    ltAlignRight:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Left:=View.SelectedObjects[0].Left+View.SelectedObjects[0].Width-View.SelectedObjects[i].Width;
    ltAlignHCenter:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Left:=View.SelectedObjects[0].Left+View.SelectedObjects[0].Width div 2-View.SelectedObjects[i].Width div 2;
    //ltSpaceEquH:
    //ltSpaceEquHX:
    ltIncWidth:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Width:=View.SelectedObjects[i].Width+1;
    ltDecWidth:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Width:=View.SelectedObjects[i].Width-1;
    ltMakeMaxWidth:
      begin
        iT:=SelObjMaxWid;
        for i:=0 to View.SelectedObjectCount-1 do
          View.SelectedObjects[i].Width:=iT;
      end;
    ltMakeMinWidth:
      begin
        iT:=SelObjMinWid;
        for i:=0 to View.SelectedObjectCount-1 do
          View.SelectedObjects[i].Width:=iT;
      end;
    ltMakeSameWidth:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Width:=View.SelectedObjects[0].Width;
    //ltSpaceDecH,ltSpaceIncH,
    ltAlignTop:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Top:=View.SelectedObjects[0].Top;
    ltAlignBottom:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Top:=View.SelectedObjects[0].Top+View.SelectedObjects[0].Height-View.SelectedObjects[i].Height;
    ltAlignVCenter:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Top:=View.SelectedObjects[0].Top+View.SelectedObjects[0].Height div 2-View.SelectedObjects[i].Height div 2;
    //ltSpaceEquV:
    //ltSpaceEquVY:
    ltIncHeight:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Height:=View.SelectedObjects[i].Height+1;
    ltDecHeight:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Height:=View.SelectedObjects[i].Height-1;
    ltMakeMaxHeight:
      begin
        iT:=SelObjMaxHei;
        for i:=0 to View.SelectedObjectCount-1 do
          View.SelectedObjects[i].Height:=iT;
      end;
    ltMakeMinHeight:
      begin
        iT:=SelObjMinHei;
        for i:=0 to View.SelectedObjectCount-1 do
          View.SelectedObjects[i].Height:=iT;
      end;
    ltMakeSameHeight:
      for i:=0 to View.SelectedObjectCount-1 do
        View.SelectedObjects[i].Height:=View.SelectedObjects[0].Height;
    //ltSpaceDecV:
    //ltSpaceIncV:
  end;
  FChange:=True;
end;

procedure TfWfEditorUI.actAlignLeftExecute(Sender: TObject);
begin
  Layout(ltAlignLeft);
end;

procedure TfWfEditorUI.actAlignRightExecute(Sender: TObject);
begin
  Layout(ltAlignRight);
end;

procedure TfWfEditorUI.actAlignHCenterExecute(Sender: TObject);
begin
  Layout(ltAlignHCenter);
end;

procedure TfWfEditorUI.actSpaceEquHExecute(Sender: TObject);
begin
  Layout(ltSpaceEquH);
end;

procedure TfWfEditorUI.actSpaceEquHXExecute(Sender: TObject);
begin
  Layout(ltSpaceEquHX);
end;

procedure TfWfEditorUI.actIncWidthExecute(Sender: TObject);
begin
  Layout(ltIncWidth);
end;

⌨️ 快捷键说明

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