程序运行中,如何把窗体中所有同一类型的控件指定一个事件?如何获得当前具有焦点的控件名称与类型呢?(20分)

  • 主题发起人 主题发起人 jxc163
  • 开始时间 开始时间
J

jxc163

Unregistered / Unconfirmed
GUEST, unregistred user!
程序运行中,如何把窗体中所有同一类型的控件指定一个事件?如何获得当前具有焦点的控件名称与类型呢?<br><br>当鼠标在一个标签上移动时,如果让一个与它关联的Checkbox也再现如在自身上移动的效果呢?(D7+XP+XPmain)<br><br>我想让窗体中所有的TCombobox类型的控件在具有焦点时,如果按下Alt+↓都会出现下拉框。<br>
 
程序运行中,如何把窗体中所有同一类型的控件指定一个事件?<br>----------&gt;&gt;&gt;&gt;自定义一个过程,在此类控件的同一个事件里指定此过程名。<br><br>如何获得当前具有焦点的控件名称与类型呢?<br>----------&gt;&gt;&gt;&gt;罗列窗体内全部控件名及类名(,有些控件是没有焦点的)。<br>procedure TForm1.Button2Click(Sender: TObject);<br>var i : integer;<br>begin<br>&nbsp; for i := 0 to Form1.ComponentCount -1 do<br>&nbsp; begin<br>&nbsp; &nbsp; showmessage(Form1.Components.Name+ #13 +Form1.Components.ClassName);<br>&nbsp; end;<br>end;<br><br>
 
在 form1的create事件中把button的onclick事件指给别的过程,可以这样<br>(findcomponent('button'+inttostr(i)) as Tbutton).onclick:=自定义的过程名,
 
bjaman老兄,有个问题你可能没有理解我的意思,你是想知道当前具有输入焦点的控件是什么控件?
 
判断一下,<br>if sender is TButton这样就可以确定了
 
看这句: showmessage(Form1.Components.Name+ #13 +Form1.Components.ClassName);<br>其中后半句就是显示该控件的类型的呀!<br>
 
可以加一个判断条件:if Form1.Components.Focused then ...<br>Focused属性是用来判断焦点的,可是也许你的窗体上的一些组件没有这个属性。<br>所以加那个条件的时候最好是再强制该组件为有焦点的组件,比如<br>&nbsp;if (Form1.Componets As TButton) and (Form1.Components.Focused) then ...<br>
 
&nbsp;form1.activecontrol.classname;<br>&nbsp; form1.activecontrol.name
 
把同一类型的控件的Tag设置成相同<br>比如1代表button,2代表combobox,……<br>var<br>&nbsp; i:integer;<br>begin<br>&nbsp; for i:=0 to componentcount-1 do<br>&nbsp; case components.tag of<br>&nbsp; &nbsp; 1://代表TButton<br>&nbsp; &nbsp; (components as tbutton).事件名:=自定义的事件名;<br>&nbsp; &nbsp; 2://代表TComboBox<br>&nbsp; &nbsp; 3:;//以此类推<br>&nbsp; end;<br>end;<br>至于获得焦点的控件判断如“迷糊”所说的一样(ActiveControl)
 
通过RTTI也可以实现,这样来:<br>uses Typinfo;<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>pp:ppropinfo;<br>i:integer;<br>begin<br>for i:=0 to componentcount-1 do<br>begin<br>&nbsp;pp:=getpropinfo(components,'onclick');<br>&nbsp; if pp&lt;&gt;nil then<br>&nbsp; &nbsp;if pp^.PropType^.Kind =tkmethod then<br>&nbsp; &nbsp;setmethodprop(components,pp,getmethodprop(button2,'onclick'));<br>end;<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>showmessage('执行成功');<br>end; &nbsp;<br>
 
终于找到答案了,修改Forms就可以了.
 

Similar threads

回复
0
查看
830
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部