请问各位大侠,windows中点标题栏的问号(?)然后点击控件显示帮助的效果在delphi中如何实现?
请问各位大侠,windows中点标题栏的问号(?)然后点击控件显示帮助的效果在delphi中如何实现?
楼主findcsdn(searchcsdn)2002-11-07 12:32:17 在 Delphi / Windows SDK/API 提问 如题:
我看了一下帮助,好像只有点击窗口窗口控件才能触发wm_help消息,但是delphi中许多控件都不是真正的窗口,怎么才能处理呢?另外显示的帮助信息的提示框用什么函数可以显示.
谁能给我个例子呢, 谢谢! 问题点数:200、回复次数:9Top
1 楼cnsuyong(小可)回复于 2002-11-07 14:03:10 得分 50
1)利用窗体中各控件的HelpContext属性,为它们设置不同的值;
2)利用窗体的OnHelp事件,根据Command和Data的值判定问号鼠标点击了哪个控件;当Command的值为8时,Data的值就是被问号鼠标点击的控件的HelpContext的值。相信楼主知道如何让窗体作为对话框显示并在右上角显示问号。事件触发时,可以根据不同的Data值来显示不同的帮助信息。
3)如果要更完善,还需要设置窗体的HelpFile属性,并用OnHelp事件中的CallHelp来配合。Top
2 楼cnsuyong(小可)回复于 2002-11-07 14:04:58 得分 0
相信下面的代码会对你有所启发:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
function FormHelp(Command: Word; Data: Integer;
var CallHelp: Boolean): Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
function TForm2.FormHelp(Command: Word; Data: Integer;
var CallHelp: Boolean): Boolean;
var
S: string;
begin
S := Format("Command: %d Word: %d", );
Memo1.Lines.Append(S);
CallHelp := Command = 8;
end;
end.
注意别忘记设置有关属性。Top
3 楼findcsdn(searchcsdn)回复于 2002-11-07 17:03:18 得分 0
谢谢cnsuyong(小可) 的热心帮助,但是现在还有两个问题,
1。只能从twincontrol派生的控件才能出发消息,label上不触发帮助消息。
2。怎么现实消息框呢?这是最主要的。
效果就像,在“我的电脑”点击右键选择“属性”,点击标题栏“?"号,然后选择一个控件点击弹出的黄色小方框显示帮助信息,我不想用帮助文件。
欢迎大家参加讨论。
Top
4 楼hety(King Of Java)回复于 2002-11-07 17:06:25 得分 50
用HINT,哈哈Top
5 楼cnsuyong(小可)回复于 2002-11-07 18:03:16 得分 0
To 楼主:
1、您说的正确,只有TWinControl的派生类才会触发。对于象TLabel这样的控件,也许只能通过其他途径实现。
2、消息框也是一个窗口(利用BorderStyle)。可以根据当前鼠标的位置来计算消息框出现的位置。
从功能实现上来说,使用hint最简单直接,只不过不便维护罢了。Top
6 楼findcsdn(searchcsdn)回复于 2002-11-08 09:12:24 得分 0
我仔细看过提示窗口不应该是hint, 因为他显示的时候有阴影,而且当再次点击鼠标他有自动消失的功能。我想一定有某个api函数可以实现该功能。
欢迎继续讨论.Top
7 楼knock(垃圾土匪)回复于 2002-11-08 17:13:17 得分 50
自己用panel模拟一个标题栏(简单吧?),然后点击你自己设置的帮助按钮,处理句柄都由你自己定!不需要接受什么WM—HELP消息。
不知道这个思路对你有没有帮助Top
8 楼cnsuyong(小可)回复于 2002-11-09 01:50:33 得分 50
特殊的窗口:
一、计算窗口大小和位置;
二、根据计算结果抓幕;
三、创建窗口
四、用灰色遮罩效果绘制窗口背景
五、绘制显示区域的纯色背景
六、显示帮助信息
窗口的OnClick事件和OnExit事件中添加Close调用;
窗口的OnClose事件中添加Action := caFree;语句;
这里的核心问题是抓屏和绘制阴影区域:
前者在论坛中有,后者需要楼主研究一下TCanvas。
如果找到现成的Win32 API,请别忘了告诉俺(发个短信吧)。3Q。Top
9 楼findcsdn(searchcsdn)回复于 2002-11-09 12:16:59 得分 0
基本上搞定了,函数还是winhelp, 不过有个参数HELP_WM_HELP在delphi的帮助中没有提到,我在msdn上才茶到的。谢谢各位了。
WinHelp(ComboBox_Path.Handle, "Patrol.hlp", HELP_WM_HELP, cardinal(@d));Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
