Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];

Вниз

Либо чудо, либо фокус...   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.011 c
15-1204114557
Джо
2008-02-27 15:15
2008.04.13
Посоветуйте хостинг в Украине


15-1204204156
dr_creigan
2008-02-28 16:09
2008.04.13
DDK XP


2-1205944504
vegarulez
2008-03-19 19:35
2008.04.13
Вопрос про передачу UDP инди 10.


2-1205839489
alex810
2008-03-18 14:24
2008.04.13
SQL запрос


6-1185174069
andreil
2007-07-23 11:01
2008.04.13
Плагин для IE на Delphi?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский