-
-
Чё за Image1. Предположение, возможно не созданный, но объявленный TImage.
-
Image1 создан ещё на этапе проектирования, он точно существует. Ещё один баг: пока я не прописал OnCreate у формы Image1.Canvas.Create;, он и к канвасу обратиться не мог. С brush'ем такой номер не проходит.
-
Причём ошибка эта появляется "по настроению", только при каких-то загадочных обстоятельствах запуска программы
-
У меня Image1.Canvas.Brush.Color:=clBlack; нормально отрабатывает.
Ошибка в 17 строке однозначно.
> Ещё один баг: пока я не прописал OnCreate у формы Image1.Canvas.Create; > , он и к канвасу обратиться не мог. С brush'ем такой номер > не проходит.
Можно посмотреть на сорцы этого чуда???
-
вот вам весь юнит, цените) 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
public
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;
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.
-
Т.е. ты "запустил" свою программулину и тут же получил исключение, не успев даже глазом моргнуть ?
-
> Image1.Canvas.Create;
:)
-
> [7] antonn © (24.03.08 00:43)
Да, да. Поэтому и попросил автора выложить сорсы... примерно такого и ожидал. :))
Автор, вы в курсе, как работают конструкторы в Delphi?
-
я в курсе, что так насмешившая вас строка обычно не нужна, но в этой программе постоянно шла ошибка, пока я её не прописал. А форма эта вспомогательная, и ошибка выходит при её открытии
-
> я в курсе, что так насмешившая вас строка обычно не нужна,
Она не обычно не нужна. Это в корне не правильная строка.
-
но она помогла) да вобщем-то проект я уже сдал, и эта ошибка в этот раз не появилась и не помешала занять 1 место в лицее) надеюсь, в будущем такие чудеса происходить не будут, ответ на топик больше не нужен.
-
> но она помогла)
У меня есть машина без руля, я прикрутил руль, но он отвалился и заклинил положение колес, но по случайности заклинило в идеально ровном положении, а т.к. ездить надо на другой конец улицы по ровной дороги - это помогло.
|