使用FindVCLWindow在Delphi中调用WinHelp32(WinXP Pro SP3 32bit)

那里有什么问题?

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; 

这个想法很简单 – 我有帮助button的窗体边框图标,当我点击它时,游标更改为crHelp。 如果我点击了任何IF的控制权,它将调用帮助系统并从命令打开与上下文关联的帮助文件。 但它不工作…这是因为我没有在帮助文件本身中添加对KLink / ELinks的支持?

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

Solutions Collecting From Web of "使用FindVCLWindow在Delphi中调用WinHelp32(WinXP Pro SP3 32bit)"

你有没有尝试过调试代码? 你能告诉我们哪个部分出了问题吗?

此外,为什么不使用helpcontext如下所示:

 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做一些其他的事情。 但是下面的代码工作:

 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; 

你可能需要更多的调整,但是这个工作从窗口控制窗口。

工作代码:

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

PS所有以前的代码probobly也可以,但我重新检查我的事件处理程序,发现在一个tlabel它失踪(虽然当我点击的那些onclick,它没有工作)。 加…问题probobly是错误的光标检查。

好的,谢谢你的支持,伙计们!