Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.16;
Скачать: CL | DM;

Вниз

Ошибка при определении процедуры   Найти похожие ветки 

 
Александр325 ©   (2008-10-02 00:04) [0]

Здравствуйте, господа мастера.
Проблема в следующем. Есть установка, которая измеряет параметры диодов и сохраняет их в файл. Люди, которые делали установку, не смогли написать программу обработки этих данных. Своих спецов по программированию у нас нет, поэтому пришлось ковыряться самому. Поначалу проблем не возникло. Но по мере разрастания программы возникла мысль, что часть программы, отвечающую за прорисовку графиков на экране, можно и нужно выделить в отдельную процедуру. И тут начались проблемы: "Access violatin at adress ...". При остановке программы указатель стоит на строке "with Image1.Canvas do". Здесь на сайте нашел, что подобная ошибка возникает при обращении к несуществующему объекту. Но когда все лилось одним потоком ошибок не было! Понятно, что я где-то что-то упустил, но где? Буду признаелен за любую помощь.
Спасибо.


 
turbouser ©   (2008-10-02 01:11) [1]


>
> Александр325 ©

Без примеров конкретного кода невозможно что-либо сказать.


 
Германн ©   (2008-10-02 01:49) [2]


> И тут начались проблемы: "Access violatin at adress ...".
>  При остановке программы указатель стоит на строке "with
> Image1.Canvas do". Здесь на сайте нашел, что подобная ошибка
> возникает при обращении к несуществующему объекту.

И ещё в массе случаев. AV выдаётся при попытке обратиться к области памяти, которая в данный момент не принадлежит данному процессу.
А далее см. turbouser ©   (02.10.08 01:11) [1]


 
{RASkov} ©   (2008-10-02 09:18) [3]

> [0] Александр325 ©   (02.10.08 00:04)
> При остановке программы указатель стоит на строке "with Image1.Canvas do".

Вообще строка безобидная если переменная Image1 проинициализирована....


 
Jeer ©   (2008-10-02 09:53) [4]


> Александр325 ©   (02.10.08 00:04)  


Правильнее и эффективнее -  найти программиста.
Может быть даже здесь.


 
Александр325 ©   (2008-10-02 19:48) [5]

Здравствуйте еще раз.
Вот упрощенный вариант, который работает:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Image1: TImage;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

var
x0,y0,dx,dy,i:integer;
image1:timage;

procedure TForm1.Button1Click(Sender: TObject);
begin

//рисуем сетку

x0:=0;
y0:=32;
dx:=40;
dy:=30;
with image1.Canvas do //рисуем оси координат
  begin
  image1.picture.Bitmap.Height:=10*dy+100;
  image1.Picture.Bitmap.Width:=10*dx+80;
  x0:=x0+50;//картинку смещаем на середину области рисования
  moveto(x0,y0);
  pen.Color:=$00000000;
  pen.Width:=3;
  lineto(x0+10*dx,y0);
  lineto(x0+10*dx,y0+10*dy);
  lineto(x0,y0+10*dy);
  lineto(x0,y0);
  pen.style:=psdot;
  pen.Width:=1;//рисуем вспомогательную сетку
  for i:=1 to 9 do
     begin
     moveto(x0+i*dx,y0);
     lineto(x0+i*dx,y0+10*dy);
     end;
  for i:=1 to 9 do
     begin
     moveto(x0,y0+i*dy);
     lineto(x0+10*dx,y0+i*dy);
     end;
  end;

end;
end.

А вот вариант, который не работает:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Image1: TImage;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

var
x0,y0,dx,dy,i:integer;
image1:timage;

procedure grafik(x0,y0,dx,dy:integer);
begin
with image1.Canvas do //рисуем оси координат
  begin
  image1.picture.Bitmap.Height:=10*dy+100;
  image1.Picture.Bitmap.Width:=10*dx+80;
  x0:=x0+50;//картинку смещаем на середину области рисования
  moveto(x0,y0);
  pen.Color:=$00000000;
  pen.Width:=3;
  lineto(x0+10*dx,y0);
  lineto(x0+10*dx,y0+10*dy);
  lineto(x0,y0+10*dy);
  lineto(x0,y0);
  pen.style:=psdot;
  pen.Width:=1;//рисуем вспомогательную сетку
  for i:=1 to 9 do
     begin
     moveto(x0+i*dx,y0);
     lineto(x0+i*dx,y0+10*dy);
     end;
  for i:=1 to 9 do
     begin
     moveto(x0,y0+i*dy);
     lineto(x0+10*dx,y0+i*dy);
     end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

//рисуем сетку

x0:=0;
y0:=32;
dx:=40;
dy:=30;
grafik(x0,y0,dx,dy);
end;
end.


 
Palladin ©   (2008-10-02 20:01) [6]

вот скажи мне, откуда твоя процедура может знать что такое image1 ?
в ясли, короче, изучать области видимости переменных...


 
Palladin ©   (2008-10-02 20:02) [7]

ой, а она у тебя в глобальном var описана... даже и не заметил...
тогда другой интересный вопрос, а с чего ты взял что image1 описанный в глобальной секции тоже самое, что image1, описанный как поле созданного объекта TForm1 ?

хотя про области видимости читать тоже нужно


 
{RASkov} ©   (2008-10-02 20:41) [8]

> ой, а она у тебя в глобальном var описана... даже и не заметил...

:)
ЗЫ Эта улыбка автору вопроса, а не автору цитаты))


 
{RASkov} ©   (2008-10-02 20:49) [9]

> [5] Александр325 ©   (02.10.08 19:48)
> procedure grafik(x0,y0,dx,dy:integer);

А вот такой вариант попробуй
//твоя процедура:
procedure grafik(Img: TImage; x0,y0,dx,dy:integer);
.........
procedure TForm1.Button1Click(Sender: TObject);
begin
.....
 grafik(image1, x0,y0,dx,dy);
end;

где image1 - это компонент "брошенный на форму"(т.е. из первой твоей "части")
реализацию grafik немного подправить, думаю справишься.....


 
Александр325 ©   (2008-10-02 21:10) [10]

Железно!!!
Заработало. Кто бы мог подумать.
Всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2008.11.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
15-1221798199
@!!ex
2008-09-19 08:23
2008.11.16
Гугель наглеет.


2-1223374553
AlekseyB
2008-10-07 14:15
2008.11.16
Как посчитать сумму


15-1221643996
DevilDevil
2008-09-17 13:33
2008.11.16
Define-ы версий Delphi ?


2-1223200633
AlexDan
2008-10-05 13:57
2008.11.16
RichEdit..


2-1223030460
Развёртка
2008-10-03 14:41
2008.11.16
Переключение раскладки клавиатуры в TurboPascal