![]() |
|
|
#1
|
|||
|
|||
![]() В упор не вижу в чем проблема. Не могу понять почему выдает ошибку во время работы приложения. Точнее после запуска таймера.
Суть работы заключается в том что бы очистить определенное количество Edit-тов выбрав их случайным образом. Все данные записываются, проверяются. Но все же что-то не так. Если кто-то нашел ошибку, укажите её пожалуйста ![]() (вроде как таймер не выключается после окончания или выключается раньше времени) Код:
var Form1: TForm1; Box: array [1..9] of Integer; Rez: array [1..6] of Integer; Num: array [1..9] of Integer; Ran: Integer; Nol: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin Randomize; Nol := 9; for i:=1 to 9 do (FindComponent('Edit' + IntToStr(i)) as TEdit).Text := IntToStr(Random(10)); for i:=1 to 9 do Box[i] := StrToInt((FindComponent('Edit' + IntToStr(i)) as TEdit).Text); Rez[1] := Box[1]+Box[2]+Box[3]; Rez[2] := Box[4]+Box[5]+Box[6]; Rez[3] := Box[7]+Box[8]+Box[9]; Rez[4] := Box[1]+Box[4]+Box[7]; Rez[5] := Box[2]+Box[5]+Box[8]; Rez[6] := Box[3]+Box[6]+Box[9]; for i:=1 to 6 do (FindComponent('Label' + IntToStr(i)) as TLabel).Caption := IntToStr(Rez[i]); for i:=1 to 9 do Num[i] := 1; Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Randomize; Ran := Random(10); if Ran > 0 then begin if Num[Ran] = 1 then begin (FindComponent('Edit' + IntToStr(Ran)) as TEdit).Text := '?'; Num[Ran] := 0; Nol := Nol - 1; if Nol = StrToInt(Edit1.Text) then begin Timer1.Enabled := False; ShowMessage('GO!'); end; end; end; end; |
#2
|
||||
|
||||
![]() Код:
IntToStr(Random(10)); Код:
IntToStr(Random(9) + 1); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
![]() (FindComponent('Edit' + IntToStr(Ran)) as TEdit).Text := '?';
.............. Box[i] := StrToInt((FindComponent('Edit' + IntToStr(i)) as TEdit).Text); Конвертируешь '?' в число, вот и ошибка Последний раз редактировалось YVitaliy, 23.12.2011 в 23:54. |
#4
|
||||
|
||||
![]() Нужно весь проект глянуть, а тут почти, всё норм:
Код:
for i:=1 to 9 do (FindComponent('Edit' + IntToStr(i)) as TEdit).Text := IntToStr(Random(10)); for i:=1 to 9 do Box[i] := StrToInt((FindComponent('Edit' + IntToStr(i)) as TEdit).Text); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
||||
|
||||
![]() Нетак, так так:
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin Randomize; Ran := Random(10); if Ran > 0 then begin if Num[Ran] = 1 then begin (FindComponent('Edit' + IntToStr(Ran)) as TEdit).Text := '?'; Num[Ran] := 0; Nol := Nol - 1; if Nol = StrToInt(Edit1.Text) then begin Timer1.Enabled := False; ShowMessage('GO!'); end; end; end; end; |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Kaktuz (24.12.2011)
|
#6
|
|||
|
|||
![]() Нашел загвоздку.
if Nol = StrToInt(Edit1.Text) then Как я и писал в начале. Таймер не выключается и это приводит к ошибке. Исправил на Edit9 в котором указываю нужное мне число. И все равно ошибка! Только есть написать не изменяющееся число (if Nol = 4 then), тогда правильно работает. Но мне то нужно изменять. |
#7
|
|||
|
|||
![]() Все. Разобрался.
![]() Цитата:
![]() |