![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Либо чудо, либо фокус... [D7, XP]
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