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

Вниз

Ошибка у Canvas а   Найти похожие ветки 

 
Пётр   (2008-03-23 16:12) [0]

Image1.Canvas.Brush.Color:=clBlack;
Почему здесь выдаётся ошибка "access violation..."?! И как её убрать?


 
Efir   (2008-03-23 18:34) [1]

Чё за Image1.
Предположение, возможно не созданный, но объявленный TImage.


 
Пётр   (2008-03-23 18:55) [2]

Image1 создан ещё на этапе проектирования, он точно существует. Ещё один баг: пока я не прописал OnCreate у формы Image1.Canvas.Create;, он и к канвасу обратиться не мог. С brush"ем такой номер не проходит.


 
Пётр   (2008-03-23 19:03) [3]

Причём ошибка эта появляется "по настроению", только при каких-то загадочных обстоятельствах запуска программы


 
@!!ex ©   (2008-03-23 19:38) [4]

У меня
Image1.Canvas.Brush.Color:=clBlack;
нормально отрабатывает.

Ошибка в 17 строке однозначно.


> Ещё один баг: пока я не прописал OnCreate у формы Image1.Canvas.Create;
> , он и к канвасу обратиться не мог. С brush"ем такой номер
> не проходит.

Можно посмотреть на сорцы этого чуда???


 
Пётр   (2008-03-23 20:13) [5]

вот вам весь юнит, цените)

unit prizm;

interface

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

type
 TfrmPrizm = class(TForm)
   Image1: TImage;
   Edit1: TEdit;
   UpDown1: TUpDown;
   Label1: TLabel;
   Button1: TButton;
   Button2: TButton;
   Label2: TLabel;
   Edit2: TEdit;
   UpDown2: TUpDown;
   procedure FormShow(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormCreate(Sender: TObject);
   procedure Edit1KeyPress(Sender: TObject; var Key: Char);
 private
   { Private declarations }
 public
   { Public declarations }
   procedure Paint1(Sender: TObject);
 end;

var
 frmPrizm: TfrmPrizm;
 Points: array of TPoint;
 Coord: array of array [0..1] of extended;
 down, adding: boolean;
 cur: integer;
 m: extended;

implementation

uses add, edit, main;

{$R *.dfm}

procedure TfrmPrizm.FormShow(Sender: TObject);
var i: integer;
begin
 if adding
 then
  begin
   Edit1.Text:="3";
   Edit2.Text:="1";
   SetLength(coord, 0);
   SetLength(points, 0);
   SetLength(Points, 3);
   SetLength(Coord, 3);
   m:=1;
   for i:=0 to 3 do
     begin
       Coord[i][0]:=cos(2/3*pi*i);
       Coord[i][1]:=sin(2/3*pi*i);
       Points[i]:=Point(round(320+50*coord[i][0]), round(240-50*coord[i][1]));
     end;
   adding:=false;
  end
 else
   begin
     for i:=0 to length(coord)-1 do
       Points[i]:=Point(round(320+50*coord[i][0]/m), round(240-50*coord[i][1]/m));
     Edit1.Text:=IntToStr(length(coord));
   end;
 Paint1(Sender);
end;

procedure TfrmPrizm.Button1Click(Sender: TObject);
begin
 frmPrizm.Close;
end;

procedure TfrmPrizm.Button2Click(Sender: TObject);
var i: integer;
begin
 m:=StrToFloat(Edit2.Text);
 SetLength(Coord, StrToInt(Edit1.Text));
 SetLength(Points, StrToInt(Edit1.Text));
 for i:=0 to StrToInt(Edit1.Text) do
   begin
     Coord[i][0]:=m*cos(pi*2*i/StrToInt(Edit1.Text));
     Coord[i][1]:=m*sin(pi*2*i/StrToInt(Edit1.Text));
     Points[i]:=Point(round(320+50*coord[i][0]/m), round(240-50*coord[i][1]/m));
   end;
 Paint1(Sender);
end;

procedure TfrmPrizm.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var i: integer;
begin
 for i:=0 to Length(coord)-1 do
   if (x>round(320+50*coord[i][0]/m-3))
   and(x<round(320+50*coord[i][0]/m+3))
   and(y>round(240-50*coord[i][1]/m-3))
   and(y<round(240-50*coord[i][1]/m+3)) then
     begin
       cur:=i;
       down:=true;
     end;
end;

procedure TfrmPrizm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if down then
   begin
     coord[cur][0]:=m*(x-320)/50;
     coord[cur][1]:=m*(240-y)/50;
     points[cur]:=point(round(320+50*coord[cur][0]/m), round(240-50*coord[cur][1]/m));
     Paint1(Sender);
   end;
end;

procedure TfrmPrizm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 down:=false;
 Paint1(Sender);
end;

procedure TfrmPrizm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if length(coord)>0 then frmAdd.Button7.Enabled:=true;
end;

procedure TfrmPrizm.Paint1(Sender: TObject);
var i: integer;
begin
 PatBlt(Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, WHITENESS);
 Image1.Canvas.Brush.Color:=clBlack;
 with Image1.Canvas do
   begin
     Polygon(Points);
     Pen.Color:=clLime;
     MoveTo(320, 0);
     LineTo(320, 480);
     MoveTo(0, 240);
     LineTo(640, 240);
     MoveTo(318, 190);
     LineTo(322, 190);
     MoveTo(370, 238);
     LineTo(370, 242);
     Brush.Color:=clWhite;
     TextOut(323, 190, FloatToStrf(m, fffixed, 10, 1));
     TextOut(370, 243, FloatToStrf(m, fffixed, 10, 1));
     Pen.Color:=clBlack;
     Brush.Color:=clBlack;
     Polygon(points);
     Brush.Color:=clLime;
   end;
 for i:=0 to length(coord)-1 do
   Image1.Canvas.Rectangle(round(320+50*coord[i][0]/m)-3, round(240-50*coord[i][1]/m)-3,
    round(320+50*coord[i][0]/m)+3, round(240-50*coord[i][1]/m)+3);
 Image1.Canvas.Brush.Color:=clWhite;
end;

procedure TfrmPrizm.FormCreate(Sender: TObject);
begin
 adding:=false;
 m:=1;
 Image1.Canvas.Create;
end;

procedure TfrmPrizm.Edit1KeyPress(Sender: TObject; var Key: Char);
var
 s: string; edit: TEdit;
begin
 edit:=Sender as TEdit;
 case Key of
 "0".."9":;
 #8: if length(edit.Text)<2 then Key:=#0;
 ",":
   begin
     s:=edit.Text;
     if (pos (",", s)<>0)or(edit.SelStart=0)or(edit=Edit1) then Key:=#0;
   end;
  else Key:=#0;
  end;
end;

end.


 
Сергей М. ©   (2008-03-23 20:37) [6]

Т.е. ты "запустил" свою программулину и тут же получил исключение, не успев даже глазом моргнуть ?


 
antonn ©   (2008-03-24 00:43) [7]


> Image1.Canvas.Create;

:)


 
@!!ex ©   (2008-03-24 08:30) [8]

> [7] antonn ©   (24.03.08 00:43)

Да, да. Поэтому и попросил автора выложить сорсы... примерно такого и ожидал. :))

Автор, вы в курсе, как работают конструкторы в Delphi?


 
Пётр   (2008-03-24 16:33) [9]

я в курсе, что так насмешившая вас строка обычно не нужна, но в этой программе постоянно шла ошибка, пока я её не прописал. А форма эта вспомогательная, и ошибка выходит при её открытии


 
@!!ex ©   (2008-03-24 16:42) [10]

> я в курсе, что так насмешившая вас строка обычно не нужна,

Она не обычно не нужна.
Это в корне не правильная строка.


 
Пётр   (2008-03-24 19:32) [11]

но она помогла)
да вобщем-то проект я уже сдал, и эта ошибка в этот раз не появилась и не помешала занять 1 место в лицее)
надеюсь, в будущем такие чудеса происходить не будут, ответ на топик больше не нужен.


 
@!!ex ©   (2008-03-24 19:45) [12]

> но она помогла)

У меня есть машина без руля, я прикрутил руль, но он отвалился и заклинил положение колес, но по случайности заклинило в идеально ровном положении, а т.к. ездить надо на другой конец улицы по ровной дороги - это помогло.


 
{RASkov} ©   (2008-03-24 22:22) [13]

> [11] Пётр   (24.03.08 19:32)
> но она помогла)
> да вобщем-то проект я уже сдал, и эта ошибка в этот раз
> не появилась и не помешала занять 1 место в лицее)

Диагноз - тебе не следует заниматься написанием программ :(
Да и в жизни у тебя тоже наверное: а, лишь бы работало.... или: работает, ну и ладно...
И еще скажу... Мне бы ты проект не сдал! Причем, провалился бы еще до заглядывания мной в исходники проекта....
Не веришь? Да у тебя в программе при ее работе вылетает куча ошибок.... Опять не веришь? Зря не веришь....
:о)


 
Пётр   (2008-03-25 13:49) [14]

ну не надо так радикально! Я не говорю, что это было написано правильно, но я просто не смог придумать выхода лучше. Ошибки есть, но я их исправляю, и обычно правильно. И вообще этому меня никто не учил, а метод научного тыка не всегда срабатывает как надо.
А в исходники они и не заглядывали, они всё равно OpenGL не поняли бы)


 
Пётр   (2008-03-25 14:03) [15]

Итак, неправильность этой строки вы мне доказали, её ненужность я понял (теперь работает без неё), и с Brush"ем проблем вроде нет. Заметьте: в коде я ничего не поменял (только после того, как начало нормально работать, я удалил Image1.Canvas.Create).


 
antonn ©   (2008-03-25 21:19) [16]

вообще не понимаю, как можно нормально работать с image.canvas %)
ладно бы с image1.picture.bitmat.canvas...
а ошибка, в принципе, могла выскакивать если в имадж загрузить JPEG и попробывать пнуть image.canvas :)


 
autohex   (2008-05-29 20:51) [17]

clLime, clBlack - 1 byte,  rgb(r,g,b)   r,g,b:byte;  -  3 byte
1 byte <=> 3 byte


 
antonn ©   (2008-05-29 21:38) [18]


> autohex   (29.05.08 20:51) [17]

че за бредятина?
cllime - это 255 по зелени и 0 по остальным трем каналам, cllime может влезть только в word.


 
antonn ©   (2008-05-29 22:27) [19]

"он и она скакали втроем на лошади" %)
ладно, допустим я имел ввиду 32 бита на цвет, и в альфе тожа 0 :)


 
Плохиш ©   (2008-05-30 14:20) [20]


> antonn ©   (25.03.08 21:19) [16]
> вообще не понимаю, как можно нормально работать с image.canvas

Ну так как в справке написано.

> Пётр   (25.03.08 14:03) [15]
> Итак, неправильность этой строки вы мне доказали, её ненужность
> я понял (теперь работает без неё), и с Brush"ем проблем
> вроде нет. Заметьте: в коде я ничего не поменял (только
> после того, как начало нормально работать, я удалил Image1.
> Canvas.Create).

Ты справку вообще пробовал читать? В частности предупреждения в ней.
<CODE
Note:
Canvas is only available if the Picture property represents a TBitmap object. Trying to read Canvas when Picture represents another type of graphic image causes TImage to raise an EInvalidOperation exception.
>



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

Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.046 c
2-1212430785
S@shka
2008-06-02 22:19
2008.06.29
Как реализуется подобная вещь...


4-1192188544
arab
2007-10-12 15:29
2008.06.29
Арабский язык &amp; Delphi


2-1212223941
Pi:=3.14...
2008-05-31 12:52
2008.06.29
Код в программе


15-1210697006
Ega23
2008-05-13 20:43
2008.06.29
Филосовский вопрос


15-1210773374
homm
2008-05-14 17:56
2008.06.29
Вопрос по overlapped - файлам





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский