phGant Time Package常见问题解答(一)

phGant Time Package同时包含了phGantt 和phSchema控件,是一款快速、完全面向对象的ActiveX控件,有着丰富的图形用户界面,客户可以熟练地操作时间进度条。时间进度条可以以甘特图和概要视图的形式显示。该控件是一款强大的日程安排、项目管理控件,被国际上许多大公司所使用,慧都控件作为PlexityHide公司在中国的核心代理商,为客户提供优质的客服和技术之支持。

不必要的MouseMode

本文是为phGantTimePackage VCL (Delphi XE5)编写的。

我们得到了问题和一个重复的示例来支持一个场景,其中开发人员希望在双击TimeItem时弹出一个模式对话框。

所有这些都很简单:

procedure TForm1.phGant1DblClickGantArea(theGant: TphGant_ComBasic;
  theDataEntity: TphDataEntity_GantTime);
var FrmModal:TFrmModal;
begin
  FrmModal:=TFrmModal.create(nil);
  try
    FrmModal.ShowModal;
  finally
    FrmModal.Free;
  end;
end;

问题是,当用户双击该时间项并处于调整大小的热点区域时,鼠标模式调整被输入,并且在关闭模态对话框时仍然被设置。
我的第一个响应是调用方法MouseMoveModeCancel。此方法适用于以编程方式结束任何当前鼠标模式。

然而,它在这个案例中并不奏效。

它不能工作的原因是在DblClick事件返回后——VCL再次直接触发鼠标向下——这就是我们实际进入鼠标模式的地方。

在phGantTimePackage中,有一种方法可以分派对windows消息队列的调用,这在这里很有用。这个机制叫做TDoLater,它的解是这样的:

procedure TForm1.phGant1DblClickGantArea(theGant: TphGant_ComBasic;
  theDataEntity: TphDataEntity_GantTime);
var FrmModal:TFrmModal;
begin
  FrmModal:=TFrmModal.create(nil);
  try
    FrmModal.ShowModal;
    TDoLater.DoLater(LeaveAnyUnintentionalMouseMoveMode,nil);
  finally
    FrmModal.Free;
  end;
end;

procedure TForm1.LeaveAnyUnintentionalMouseMoveMode(a:TObject);
begin
    phGant1.MouseMoveModeCancel;
end;

通过这种方式,将MouseMoveCancel延迟到windows在用户交互上拥有的所有当前消息之后的一个时间。
要使用TDoLater,你需要一个phDoLater的用法。

在OnValueChangedGantTime事件中,是否有一种方法可以发现时间项是否改变了一行。

问题

是否有一种方法来发现时间项目是否改变了OnValueChangedGantTime事件中的一行。
我正在做的事情无法在OnGantTimeChangeRow事件中或之后完成。

我尝试使用theGant.RowList.FindRowFromY(lngY).TreeNode.GridRowIndex,但在某些情况下不起作用。

回答

如果返回的行与当前拥有时间项的行(theDataEntity_GantTime.Row)不同,请使用theGant.RowList.FindRowFromY(IphGantX3.MousePositionGantArea.Y),这是一个动作…

您可以在OnHintInfo事件中进行检查,并将信息放入稍后在OnValueChangedGantTime事件中读取的membervariable中。

检查参数theDataEntity!= null,然后检查IphGantX3.GetMouseMoveMode == mmMove。

如果这两个条件都成立,则用户正在移动时间项…

然后使用如下所示:

_ThisIsARowMove = theGant.RowList.FindRowFromY(IphGantX3.MousePositionGantArea.Y)<> theDataEntity_GantTime.Row

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值