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

发布于 2024-07-28 22:10:18 字数 165 浏览 2 评论 0原文

我用的是D2009。 我有一个从 TWinControl 派生的组件,我想向其中添加鼠标平移。 我看到有一个新的控件样式 csPannable 和一个新的控件状态 csPanning。 我一直在查看 vcl 源代码试图找出答案,但到目前为止我有点迷失。 有谁知道这方面的任何文档? 非常感谢任何建议或链接!

I'm using D2009. I have a component derived from TWinControl to which I'd like to add mouse panning. I see that there's a new control style, csPannable, and a new control state, csPanning. I've been looking at the vcl source to try to figure it out, but so far I'm a bit lost. Does anyone know of any documentation for this? Any suggestions or links greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人的旅程 2024-08-04 22:10:18

在定义 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;

测试一些变化。
通过这个简单的代码,您可以捕获鼠标事件。 在这些过程中,您可以启动鼠标事件或执行某些操作来创建平移效果。

In the same unit that defines TWinControl, you have the implementation of TControl. See how the mouse events and procedures are defined. You can try to capture mouse messages in your component.

Try this:

In private declarations:

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

In implementation you can do something like this

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;

Test some variations.
With this simple code you can catch mouse events. In these procedures you can launch mouse events or do something to create Pan effect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文