一个类似老虎机的图案滚动的控件 悬赏200分。(200分)

  • 主题发起人 主题发起人 小咪
  • 开始时间 开始时间

小咪

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个模拟老虎机的抽奖程序,不知道是否有类似控件或有谁能提供解决
办法,要求图案能够渐慢停止滚动。
 
假设图片存于一个TImagelist中, 显示效果在个TBitmap中:
var
BeginY: Integer;
currentId: Integer;
CurrentStep: Integer;


// 初始化
procedure TForm1.......
begin
BeginY := -imagelist1.height;
currentId := 0;
currentstep := imagelist1.height;
end;

procedure TForm1.Timer1OnTimer(Sender: TObject);
var
bmp, bmp1: TBitmap;
begin
if not assigned(image1.picture.bitmap) then
begin
image1.picture.bitmap := tbitmap.create;
image1.picture.bitmap.width := image1.width;
image1.picture.bitmap.height := image1.height;
end;
bmp1 := tbitmap.create;
imagelist1.getbitmap(currentid, bmp1);
bmp := tbitmap.create;
bmp.width := image1.width;
bmp.height := image1.height;
bmp.canvas.draw(0, currenty+step, image1.picture.graphic);
bmp.canvas.copyrect(rect(0, currenty, imagelist1.width, currenty + imagelist1.height),
bmp1.canvas, rect(0, 0, bmp1.width, bmp1.height));
image1.picture.bitmap.assign(bmp);
bmp.free;
bmp1.free;
currenty := currenty + step;
if currenty + imagelist1.height >= 0 then
begin
currentid := currentid + 1;
if currentid >= imagelist1.count then
currentid := 0;
currenty := currenty - imagelist1.height;
end;
if 特定条件 then
begin
step := step - 5;
if step <= 0 then
begin
timer1.enabled := false;
Timer1OnTimer(Sender);
end;
end;
end;
 
修正:
.......
.......
if currenty >= 0 then
begin
currentid := currentid + 1;
if currentid >= imagelist1.count then
currentid := 0;
currenty := currenty - imagelist1.height;
end;
if 特定条件 then
begin
if (step = 1) and (currenty = -1) then
begin
timer1.enabled := false;
currenty := 0;
timer1ontimer(sender);
exit;
end;
step := step - 5;
if step < 1 then
step := 1;
end;
end;
 
用“拉幕”算法。
 
没玩过老虎机..... :~(
什么样子???? (悄悄的问...)
 
你干脆用gif做,或用dx封装for delphi
 
hehe老虎谷子机?哈哈哈哈!开赌场
 
OnTime 算法如果效果不佳,那就只能试试用线程了.
 
要达到好的效果, 好象必须用DIRECTX才好.
 
简单方法:
找一个可显图象的listbox ,把all图放入其中

然后 ,用一小段程序去控制以下该条语句的速度!
listbox1.perform(wm_vscroll,sb_linedown,0);
 
另法:
加一panel ,在其中放如带所有老虎机的图案的image (要远大于panel)

然后用一小段程序控制image的top的位置



停顿 用 sleep( 微秒数)

我可是此中老手!
 
用Sleep??
那应用程序就死了呀,
在这期间应用程序不接受任何事件的。
 
wzs, 要循环也, top到了头怎么循环?
sleep可以用Application.ProcessMessages;接收事件:-)
 
to cytown :
首尾相连图示:
1
2
3
4
5
6
7
8
9
0
1

当显示到第二个1时,设top为第一个1的位置!
 
我给的例子中不是都有了吗?
 
时间太久,强制结束。 wjiachun
 
To Another_eYes:
我看了imagelist所作的抽奖代码片断,感到非常不错。
可以给出一个简单的抽奖系统源代码么?我很需要,我的邮件是:
wolfteeth@21cn.com
盼复。
 
后退
顶部