首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中用FindVCLWindow调用WinHelp32 (WinXP Pro SP3 32位)

在Delphi中用FindVCLWindow调用WinHelp32 (WinXP Pro SP3 32位)
EN

Stack Overflow用户
提问于 2009-07-03 09:05:33
回答 2查看 1.7K关注 0票数 0

这里出了什么问题?

代码语言:javascript
复制
procedure TForm1.VCLHelpClick(Sender: TObject);
var Ctrl : TWinControl;
 begin
 Ctrl := FindVCLWindow(Mouse.CursorPos);
 if Ctrl <> nil then
  if Form2.Cursor = crHelp then begin
   if Ctrl = CreatorEdit then Application.HelpCommand(HELP_CONTEXT,001);
   if Ctrl = EditorEdit then Application.HelpCommand(HELP_CONTEXT,002);
   if Ctrl = UpdaterEdit then Application.HelpCommand(HELP_CONTEXT,003);
   if Ctrl = IdeaEdit then Application.HelpCommand(HELP_CONTEXT,004);
   if Ctrl = PorterEdit then Application.HelpCommand(HELP_CONTEXT,005);
  end;
 end;

这个想法很简单--我用窗体边框图标来表示“帮助”按钮,当我单击它时,光标就变成了crHelp。如果我在任一IFs的控制下点击,它就会调用帮助系统,并打开与命令上下文相关的帮助文件。但是它不工作..。这是因为我没有在帮助文件中添加对KLink / ELinks的支持吗?

为了帮助创作和开发,我正在使用ShalomHelpMaker软件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-03 09:20:25

你试过调试代码了吗?你能告诉我们哪里出了问题吗。

此外,为什么不像下面这样使用帮助上下文:

代码语言:javascript
复制
procedure TForm1.VCLHelpClick(Sender: TObject);
var Ctrl : TWinControl;
begin
  if Form2.Cursor <> crHelp then   // Are you sure this is Form2???
    Exit;
  Ctrl := FindVCLWindow(Mouse.CursorPos);
  if Ctrl = nil then Exit;

  Application.HelpCommand(HELP_CONTEXT, Ctrl.HelpoContext);
end;

看起来FindVCLControl做了一些其他的事情。但是下面的代码可以工作:

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);
var
  ctrl : TControl;
  point : TPoint;
begin
  point := Mouse.CursorPos; // Mouse pos at screen
  Dec(point.X, Left); // Adjust for window.
  Dec(point.Y, Top);
  Dec(point.Y, GetSystemMetrics(SM_CYCAPTION)); // Adjust to client area.

  ctrl := ControlAtPos(point, True, True, True);

  // Do something with the control
end;

您可能需要更多的调整,但这可以从位置获得对窗口的控制。

票数 2
EN

Stack Overflow用户

发布于 2009-07-03 10:43:49

工作代码:

代码语言:javascript
复制
procedure TForm1.VCLHelpClick(Sender: TObject);
var WCtrl : TWinControl;
begin
  WCtrl := FindVCLWindow(Mouse.CursorPos);
  if WCtrl <> nil then
   Application.HelpCommand(HELP_CONTEXT, wCtrl.HelpContext);
end;

附注:所有之前的代码可能也没问题,但我重新检查了我的事件处理程序,发现在一个tlabel中它丢失了(尽管当我点击onclick的时候,它不能工作)。另外..。问题可能是错误的游标检查。

好的,谢谢你们的支持!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1078472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档