tempad
Readygo技术搜索引擎 >>项目管理 >> 请问各位大侠,windows中点标题栏的问号(?)然后点击控件显示帮助的效果在delphi中如何实现?

请问各位大侠,windows中点标题栏的问号(?)然后点击控件显示帮助的效果在delphi中如何实现?

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 4:58:30

请问各位大侠,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

责任编辑: efish 参与评论 查找更多:
相关文章
我想问一下,程序试用30次后出对话框提示该怎么写? 我想问一下,程序试用30次后出对话框提示该怎么写?
请大虾们帮忙,ASP对ACCESS数据库的连接 请大虾们帮忙,ASP对ACCESS数据库的连接
救救小妹!类似163信箱上传附件的问题,问题解决100… 救救小妹!类似163信箱上传附件的问题,问题解决100相送!
今天参加了无偿献血,整个过程比较顺利,高兴,散分… 今天参加了无偿献血,整个过程比较顺利,高兴,散分!^_^
今天我生日,送分! 今天我生日,送分!
请教AMERICAN_AMERICA.ZHS16CGB231280 字符集和java… 请教AMERICAN_AMERICA.ZHS16CGB231280 字符集和java问题(急,在线等)
INTEDIVE的帮助那有下载的????? INTEDIVE的帮助那有下载的?????
难道form一定要占用页面空间吗??? 难道form一定要占用页面空间吗???
CImageList问题。 CImageList问题。
VC中.cpp的内容怎么会为空了呢?奇怪!!!!!!!!!!!!! VC中.cpp的内容怎么会为空了呢?奇怪!!!!!!!!!!!!!
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎