Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Либо чудо, либо фокус... [D7, XP]


Страницы:   1 2

Unknowing ©   (2008-03-18 09:28:00) 

Всем привет! Сталкнулся с такой проблемой: при закрытии программы в которой вызывается нижеописанная процедура возникает ошибка RunTimeError 216 at ..... Но ошибки не возникает если раскомментировать указанную строку(выделена жирным). В чем тут дело?
procedure TForm1.MakeCoordHdgMarks(Xcenter,Ycenter, R : integer);
var
cs,sn,cs2,sn2 : Single;
Count: Word;
begin
 Count:=0;
  while Count<360 do
    begin
       cs := Xcenter+(R/2)*cos(Count*pi/180);
       sn := Ycenter+(R/2)*sin(Count*pi/180);  

       if frac(Count/30) = 0 then
        begin
       
          cs2 := Xcenter+(10+R/2)*cos(Count*pi/180);
          sn2 := Ycenter+(10+R/2)*sin(Count*pi/180);
        end
       else
        begin
          cs2 := Xcenter+(7+R/2)*cos(Count*pi/180);  //
          sn2 := Ycenter+(7+R/2)*sin(Count*pi/180);  //
        end;

     HdgCoord[Count].X0:= cs;
     HdgCoord[Count].Y0:= sn;

     HdgCoord[Count].X1:= cs2;
     HdgCoord[Count].Y1:= sn2;

     Inc(Count,10);

    end; //while

// showmessage(inttostr(Count)); <--------------------------------
end;


ЮЮ   (2008-03-18 10:48:00) [1]

> У него же закомментарено.

Скорей всего перенесено в  MakeCoordHdgMarks(Xc,Yc,R);


Johnmen   (2008-03-18 10:44:00) [2]


> ЮЮ ©   (18.03.08 10:30) [19]
> Сергей М. ©   (18.03.08 10:30) [20]

У него же закомментарено.
Я про это и уточнял [16].


Рамиль   (2008-03-18 10:44:00) [3]


> что приводят к самым неожиданным глюкам :)

И в неожиданных местах :)


Unknowing   (2008-03-18 10:43:00) [4]

Спасибо за помощь, вопрос снят! :)


ЮЮ   (2008-03-18 10:42:00) [5]

А всего то делов - поставить галочку в Range Check и никогда её не снимать.


Сергей М.   (2008-03-18 10:42:00) [6]


> почему все же ошибки не возникает при раскомментированном
> ShowMessage?


Ну вот так карта легла)

При раскомментированном ShowMessage компилятор генерирует совсем другой код.


DrPass   (2008-03-18 10:39:00) [7]


> Но почему все же ошибки не возникает при раскомментированном
> ShowMessage? :)

Потому что ошибки работы с памятью тем и интересны, что приводят к самым неожиданным глюкам :)


Unknowing   (2008-03-18 10:38:00) [8]


> Сергей М. ©   (18.03.08 10:35) [22]

Виноват, согласен! :) Но почему все же ошибки не возникает при раскомментированном ShowMessage? :)


Сергей М.   (2008-03-18 10:35:00) [9]


> Unknowing ©   (18.03.08 10:32) [21]


Да неужели ?!)

И именно "36" ты видишь на экране, если раскомментируешь ShowMessage ?

Чудеса да и только)))


Unknowing   (2008-03-18 10:32:00) [10]


> Сергей М. ©   (18.03.08 10:30) [20]

36 элементов, я бы сказал! См.   Inc(Count,10);


Сергей М.   (2008-03-18 10:30:00) [11]


> Unknowing ©   (18.03.08 10:27) [17]


Ну и как, по-твоему, в массиве из 72-х элементов поместятся 360 элементов ?)

Вот и весь твой чудо-фокус)


ЮЮ   (2008-03-18 10:30:00) [12]

> HdgCoord : array[0.. 71] of THdgMarks;



> while CountR< 360do



> HdgCoord[ CountR].


Ну и чего ещё ожидать?


Unknowing   (2008-03-18 10:28:00) [13]


> Johnmen ©   (18.03.08 10:24) [16]

Да, при завершении работы приложения. Если раскомментировать   // showmessage(inttostr(Count)); <--------------------------------
end;
, то ошибка исчезает.


Unknowing   (2008-03-18 10:27:00) [14]

type
 THdgMarks = record
 X0 : Single;
 Y0 : Single;
 X1 : Single;
 Y1 : Single;
end;
var
 Form1: TForm1;
//---------------Ïåðåìåííûå èíäèêàòîðà--------------------------------
 HdgCoord : array[0..71] of THdgMarks;


Johnmen   (2008-03-18 10:24:00) [15]


> Unknowing ©   (18.03.08 09:54) [11]

Именно в этом варианте есть RunTime Error 216?


DrPass   (2008-03-18 10:16:00) [16]


> Вот они HdgCoord! Нет смысла в dfm, dpr!..

Повторяю для непонятливых: где объявлентвой HdgCoord?


Сергей М.   (2008-03-18 10:16:00) [17]


> Вот они HdgCoord!


Нафих ты тычешь сюда закомментированную строку ?)
Ты декларациюприводи, а не эту шнягу)


> Нет смысла в dfm, dpr


Ну тогда продолжай париться)


Unknowing   (2008-03-18 10:14:00) [18]

 graphics.DrawLine(pen, HdgCoord[CountR].X0, HdgCoord[CountR].Y0,HdgCoord[CountR].X1, HdgCoord[CountR].Y1);
Вот они HdgCoord! Нет смысла в dfm, dpr!..


Сергей М.   (2008-03-18 10:01:00) [19]

Это не все тайны)

Где "тайна" под названием "HdgCoord" ?
Где текст dfm, dpr ?


Unknowing   (2008-03-18 09:54:00) [20]

Пожалуйста Вам, все "тайны" :) :
procedure TForm1.Button1Click(Sender: TObject);
var
Xc, Yc : Integer;
R, CountR : Integer;
begin

{ R:= MFD.Height div 2;

 Xc := (MFD.Width div 2) - (R div 2);
 Yc := MFD.Height div 2  - (R div 2);

 Bitmap:= TGpBitmap.Create(MFD.Width,MFD.Height,2498570);//áèòîâàÿ êàðòà(ïàìÿòü)
 graphics := TGPGraphics.Create(Bitmap);
 graphics.Clear(aclBlack);
 Pen := TGPPen.Create(MakeColor(0, 255, 0),2);

 graphics.SetSmoothingMode(SmoothingModeAntiAlias);
 graphics.DrawEllipse(Pen, Xc, Yc, R , R);  // îñíîâíàÿ îêðóæíîñòü

 Xc := MFD.Width div 2;
 YC := MFD.Height div 2; }
 MakeCoordHdgMarks(Xc,Yc,R);
 {CountR:=0;
 //------------------------------ðèñêè êóðñà--------------------------------------
  while CountR


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо