自定义HINT提示框

gfh21cn 2003-02-14 11:56:35
鼠标停在某个控件上方一会儿,便会有一个提示框
我想接管这个提示框,显示自己的提示
我处理了Application->OnShowHint(
AnsiString &HintStr, bool &CanShow, THintInfo &HintInfo)
在这个函数里,我显示一个自己的对话框(Form2,Form2有一个定时器,会在一段时间后关闭窗体)

但是这个窗体显示后使主窗体失去焦点。
我记得好像可以通过设置窗体的Style来达到不使主窗体失去焦点
但是具体如何做,就忘记了,请问该如何写

如果有更好的方法来控制HINT提示框,我会另行给分,谢谢



...全文
77 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
whitelion 2003-02-14
  • 打赏
  • 举报
回复
好象hint是一个特殊的窗体,与form不一样的,查一下msdn看看
fancy_zhh 2003-02-14
  • 打赏
  • 举报
回复
gz
l_clove 2003-02-14
  • 打赏
  • 举报
回复
gz
ccrun.com 2003-02-14
  • 打赏
  • 举报
回复
学习。
cscer 2003-02-14
  • 打赏
  • 举报
回复
感谢!

定时器可以自己加嘛

学习中……
gfh21cn 2003-02-14
  • 打赏
  • 举报
回复
感谢abomb(随风而逝) 的代码
又给我一个新的思路

不过这个类没有定时器的功能,自己关闭
痞子酷 2003-02-14
  • 打赏
  • 举报
回复
不知道怎么搞
abomb 2003-02-14
  • 打赏
  • 举报
回复
参考一下吧:

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MyHintWindow = new THintWindow(this);
MyHintWindow->Color = clInfoBk;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
TTreeView* TreeView = dynamic_cast<TTreeView*>(Sender);
if(TreeView == NULL) return;

TTreeNode* TreeNode = TreeView->GetNodeAt(X,Y);
if(TreeNode == NULL)
{
if(MyHintWindow)
{
MyHintWindow->ReleaseHandle();
}
StatusBar1->SimpleText = "";
return;
}
TRect HintRect = MyHintWindow->CalcHintRect(200,TreeNode->Text , NULL);
MyHintWindow->Hint = TreeNode->Text;

TPoint MousePoint;// = ClientToScreen(Point(X,Y));
GetCursorPos(&MousePoint);

OffsetRect(static_cast<PRECT>(&HintRect), MousePoint.x + 20, MousePoint.y + 20 );


MyHintWindow->ActivateHint(HintRect,TreeNode->Text);
StatusBar1->SimpleText = TreeNode->Text;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
if(MyHintWindow)
{
delete MyHintWindow;
MyHintWindow = NULL;
}

}

------.h

class TForm1 : public TForm
{
__published: // IDE-managed Components
TTreeView *TreeView1;
TStatusBar *StatusBar1;
void __fastcall TreeView1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
private: // User declarations
THintWindow* MyHintWindow;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
gfh21cn 2003-02-14
  • 打赏
  • 举报
回复
谢谢Libran
效果已经达到(隐藏的时候也必须用ShowWindow函数)
分待会给


不知道可不可以直接利用系统的HINT框显示一些譬如图标什么的(自己弄的毕竟还有点小小的遗憾)。
Libran 2003-02-14
  • 打赏
  • 举报
回复
显示但不激活Form2(即原窗体不会失去焦点):
ShowWindow(Form2->Handle, SW_SHOWNOACTIVATE);
(除非FormStyle=fsStayOnTop,否则看不到)
Libran 2003-02-14
  • 打赏
  • 举报
回复
显示但不激活Form2:
ShowWindow(Form2->Handle, SW_SHOWNOACTIVATE);
(除非FormStyle=fsStayOnTop,否则看不到)

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧