StringGrid中实如何现如提示功能

ie4888 2006-06-28 04:33:18
鼠标一到到某一Cell,显示相关的提示Hint
1、提示内容是固定的如何实现--相对简单
2、Hint是动态的,即鼠标移动到该Cell后,计算数据得到提示再显示,怎么实现?
...全文
352 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4848/4848617.xml?temp=2.766055E-02
ie4888 2006-06-29
  • 打赏
  • 举报
回复
各位高人,我几年没用Delphi和 C++Builder了了,最后一次使用还是Delphi3,C++Builder 3
给分、给分
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
我没说错吧,就需要再增加那么几行就可以大功告成了。
LZ现身!
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
^o^
安馨安旭 2006-06-29
  • 打赏
  • 举报
回复
呵呵,开始是出了几个错误,不够后来都自己改了^_^
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
另外,你可能粘贴试验的代码也选错了吧,为了这个问题,我粘贴了很多……^-^b
安馨安旭 2006-06-29
  • 打赏
  • 举报
回复
哦,没注意你留的那个的东西,不好意思……
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
援引早期的回复:

上述代码存在一个问题,就是当鼠标在非StringGrid区域从StringGrid的右侧和下侧进入StringGrid时,将出现错误。后来经过分析,发现原来是组件成像过程中画组件的时候出现的右侧和下侧“阴影”区域所产生的鼠标值的问题。
这个问题我已经解决了。但是希望楼主自己解决,毕竟吃现成的对你弊大于利。
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
上面的代码我说了存在一些缺陷,留给楼主改正,大部分已经实现了,而且我已经将这个缺陷给改正了。如果你想得到完美的结果,可以对此进行修改的。
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
怎么在我的机器上没有出现过这个问题呢?
安馨安旭 2006-06-29
  • 打赏
  • 举报
回复
这种情况是鼠标不管是从哪个方向移出表格在移回表格产生的
安馨安旭 2006-06-29
  • 打赏
  • 举报
回复
显示的格子不对应,比如说我鼠标放的是第3行的第三格,但是显示的是第2行的第3格内容。。。
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
楼上说说怎么个不舒服法?
安馨安旭 2006-06-29
  • 打赏
  • 举报
回复
学习一下鼠标移动显示内容,发现用起来很不舒服。。。
daydayup234 2006-06-29
  • 打赏
  • 举报
回复
对于第2个问题,如果指“点击该单元格”
还可以有另外截然不同的思路。
daydayup234 2006-06-29
  • 打赏
  • 举报
回复
我回答“相对简单”的第1问:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
StringGrid1->Hint= //注意缺省 空
"1、提示内容是固定的这样实现--\
只要鼠标在StringGrid1上任意位置停留一下\
就会显示这个hint";
StringGrid1->ShowHint=true;//注意缺省 false
StringGrid1->ParentShowHint=false;//注意缺省 true
}
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
上述代码存在一个问题,就是当鼠标在非StringGrid区域从StringGrid的右侧和下侧进入StringGrid时,将出现错误。后来经过分析,发现原来是组件成像过程中画组件的时候出现的右侧和下侧“阴影”区域所产生的鼠标值的问题。
这个问题我已经解决了。但是希望楼主自己解决,毕竟吃现成的对你弊大于利。
亮灯了 2006-06-29
  • 打赏
  • 举报
回复
支持一下。
BlueDeepOcean 2006-06-29
  • 打赏
  • 举报
回复
以下代码实现了当鼠标移动到StringGrid的任意Cell上方时均可使其获得焦点,并显示相应的但愿格内容提示:

.h

#incluce <math.hpp>

.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unt_StringGrid.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

THintWindow *hw;
TPoint P;
int CurRIdx,CurCIdx;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
/*
The Matrix is 5×5
*/

hw = new THintWindow(StringGrid1);
hw->Parent = StringGrid1;

for (int r = 0;r < StringGrid1->RowCount;r ++)
for (int c = 0;c < StringGrid1->ColCount;c ++)
StringGrid1->Cells[c][r] = random(StringGrid1->ColCount * StringGrid1->RowCount);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
P.x = X;
P.y = Y;

if (P.x > ((TStringGrid*)Sender)->CellRect(((TStringGrid*)Sender)->Col,((TStringGrid*)Sender)->Row).left &&
P.x < ((TStringGrid*)Sender)->CellRect(((TStringGrid*)Sender)->Col,((TStringGrid*)Sender)->Row).right &&
P.y > ((TStringGrid*)Sender)->CellRect(((TStringGrid*)Sender)->Col,((TStringGrid*)Sender)->Row).top &&
P.y < ((TStringGrid*)Sender)->CellRect(((TStringGrid*)Sender)->Col,((TStringGrid*)Sender)->Row).bottom)
{
hw->Left = Left + ((TStringGrid*)Sender)->Left + ((TStringGrid*)Sender)->DefaultColWidth / 3 + P.x;
hw->Top = Top + ((TStringGrid*)Sender)->Top + ((TStringGrid*)Sender)->DefaultRowHeight * 3 / 2 + P.y;
hw->Caption = ((TStringGrid*)Sender)->Cells[((TStringGrid*)Sender)->Col][((TStringGrid*)Sender)->Row];

hw->Refresh();
}
else //处理对其他单元格的选择
{
CurCIdx = Floor(P.x / ((TStringGrid*)Sender)->DefaultColWidth);
CurRIdx = Floor(P.y / ((TStringGrid*)Sender)->DefaultRowHeight);
((TStringGrid*)Sender)->Col = CurCIdx;
((TStringGrid*)Sender)->Row = CurRIdx;
}
hw->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if (ACol == CurCIdx && ARow == CurRIdx)
CanSelect = true;
}
//---------------------------------------------------------------------------
forverlove 2006-06-28
  • 打赏
  • 举报
回复
学习
加载更多回复(2)

13,825

社区成员

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

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