Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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);//&#225;&#232;&#242;&#238;&#226;&#224;&#255; &#234;&#224;&#240;&#242;&#224;(&#239;&#224;&#236;&#255;&#242;&#252;)
 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);  // &#238;&#241;&#237;&#238;&#226;&#237;&#224;&#255; &#238;&#234;&#240;&#243;&#230;&#237;&#238;&#241;&#242;&#252;

 Xc := MFD.Width div 2;
 YC := MFD.Height div 2; }
 MakeCoordHdgMarks(Xc,Yc,R);
 {CountR:=0;
 //------------------------------&#240;&#232;&#241;&#234;&#232; &#234;&#243;&#240;&#241;&#224;--------------------------------------
  while CountR<360 do
    begin
      Pen.SetWidth(1);

      if frac(CountR/30) = 0 then
        begin
          //&#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251; &#228;&#235;&#255; &#242;&#238;&#235;&#241;&#242;&#251;&#245; &#240;&#232;&#241;&#238;&#234;
          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);

//-----------------------&#238;&#241;&#226;&#238;&#225;&#238;&#230;&#228;&#224;&#229;&#236; &#239;&#224;&#236;&#255;&#242;&#252;---------------------------------------------------
 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;
//---------------&#207;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#229; &#232;&#237;&#228;&#232;&#234;&#224;&#242;&#238;&#240;&#224;--------------------------------
 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.54 MB
Время: 0.018 c
15-1204017202
Правильный_Вася
2008-02-26 12:13
2008.04.13
FireBird - альтернатива


2-1205923008
Pavelkq
2008-03-19 13:36
2008.04.13
OnRightClick для CheсkListBox


2-1205934346
Kolan
2008-03-19 16:45
2008.04.13
Преобразовать структуру в массив байт и наоборот.


15-1204064466
GanibalLector
2008-02-27 01:21
2008.04.13
Модем Siemens MC35i


2-1205583312
alex_kasycky
2008-03-15 15:15
2008.04.13
Залипающие кнопки