button(100分)

  • 主题发起人 主题发起人 ilovedelphi2
  • 开始时间 开始时间
I

ilovedelphi2

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,你们好!
请教一个问题:如何让一个BUTTON能执行不同的OnClick事件?
(事件发生有先后顺序)
比如:FORM上有一个BUTTON,我先按一下,触发一个ONCLICK事件
(假定这个事件是showmessage('xxxxx');)
然后我再按一下这个BUTTON,又触发了一个ONCLICK事件
(假定这个事件是FORM2.SHOWMODAL;)
现在我需要一个BUTTON能顺序的触发50个不同的事件。

总之,要让同一个BUTTON执行不同的事件。请教,应该如何写程序?望有例子。
万分感谢!另外,如何让一个WAV文件连续播放?
 
该问题比较简单,你是否可以这样做:
在TButton中有Click事件,用鼠标的右键可选择不同的事件,由于此可写为:
Procedure Button1Click(Sender: TObject);
Procedure Button2Click(Sebder: TObject);
.... ....
Procedure ButtonClick(Sender);{*你在Form上的按钮*}
Begin
If ButOrd > n Then ButOrd := 1;
Case ButOrd of
1: Button1Click(Sender);
2: Button2Click(Sender);
.... ....
n: ButtonNClick(Sender);
End;
End;
其中,ButOrd可定义为全局变量,以示循环n次,即点击n次又从头开始;以上的
ButtonNClick(n>=1)个过程必须单独定义。
 
让一个Button做不同的事情是很方便的事情, 每个Component都有一个Tag属性. Tag
是一个长整形的数值型, 是保留给用户使用的. 对于你的Button触发有续的事件, 可
以令Tag的初始值为0, 每次Click后如果Tag不等于最大事件数就给Tag加一, 否则归
零, 然后可以用case语句处理相应的动作.

再给你一个完全用ActionList的解决方案(huizhang推荐):
1. 在你的Form上放一个TActionList
2. 给ActionList加上50个Actions, 如: Act1, Act2, ..., Act50. 每个Act都有
自己的Caption, 图标, Hint...
3. 每个Act中动作成功后, 把Button的Action赋值为下一个Action. Act50则将
Button的Action赋值成Act1
 
jams 忽略了ButOrd++;
 
huizhang的actionlist是比较标准的方法。
如果你的50个事件都比较简单的话,直接放在click中算了。:)
 
至于连续播放wav,可先通过 tmediaplayer 的 position 和endpos 获取
wav的长度,在事件中判断WAV是否执行完,如执行完,则通过rewind 返回
wav 的开始,重新play,达到循环播放的功能
 
huizhang方法好,就这样做,没错的.

 
多人接受答案了。
 
后退
顶部