如何在 Delphi 2009 中对自定义组件进行鼠标平移

Posted

技术标签:

【中文标题】如何在 Delphi 2009 中对自定义组件进行鼠标平移【英文标题】:How to do mouse panning on a custom component in Delphi 2009 【发布时间】:2010-11-14 16:57:54 【问题描述】:

我正在使用 D2009。我有一个从 TWinControl 派生的组件,我想在其中添加鼠标平移。我看到有一个新的控件样式 csPannable 和一个新的控件状态 csPanning。我一直在查看 vcl 源以试图弄清楚,但到目前为止我有点迷茫。有谁知道这方面的任何文件?任何建议或链接都​​非常感谢!

【问题讨论】:

【参考方案1】:

在定义 TWinControl 的同一单元中,您有 TControl 的实现。查看鼠标事件和过程是如何定义的。您可以尝试在组件中捕获鼠标消息。

试试这个:

在私有声明中:

procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;

在实现中你可以做这样的事情

procedure TPanControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
  Self.Color := clYellow;
end;

procedure TPanControl.WMLButtonUp(var Message: TWMLButtonUp);
begin
  Self.Color := clbtnFace;
end;

procedure TPanControl.WMMouseMove(var Message: TWMMouseMove);
var
  State : TKeyboardState;
begin
  GetKeyboardState(State);
  if ((State[VK_LBUTTON] And $80) <> 0) then begin
    Self.Color := clOlive;
  end;
end;

测试一些变化。 使用这个简单的代码,您可以捕获鼠标事件。在这些过程中,您可以启动鼠标事件或做一些事情来创建平移效果。

【讨论】:

如前所述,我正在尝试与内置平移支持接口。

以上是关于如何在 Delphi 2009 中对自定义组件进行鼠标平移的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中对自定义对象的向量进行操作 [关闭]

无法在 Drupal 7 的视图中对自定义字段进行排序或过滤

如何对自定义 Wicket 组件进行单元测试

WPF - 对自定义标记扩展进行单元测试

Delphi 2009 - 在自定义 Delphi 组件中设置默认属性值

在python中对自定义类执行集合操作