📄 wfeditorui.pas
字号:
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 + -