Текущий архив: 2008.04.13;
Скачать: CL | DM;
Вниз
Либо чудо, либо фокус... Найти похожие ветки
← →
Unknowing © (2008-03-18 09:28) [0]Всем привет! Сталкнулся с такой проблемой: при закрытии программы в которой вызывается нижеописанная процедура возникает ошибка 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 09:32) [1]Ошибка за пределами этого кода
← →
Johnmen © (2008-03-18 09:35) [2]Данная ошибка возникает при попытках обратиться по несуществующему адресу, при разрушении уже разрушенного объекта.
Поэтому она не там, где ты думаешь...
← →
Unknowing © (2008-03-18 09:38) [3]В программе по нажатию кнопки вызывается
MakeCoordHdgMarks
, больше ничего не производится...
← →
Johnmen © (2008-03-18 09:40) [4]Лучше сразу бы сказал, что вызывается MySuperPuperFunction, сразу стало бы всё ясно...
← →
Сергей М. © (2008-03-18 09:41) [5]
> Unknowing © (18.03.08 09:38) [3]
Это тебе только кажется, что "больше ничего не производится"
А если и не "производится", то зачем тогда все эти хитроумные манипуляции с массивом HdgCoord ?
← →
Unknowing © (2008-03-18 09:41) [6]
> Johnmen © (18.03.08 09:40) [4]
:)
← →
Unknowing © (2008-03-18 09:43) [7]
> Сергей М. © (18.03.08 09:41) [5]
Все остальное закоментировал для разбора проблемы с RunTimeError.
Я не пойму при наличии showmessage(inttostr(Count)); ошибки не возникает
← →
Сергей М. © (2008-03-18 09:44) [8]
> Все остальное закоментировал для разбора проблемы с RunTimeError
Кнопку забыл "закомментировать")
← →
Unknowing © (2008-03-18 09:47) [9]
> Сергей М. © (18.03.08 09:44) [8]
:) Забыл, забыл!
Короче, сабж...
← →
Сергей М. © (2008-03-18 09:49) [10]
> Короче, сабж
Короче парься сам, если не желаешь показывать все "тайны" своего проекта.
← →
Unknowing © (2008-03-18 09:54) [11]Пожалуйста Вам, все "тайны" :) :
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<360 do
begin
Pen.SetWidth(1);
if frac(CountR/30) = 0 then
begin
//ïàðàìåòðû äëÿ òîëñòûõ ðèñîê
Pen.SetWidth(3);
end;//if
graphics.DrawLine(pen, HdgCoord[CountR].X0, HdgCoord[CountR].Y0,HdgCoord[CountR].X1, HdgCoord[CountR].Y1);
Inc(CountR,10);
end; //while
playBack :=TGPGraphics.Create(MFD.Canvas.Handle);
cBitmap:= TGPCachedBitmap.Create(bitmap, playBack);
playBack.DrawCachedBitmap(cBitmap, 0, 0);
//-----------------------îñâîáîæäàåì ïàìÿòü---------------------------------------------------
Pen.Free;
graphics.Free;
cBitmap.Free;
Bitmap.Free;
playBack.Free;
//brushP.Free;
//SolidBrush.Free;
}
← →
Сергей М. © (2008-03-18 10:01) [12]Это не все тайны)
Где "тайна" под названием "HdgCoord" ?
Где текст dfm, dpr ?
← →
Unknowing © (2008-03-18 10:14) [13]
graphics.DrawLine(pen, HdgCoord[CountR].X0, HdgCoord[CountR].Y0,HdgCoord[CountR].X1, HdgCoord[CountR].Y1);
Вот они HdgCoord! Нет смысла в dfm, dpr!..
← →
Сергей М. © (2008-03-18 10:16) [14]
> Вот они HdgCoord!
Нафих ты тычешь сюда закомментированную строку ?)
Ты декларацию приводи, а не эту шнягу)
> Нет смысла в dfm, dpr
Ну тогда продолжай париться)
← →
DrPass © (2008-03-18 10:16) [15]
> Вот они HdgCoord! Нет смысла в dfm, dpr!..
Повторяю для непонятливых: где объявлен твой HdgCoord?
← →
Johnmen © (2008-03-18 10:24) [16]
> Unknowing © (18.03.08 09:54) [11]
Именно в этом варианте есть RunTime Error 216?
← →
Unknowing © (2008-03-18 10:27) [17]type
THdgMarks = record
X0 : Single;
Y0 : Single;
X1 : Single;
Y1 : Single;
end;
var
Form1: TForm1;
//---------------Ïåðåìåííûå èíäèêàòîðà--------------------------------
HdgCoord : array[0..71] of THdgMarks;
← →
Unknowing © (2008-03-18 10:28) [18]
> Johnmen © (18.03.08 10:24) [16]
Да, при завершении работы приложения. Если раскомментировать// showmessage(inttostr(Count)); <--------------------------------
, то ошибка исчезает.
end;
← →
ЮЮ © (2008-03-18 10:30) [19]> HdgCoord : array[0..71] of THdgMarks;
> while CountR<360 do
> HdgCoord[CountR].
Ну и чего ещё ожидать?
← →
Сергей М. © (2008-03-18 10:30) [20]
> Unknowing © (18.03.08 10:27) [17]
Ну и как, по-твоему, в массиве из 72-х элементов поместятся 360 элементов ?)
Вот и весь твой чудо-фокус)
← →
Unknowing © (2008-03-18 10:32) [21]
> Сергей М. © (18.03.08 10:30) [20]
36 элементов, я бы сказал! См.Inc(Count,10);
← →
Сергей М. © (2008-03-18 10:35) [22]
> Unknowing © (18.03.08 10:32) [21]
Да неужели ?!)
И именно "36" ты видишь на экране, если раскомментируешь ShowMessage ?
Чудеса да и только)))
← →
Unknowing © (2008-03-18 10:38) [23]
> Сергей М. © (18.03.08 10:35) [22]
Виноват, согласен! :) Но почему все же ошибки не возникает при раскомментированном ShowMessage? :)
← →
DrPass © (2008-03-18 10:39) [24]
> Но почему все же ошибки не возникает при раскомментированном
> ShowMessage? :)
Потому что ошибки работы с памятью тем и интересны, что приводят к самым неожиданным глюкам :)
← →
Сергей М. © (2008-03-18 10:42) [25]
> почему все же ошибки не возникает при раскомментированном
> ShowMessage?
Ну вот так карта легла)
При раскомментированном ShowMessage компилятор генерирует совсем другой код.
← →
ЮЮ © (2008-03-18 10:42) [26]А всего то делов - поставить галочку в Range Check и никогда её не снимать.
← →
Unknowing © (2008-03-18 10:43) [27]Спасибо за помощь, вопрос снят! :)
← →
Рамиль © (2008-03-18 10:44) [28]
> что приводят к самым неожиданным глюкам :)
И в неожиданных местах :)
← →
Johnmen © (2008-03-18 10:44) [29]
> ЮЮ © (18.03.08 10:30) [19]
> Сергей М. © (18.03.08 10:30) [20]
У него же закомментарено.
Я про это и уточнял [16].
← →
ЮЮ © (2008-03-18 10:48) [30]> У него же закомментарено.
Скорей всего перенесено в MakeCoordHdgMarks(Xc,Yc,R);
Страницы: 1 вся ветка
Текущий архив: 2008.04.13;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.008 c