procedure TGraphLink.MouseUp(Button: TMouseButton; Shift: TShiftState; const Pt: TPoint);
begin
if not Dragging or (Button <> mbRight) or (ChangeMode <> lcmMovePoint) then
begin
inherited MouseUp(Button, Shift, Pt);
if (ChangeMode = lcmMovePoint) and AcceptingHook then begin
Hook(MovingPoint, HookingObject);
fMovingPoint := -1;
fHookingObject := nil;
fAcceptingHook := False;
ChangeMode := lcmNone;
end else if (Target <> nil) then begin
fMovingPoint := -1;
fHookingObject := nil;
fAcceptingHook := False;
ChangeMode := lcmNone;
end else begin
Destroy;
end;
end;
end
procedure TSimpleGraph.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Pt: TPoint;
NewObject: TGraphObject;
begin
if not Focused then SetFocus;
inherited MouseDown(Button, Shift, X, Y);
Pt := ClientToGraph(X, Y);
CheckObjectAtCursor(Pt);
case CommandMode of
cmInsertNode, cmInsertLink:
if Assigned(DragSource) then
DragSource.MouseDown(Button, Shift, Pt)
else if (Button = mbLeft) and not (ssDouble in Shift) then
begin
NewObject := nil;
case CommandMode of
cmInsertNode:
NewObject := InsertObjectByMouse(Pt, DefaultNodeClass, SnapToGrid xor (ssCtrl in Shift));
cmInsertLink:
begin
if Assigned(ObjectAtCursor) then begin { modified }
if ObjectAtCursor.IsNode then begin { modified }
NewObject := InsertObjectByMouse(Pt, DefaultLinkClass, SnapToGrid xor (ssCtrl in Shift));
end;
end;
end;
end;
if Assigned(NewObject) then
begin
NewObject.Selected := True;
NewObject.MouseDown(Button, Shift, Pt);
if DragSource <> NewObject then
begin
CommandMode := cmEdit;
ObjectChanged(NewObject, [gcData]);
end
else
CursorPos := Pt;
RenewObjectAtCursor(NewObject);
end;
end;
cmPan:
if (Button = mbLeft) and not (ssDouble in SHift) then
begin
fDragSourcePt.X := X;
fDragSourcePt.Y := Y;
Screen.Cursor := crHandGrab
end;
else
if Assigned(ObjectAtCursor) and (CommandMode <> cmViewOnly) and
(goSelectable in ObjectAtCursor.Options)
then
ObjectAtCursor.MouseDown(Button, Shift, Pt)
else if (Button = mbLeft) and not (ssDouble in Shift) then
begin
fDragSourcePt := Pt;
fDragTargetPt := Pt;
MarkedArea := MakeRect(fDragSourcePt, fDragTargetPt);
Screen.Cursor := crCross;
end;
end;
end;
Return to DELPHI AREA Projects
Users browsing this forum: No registered users and 46 guests