ABCobjects
22.02.2013, 16:23. Показов 2975. Ответов 0
Всегда когда пишу программу с использованием модуля abcobjects о паскаль выдаёт кучу ошибок, таких как: "параметр задан не верно", "неверный номер рисунка при выполнении SetDraw Surface", "выход за границы диапазона в objectdynarray.get", и иногда даже "Ошибка в функции таймера: для объекта ещё не был вызван конструктор" хотя запуск всех таймеров идёт после всех конструкторов, после долгих попыток запусков (примерно 5-20) программу запускается и всё ок. Пример программы:
Pascal | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| uses graphabc,abcobjects,events,timers;
var t,a,b,c,i,xx,yy,v1s,v2s,v3s,v4s,v5s,v6s,v7s,v8s,v9s,v10s:integer;d,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10:rectangleabc;
procedure onm(x,y,q:integer);
begin
xx:=x;
end;
procedure f;
begin
if d.left<xx then d.left:=d.left+round((xx-d.left)/10);
if d.left>xx then d.left:=d.left-round((d.left-xx)/10);
v1.top:=v1.top+v1s;
v2.top:=v2.top+v2s;
v3.top:=v3.top+v3s;
v4.top:=v4.top+v4s;
v5.top:=v5.top+v5s;
v6.top:=v6.top+v6s;
v7.top:=v7.top+v7s;
v8.top:=v8.top+v8s;
v9.top:=v9.top+v9s;
v10.top:=v10.top+v10s;
if v1.top>windowheight+10 then begin v1.top:=random(460)*(-1)-40;v1.left:=random(380);v1s:=5+random(3);end;
if v2.top>windowheight+10 then begin v2.top:=random(460)*(-1)-40;v2.left:=random(380);v2s:=5+random(3);end;
if v3.top>windowheight+10 then begin v3.top:=random(460)*(-1)-40;v3.left:=random(380);v3s:=5+random(3);end;
if v4.top>windowheight+10 then begin v4.top:=random(460)*(-1)-40;v4.left:=random(380);v4s:=5+random(3);end;
if v5.top>windowheight+10 then begin v5.top:=random(460)*(-1)-40;v5.left:=random(380);v5s:=5+random(3);end;
if v6.top>windowheight+10 then begin v6.top:=random(460)*(-1)-40;v6.left:=random(380);v6s:=5+random(3);end;
if v7.top>windowheight+10 then begin v7.top:=random(460)*(-1)-40;v7.left:=random(380);v7s:=5+random(3);end;
if v8.top>windowheight+10 then begin v8.top:=random(460)*(-1)-40;v8.left:=random(380);v8s:=5+random(3);end;
if v9.top>windowheight+10 then begin v9.top:=random(460)*(-1)-40;v9.left:=random(380);v9s:=5+random(3);end;
if v10.top>windowheight+10 then begin v10.top:=random(460)*(-1)-40;v10.left:=random(380);v10s:=5+random(3);end;
end;
begin
setwindowsize(400,500);
setwindowpos(200,20);
d:=createrectangleabc(190,450,20,30,clblack);
xx:=190;
v1s:=5+random(3);v2s:=5+random(3);v3s:=5+random(3);v4s:=5+random(3);v5s:=5+random(3);v6s:=5+random(3);v7s:=5+random(3);v8s:=5+random(3);v9s:=5+random(3);v10s:=5+random(3);
v1:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v2:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v3:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v4:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v5:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v6:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v7:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v8:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v9:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
v10:=createrectangleabc(random(380),random(460)*(-1)-30,20,30,rgb(156,83,50+random(30)));
t:=createtimer(30,f);
onmousemove:=onm;
end. |
|
А на днях написал программу и никаких ошибок не выдаёт:
Pascal | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
| uses graphabc,abcobjects,events,timers;
var a,b,c,i,t,t1,t2,s,p,xx,yy,sp,b2,t3,ku,vi1,vi2,vi3,vi4,vi5,vi6,vi7,vi8,vi9,vi10,bua:integer;r,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,b1:RectangleABC;te,te1,te2,te3,te4:textabc;p2:PictureABC;
procedure ond(x,y,q:integer);
begin
if (b=0) and (ku>0) then begin
ku:=ku-1;
b2:=0;
b1.left:=r.left;
if b1.intersect(v1) then v1.top:=windowheight+5;
if b1.intersect(v2) then v2.top:=windowheight+5;
if b1.intersect(v3) then v3.top:=windowheight+5;
if b1.intersect(v4) then v4.top:=windowheight+5;
if b1.intersect(v5) then v5.top:=windowheight+5;
if b1.intersect(v6) then v6.top:=windowheight+5;
if b1.intersect(v7) then v7.top:=windowheight+5;
if b1.intersect(v8) then v8.top:=windowheight+5;
if b1.intersect(v9) then v9.top:=windowheight+5;
if b1.intersect(v10) then v10.top:=windowheight+5;
end;
if (b=1) and (te1.top=215) then bua:=1;
end;
procedure f;
begin
if b1.left>0 then b1.left:=r.left;
if (b=1) and (bua=0) then begin te1.text:='Ваш счёт:'+inttostr(s);te1.top:=te1.top+round((220-te1.top)/10);te3.top:=te3.top+round((260-te3.top)/10);end;
if b=0 then
s:=s+1;
if xx>r.left then
r.left:=(r.left+round(((xx-r.left)/10)));
if xx<r.left then
r.left:=(r.left-round(((r.left-xx)/10)));
te.text:='Счёт:'+inttostr(s);
te2.text:='Готовых кибер зарядов:'+inttostr(ku);
if v1.top+5>windowheight then begin vi1:=0;v1.left:=random(450);v1.top:=-60-random(400);v1.color:=RGB(random(255),random(255),random(255));end;
if v2.top+5>windowheight then begin vi2:=0;v2.left:=random(450);v2.top:=-60-random(400);v2.color:=RGB(random(255),random(255),random(255));end;
if v3.top+5>windowheight then begin vi3:=0;v3.left:=random(450);v3.top:=-60-random(400);v3.color:=RGB(random(255),random(255),random(255));end;
if v4.top+5>windowheight then begin vi4:=0;v4.left:=random(450);v4.top:=-60-random(400);v4.color:=RGB(random(255),random(255),random(255));end;
if v5.top+5>windowheight then begin vi5:=0;v5.left:=random(450);v5.top:=-60-random(400);v5.color:=RGB(random(255),random(255),random(255));end;
if v6.top+5>windowheight then begin vi6:=0;v6.left:=random(450);v6.top:=-60-random(400);v6.color:=RGB(random(255),random(255),random(255));end;
if v7.top+5>windowheight then begin vi7:=0;v7.left:=random(450);v7.top:=-60-random(400);v7.color:=RGB(random(255),random(255),random(255));end;
if v8.top+5>windowheight then begin vi8:=0;v8.left:=random(450);v8.top:=-60-random(400);v8.color:=RGB(random(255),random(255),random(255));end;
if v9.top+5>windowheight then begin vi9:=0;v9.left:=random(450);v9.top:=-60-random(400);v9.color:=RGB(random(255),random(255),random(255));end;
if v10.top+5>windowheight then begin vi10:=0;v10.left:=random(450);v10.top:=-60-random(400);v10.color:=RGB(random(255),random(255),random(255));end;
if (s mod 200 = 0) and (b=0) then sp:=sp+1;
if r.Intersect(v1) or r.Intersect(v2) or r.Intersect(v3) or r.Intersect(v4) or r.Intersect(v5) or r.Intersect(v6) or r.Intersect(v7) or r.Intersect(v8) or r.Intersect(v9) or r.Intersect(v10) then b:=1;
if b1.left>0 then b2:=b2+1;
if b2=3 then b1.left:=-25;
if (bua=1) and (s>0) then begin s:=s-50;if s<50 then s:=0;end;
if (bua=1) and (ku>0) then ku:=ku-1;
if p=10 then
te4.left:=-50 else p:=p+1;
if (v1.top>400) and (abs(r.left-v1.left)<=30) and (vi1=0) and (b=0) then begin vi1:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v2.top>400) and (abs(r.left-v2.left)<=30) and (vi2=0) and (b=0) then begin vi2:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v3.top>400) and (abs(r.left-v3.left)<=30) and (vi3=0) and (b=0) then begin vi3:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v4.top>400) and (abs(r.left-v4.left)<=30) and (vi4=0) and (b=0) then begin vi4:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v5.top>400) and (abs(r.left-v5.left)<=30) and (vi5=0) and (b=0) then begin vi5:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v6.top>400) and (abs(r.left-v6.left)<=30) and (vi6=0) and (b=0) then begin vi6:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v7.top>400) and (abs(r.left-v7.left)<=30) and (vi7=0) and (b=0) then begin vi7:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v8.top>400) and (abs(r.left-v8.left)<=30) and (vi8=0) and (b=0) then begin vi8:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v9.top>400) and (abs(r.left-v9.left)<=30) and (vi9=0) and (b=0) then begin vi9:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
if (v10.top>400) and (abs(r.left-v10.left)<=30) and (vi10=0) and (b=0) then begin vi10:=1;s:=s+50;p:=1;te4.left:=r.left;te4.top:=r.top-30;end;
end;
procedure onm(x,y,q:integer);
begin
if (b=0) or (b=1) and (bua=1) then
xx:=x else xx:=r.left;
end;
procedure f2;
begin
if bua=0 then begin
v1.top:=v1.top+10+sp;
v2.top:=v2.top+10+sp;
v3.top:=v3.top+10+sp;
v4.top:=v4.top+10+sp;
v5.top:=v5.top+10+sp;
v6.top:=v6.top+10+sp;
v7.top:=v7.top+10+sp;
v8.top:=v8.top+10+sp;
v9.top:=v9.top+10+sp;
v10.top:=v10.top+10+sp;
end else begin
if v1.top+25>0 then v1.top:=v1.top+10+sp;
if v2.top+25>0 then v2.top:=v2.top+10+sp;
if v3.top+25>0 then v3.top:=v3.top+10+sp;
if v4.top+25>0 then v4.top:=v4.top+10+sp;
if v5.top+25>0 then v5.top:=v5.top+10+sp;
if v6.top+25>0 then v6.top:=v6.top+10+sp;
if v7.top+25>0 then v7.top:=v7.top+10+sp;
if v8.top+25>0 then v8.top:=v8.top+10+sp;
if v9.top+25>0 then v9.top:=v9.top+10+sp;
if v10.top+25>0 then v10.top:=v10.top+10+sp;
end;
if (bua=1) and (v1.top+25<0) and (v2.top+25<0) and (v3.top+25<0) and (v4.top+25<0) and (v5.top+25<0) and (v6.top+25<0) and (v7.top+25<0) and (v8.top+25<0) and (v9.top+25<0) and (v10.top+25<0) then begin te1.top:=te1.top-round((te1.top-(-100))/10);te3.top:=te3.top-round((te3.top-(-60))/10);r.top:=r.top-round((r.top-(windowheight-75))/10);end;
if (bua=1) and (v1.top+25<0) and (v2.top+25<0) and (v3.top+25<0) and (v4.top+25<0) and (v5.top+25<0) and (v6.top+25<0) and (v7.top+25<0) and (v8.top+25<0) and (v9.top+25<0) and (v10.top+25<0) and (te1.top=-95) and (r.top=405) then begin bua:=0;b:=0;sp:=0;ku:=0;s:=0;end;
if (b=1) and (r.top-20<windowheight) and (bua=0) then r.top:=r.top+10+sp;
end;
procedure k;
begin
if b=0 then
ku:=ku+1;
end;
begin
setwindowsize(450,475);
xx:=220;
te:=CreatetextABC(1,1,10,clblack,'Ваш счёт: 0');
te2:=CreatetextABC(1,15,10,clblack,'Готовых кибер зарядов: 0');
r:=CreateRectangleABC(220,405,20,35,RGB(random(255),random(255),random(255)));
v1:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v2:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v3:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v4:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v5:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v6:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v7:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v8:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v9:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
v10:=CreateRectangleABC(random(450),-30-random(400),20,35,RGB(random(255),random(255),random(255)));
b1:=CreateRectangleABC(-25,-400,20,805,clyellow);
te4:=CreatetextABC(-50,0,12,clgreen,'+50');
te3:=CreatetextABC(110,-55,15,clred,'Кликните для продолжения.');
te1:=CreatetextABC(110,-95,30,clred,'Ваш счёт:');
t:=CreateTimer(10,f);
t2:=CreateTimer(20,f2);
t3:=CreateTimer(3000,k);
onmousemove:=onm;
onmousedown:=ond;
end. |
|
Почему?
0
|