Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 4
1

Ошибка: Runtime error 216

06.01.2015, 00:46. Просмотров 3121. Ответов 4
Метки нет (Все метки)


Решил написать 3Д крестики нолики, на паскеле все хорошо работает, но вот на делфи выдает ошибку, не могу понять в чем причина
Delphi
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
129
130
131
132
133
unit Unit1;
 
interface
 
uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, Buttons, ExtCtrls, Menus;
 
Const
   MaxSize = 5;
   Color1 = clRed;
   Color2 = clLime;
   DivisionSize = 50;
   Size = 3;
 
type
   tPoint3D = record x,y,z : integer
      end;
 
   tPoint2D = record x,y : integer;
         /// Цвет фишки
      ColorFeature : integer;
      end;
   t3D = array [0..MaxSize-1,0..MaxSize-1,0..MaxSize-1] of tPoint3D;
   t2D = array [0..MaxSize-1,0..MaxSize-1,0..MaxSize-1] of tPoint2D;
   
   tOtk = array[1..MaxSize*MaxSize*MaxSize] of integer;
 
   TForm1 = class(TForm)
      procedure DrawCube;
 
   private
       { Private declarations }
   public
    { Public declarations }
   end;
 
var
   Form1: TForm1;
   /// Нулевая фишка
   ZeroFeature : tPoint2D;         {
   SizeR,Size : integer; }
   i :integer;
   Cube3D : t3D;
   Cube2D : t2D;
   ///Счетчик ходов
   MoveCounter : integer;
 
implementation
 
{$R *.dfm}
 
procedure Calculate3D;
var 
   i,j,k : integer;
begin
   for i := 0 to Size do 
      for j := 0 to Size do
         for k := 0 to Size do begin
            Cube3D[i,j,k].x := trunc((i)*DivisionSize);
            Cube3D[i,j,k].y := trunc((j)*DivisionSize);
            Cube3D[i,j,k].z := trunc((k)*DivisionSize);
            end;
end;
 
procedure Calculate2D;
var
   x, y : integer; 
   i,j,k : integer;
begin
   for i := 0 to Size do 
      for j := 0 to Size do
         for k := 0 to Size do begin
            x := 10 + trunc(  (Cube3D[i,j,k].x + Cube3D[i,j,k].y/(2*sqrt(5)))); 
            y := (Form1.Height) - 100  - trunc(  (Cube3D[i,j,k].z + Cube3D[i,j,k].y/(2*sqrt(5))));
 
            Cube2D[i,j,k].x := x;
            Cube2D[i,j,k].y := y;
            Cube2D[i,j,k].ColorFeature := 9;
 
            end;
                                {
     Field.xDown := Cube2D[0,0,0].x - 10;
     Field.yDown := Cube2D[0,0,0].y + 10;
 
     Field.xUp := Cube2D[Size,Size,Size].x + 10;
     Field.yUp := Cube2D[Size,Size,Size].y - 10;}
 
end;
 
 
procedure TForm1.DrawCube;
var
   i,j,k:integer;
   x1,y1,x2,y2 : integer;
begin
   for i := 0 to Size do 
      for j := 0 to Size do
         for k := 0 to Size do begin
            if i <> Size then begin
               x1:=Cube2D[i,j,k].x;
               y1:=Cube2D[i,j,k].y;
               x2:=Cube2D[i+1,j,k].x;
               y2:=Cube2D[i+1,j,k].y;
               Form1.Canvas.MoveTo(x1,y1);
               Form1.Canvas.LineTo(x2,y2);
               end;
               
            if j <> Size then begin
               x1:=Cube2D[i,j,k].x;
               y1:=Cube2D[i,j,k].y;
               x2:=Cube2D[i,j+1,k].x;
               y2:=Cube2D[i,j+1,k].y;
               Form1.Canvas.MoveTo(x1,y1);
               Form1.Canvas.LineTo(x2,y2);
               end;
               
            if k <> Size then begin
               x1:=Cube2D[i,j,k].x;
               y1:=Cube2D[i,j,k].y;
               x2:=Cube2D[i,j,k+1].x;
               y2:=Cube2D[i,j,k+1].y;
               Form1.Canvas.MoveTo(x1,y1);
               Form1.Canvas.LineTo(x2,y2);
               end;   
            end;            
end;
 
begin
Calculate3D;
Calculate2D;
Form1.DrawCube;
end.
Добавлено через 1 час 5 минут
Поразбирался в проге, и понял, что ошибка кроется в

Delphi
1
2
               Form1.Canvas.MoveTo(x1,y1);
               Form1.Canvas.LineTo(x2,y2);
Только не могу понять, почему он не хочет рисовать на форме, подставлял туда даже обычные числа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2015, 00:46
Ответы с готовыми решениями:

Runtime Error 216
Есть проект, Если его просто открыть/закрыть то ошибки нет. Но при выполнениии действие в...

Runtime error 216
Проблема в следующем: есть процедура, которая создает ряд из панелей по вертикали или по...

OpenFile и runtime error 216
var hFile : Thandle; oBuff : _OFSTRUCT; wCount : Cardinal; tText : string; begin tText :=...

Ошибка: Runtime error 217
Не запускается оконное приложение, вылетает ошибка 217 что это за ошибка? это связанно с массивом?...

4
10 / 10 / 5
Регистрация: 26.08.2014
Сообщений: 91
06.01.2015, 00:59 2
C ошибкой не связано, но рисовать лучше на канве Image.

Добавлено через 6 минут
По поводу ошибки... Ошибка Runtime error 216 at ..
0
пофигист широкого профиля
4290 / 2810 / 796
Регистрация: 15.07.2013
Сообщений: 16,305
06.01.2015, 02:56 3
Цитата Сообщение от MikiTu Посмотреть сообщение
но вот на делфи выдает ошибку
216-я это это особый вариант Access Vialation. Типа "Ну вроде бы это AV. Но кто его знает, может это и не AV вовсе, но очень похоже." Когда ни ОС не может дать точный ответ, ни Дельфи.

Теперь по коду.
Вот этот код, который ты сам придумал, является не допустимым ни в Дельфи, ни в паскале.
Delphi
1
2
3
4
5
begin
Calculate3D;
Calculate2D;
Form1.DrawCube;
end.
В Дельфи он не допустим, потому что он должен выполняться на этапе инициализации модулей, а в паскале потому что паскаль ничего не знает о формах.

Короче читай учебники.
0
2081 / 1234 / 437
Регистрация: 29.05.2013
Сообщений: 5,556
06.01.2015, 03:35 4
Не то что он не допустим, просто идеология оконного приложения, коим является ваша форма, несколько отличается от консольного, которое вы пытаетесь адаптировать. Отрисовка чего-либо в оконном приложении должна быть реализована в специальных методах, которые позволяют корректно обработать перекрытия вашего окна другими и.т.д. Обычно для этого используют метод OnPaint для формы. Т.е. если вы перенесете туда вызовы ваших процедур:

Delphi
1
2
3
4
5
6
procedure TForm1.FormPaint(Sender: TObject);
begin
Calculate3D;
Calculate2D;
Form1.DrawCube;
end;
и уберете неправильный блок:
Delphi
1
2
3
4
5
begin
Calculate3D;
Calculate2D;
Form1.DrawCube;
end.
вполне возможно, что вы увидите на форме свой рисунок.
0
пофигист широкого профиля
4290 / 2810 / 796
Регистрация: 15.07.2013
Сообщений: 16,305
06.01.2015, 03:43 5
Цитата Сообщение от Пытливый Посмотреть сообщение
Не то что он не допустим, просто идеология оконного приложения, коим является ваша форма, несколько отличается от консольного, которое вы пытаетесь адаптировать.
Не Пытливый. Дело не в отрисовке.
ТС скорее всего перенес код паскалевской программы в модуль Дельфи. Ну и подставил Form1 в нужное место чтобы компилятор не ругался. Ну и получил то самое AV в виде 216-той ошибки.
Ну и правильно что получил 216-ю вместо нормального AV. На этапе инициализации модулей ещё и не то можно получить при таком незнании основ языка.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2015, 03:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Ошибка: Runtime error 217 at 0042BBAF
runtime error 217 at 0042BBAF что за ошибка???

Runtime Error 217 at - что за ошибка?
После завершения программы вылетает ошибка: Runtime Error 217 at вот код: unit Unit8; ...

Ошибка при запуске проргаммы: "runtime error 105 at 004050d2"
что делать если выдает ошибку в виде: : &quot;runtime error 105 at 004050d2&quot;

Появляется ошибка Runtime error 216 at 00403732.Это к чему.
:shock:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.