Главная страница
    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.007 c
2-1205447785
Германн
2008-03-14 01:36
2008.04.13
Вопрос про TADODataset.ParamCheck


15-1203706540
DiamondShark
2008-02-22 21:55
2008.04.13
А у меня дочка родилась.


15-1204265877
kiberg
2008-02-29 09:17
2008.04.13
Заполнение массива


2-1205589402
webSQLNeederr
2008-03-15 16:56
2008.04.13
как правельно освободить память в TStringList


15-1203967236
@!!ex
2008-02-25 22:20
2008.04.13
Программирование на 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский