300分!!!一个简单的问题.(对我来说不是)(300分)

  • 主题发起人 主题发起人 阿梁
  • 开始时间 开始时间

阿梁

Unregistered / Unconfirmed
GUEST, unregistred user!
向大家请教一个问题。
我想制作一个组件,功能有两个:
1.此组件在运行时能得到你所点VCL组件的名称。
(如点一个BUTTON,EDIT等,就记下来名子)
2.组件在运行时能监测系统时间。如有改动
就立刻提示。
 
1。截获消息
2。放个timer
 
2.我想用一个Timer组件就可.加载OnTimer事件,再维护一个变量记录过去的时间,并定时比较.
1.这个组件比较麻烦,关键是定位组件,再WndProc中拦截鼠标消息,自己解析鼠标事件
 
对于第一个问题能否详细一点。
谢谢。
 
1.利用Application的onShowHint事件
type TShowHintEvent = procedure (var HintStr: string;
var CanShow: Boolean;
var HintInfo: THintInfo) of object;
property OnShowHint: TShowHintEvent;
 
> 1.此组件在运行时能得到你所点VCL组件的名称。(如点一个BUTTON,EDIT等,就记下来名子)
是记录得到输入焦点的控件吧?
在类里面写一个过程 procedure xxxxxx(Sender: TObject)
然后: Screen.OnActiveControlChange:=xxxxxx
每次焦点变化就会调用你的xxxxxx过程

>2.组件在运行时能监测系统时间。如有改动就立刻提示。
用timer,
 
1、使用Screen.OnActiveControlChange事件可确定那个控制获得了焦点。
2、Windows会发送时间改变通知/事件。
 
在vcl的click事件中给一个指定的变量赋你要的vcl的caption值,不就是或的
你要的vcl的名称吗?
 
系统时间改变时会发送消息 WM_TIMECHANGE
An application sends the WM_TIMECHANGE message to all top-level windows after changing the system time.
WM_TIMECHANGE
wParam = 0;
// not used, must be zero
lParam = 0;
// not used, must be zero

Parameters
This message has no parameters.
Return Values
An application should return zero if it processes this message.
Remarks
An application that changes the system time should send this message to all top-level windows. To send the WM_TIMECHANGE message to all top-level windows, an application can use the SendMessage function with the hwnd parameter set to HWND_TOPMOST.
 
多人接受答案了。
 
后退
顶部