![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый вечер.Хотел спросить кое что про массив Tpoint.Есть классы Круг и Квадрат.Но пока описан только круг.при выборе в круга в radiogroup и нажатии мыши,должны создаваться круги...и заноситься в массив Tpoint координаты X и Y....но когда я пытаюсь создать 2 круг,вылетает с ошибкой.Может кто нибудь подсказать в чём ошибка?
P.S. сразу хочу сказать,что делфи только начали изучать,и уже дали такое вот задание Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) lst1: TListBox; pnl1: TPanel; rg1: TRadioGroup; clrbx1: TColorBox; clrbx2: TColorBox; lbl1: TLabel; lbl2: TLabel; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; Tpoint=class x1,y1:integer; colorbrush:TColor; end; Tcircle=class(Tpoint) colorpen:TColor; r:Real; constructor CreateCr(newx1,newy1:integer;newcolorbrush,newcolorpen:TColor); end; TSquare=class(Tcircle) ang:Real; end; var Form1: TForm1; fig:array[1..200] of Tpoint; i:integer=0; implementation {$R *.dfm} { Tcircle } constructor Tcircle.CreateCr(newx1, newy1: integer; newcolorbrush, newcolorpen: TColor); begin x1:=newx1; y1:=newy1; colorbrush:=newcolorbrush; colorpen:=newcolorpen; Form1.Canvas.Brush.color:=colorbrush; form1.canvas.Pen.color:=colorpen; form1.Canvas.Ellipse(x1,y1,x1+40,y1+40); end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if(rg1.ItemIndex=0)and(Button=mbleft)then begin Tcircle.CreateCr(X,Y,clrbx1.Selected,clrbx2.Selected); lst1.Items.Add('Круг'); fig[i].x1:=X; fig[i].y1:=Y; i:=i+1; end; end; end. |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
||||
|
||||
![]() Я ему уже отвечап, что первоначально у него неправильно создаётся класс.
Код:
Tcircle.CreateCr(X,Y,clrbx1.Selected,clrbx2.Selected); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
||||
|
||||
![]() Цитата:
![]() Значит имеем в придачу ещё более грубую ошибку. ТС, тебе нужно сохранять в массиве указатели на созданные объекты. Примерно так: Код:
Inc(i); // Это более короткий аналог "i:=i+1" fig[i] := Tcircle.CreateCr(X,Y,clrbx1.Selected,clrbx2.Selected); // Сохранили в очередном элементе массива указатель на созданный объект А вот эти строки вообще не нужны - ведь в конструкторе эти присваивания уже делаются: Код:
fig[i].x1:=X; fig[i].y1:=Y; |