这里出了什么问题?
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软件。
发布于 2009-07-03 09:20:25
你试过调试代码了吗?你能告诉我们哪里出了问题吗。
此外,为什么不像下面这样使用帮助上下文:
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;您可能需要更多的调整,但这可以从位置获得对窗口的控制。
发布于 2009-07-03 10:43:49
工作代码:
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的时候,它不能工作)。另外..。问题可能是错误的游标检查。
好的,谢谢你们的支持!
https://stackoverflow.com/questions/1078472
复制相似问题