|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
вызов процедуры по таймеру
Нужно по таймеру вызывать процедуру Show(отрисовывает линию в paintbox1), а процедура FindPut должна срабатывать в процедуре Show, расчёт пути производится по переменной t, следовательно каждый раз когда срабатывает таймер переменная t должна увеличиваться на единицу t:=t+1, помогите пожалуйста заставить работать программу в данный момент компилятор ругается на 110 строку в MyClasses ошибка: Missing operator or semicolon.
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, MyClasses; type TForm1 = class(TForm) PaintBox1: TPaintBox; Button1: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; MyLine1: TMyLine; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Width:=960; //ширина формы Height:=600; //высота формы end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin MyLine1:=MyClasses.TMyLine.Create(PaintBox1.Canvas, 270, ((PaintBox1.Left+PaintBox1.Width) div 2), ((PaintBox1.Left+PaintBox1.Height) div 2), ClBlack, (PaintBox1.Width div 2-10), 5); PaintBox1.Canvas.Rectangle(8,8,208,208); //Рисует квадрат MyLine1.Show(); //отрисовывает линию end; procedure TForm1.Button1Click(Sender: TObject); begin if Timer1.Enabled then Timer1.Enabled := False //Выключает таймер else Timer1.Enabled := true;//Включает таймер end; procedure TForm1.Timer1Timer(Sender: TObject); begin PaintBox1.Invalidate; end; end. Код:
unit MyClasses; interface uses SysUtils, Classes, Graphics; type TZakon=class private { Private declarations } v:real; //скорость a:real; //ускорение s:real; //путь public { Public declarations } procedure FindSpeed(t:integer); //Находит скорость procedure FindAcc(t:integer); //Находит ускорение procedure FindPut(t:integer); //Находит путь end; //Класс Точка type TMyPoint=class private { Private declarations } px:integer; // Координата Х точки py:integer; //Координата У точки cvet:TColor; //Цвет точки public { Public declarations } constructor Create(Newpx:integer; Newpy:integer; Newcvet:TColor); end; //Класс геометрическая фигура type TGeometryFigure=class(TMyPoint) private { Private declarations } w:real; //Ширина фигуры h:real; //Высота фигуры ang:real; //Угол поворота фигуры x:integer; //Координата Х (докуда рисовать фигуру) y:integer; //Координата У (докуда рисовать фигуру) public { Public declarations } constructor Create(Newang:real; Newpx:integer; Newpy:integer; Newcvet:TColor; Neww:real; Newh:real); end; type TMyLine=class(TGeometryFigure) private { Private declarations } FCanvas:TCanvas; //Холст для рисования public { Public declarations } procedure Show(); //отображает линию constructor Create(Destination:TCanvas; Newang:real; Newpx:integer; Newpy:integer; Newcvet:TColor; Neww:real; Newh:real); end; var MyLine1:TGeometryFigure; FindPut:TZakon; s:real; t:integer; implementation {TZakon1} procedure TZakon.FindAcc(t:integer); //Находит ускорение begin a:=sin(t); end; procedure TZakon.FindPut(t:integer); //Находит путь begin s:=t-sin(t); end; procedure TZakon.FindSpeed(t:integer); //Находит Скорость begin v:=-cos(t)+1; end; { TMyPoint } constructor TMyPoint.Create(Newpx:integer; Newpy:integer; Newcvet:TColor); begin px:=Newpx; py:=Newpy; cvet:=Newcvet; end; { TGeometryFigure } constructor TGeometryFigure.Create(Newang:real; Newpx:integer; Newpy:integer; Newcvet:TColor; Neww:real; Newh:real); begin inherited Create(Newpx, Newpy, Newcvet); w:=Neww; h:=Newh; ang:=Newang; end; constructor TMyLine.Create(Destination: TCanvas; Newang:real; Newpx:integer; Newpy:integer; Newcvet:TColor; Neww:real; Newh:real); begin FCanvas:=Destination; end; procedure TMyLine.Show(); begin if not Assigned(FCanvas) then Exit; FindPut(1); //выполнение процедуры Найти путь t:=t+1; ang:=(s*180)/(Pi*w); //Расчёт угла на который переместится точка x:=Round(px+w*cos(ang*pi/180)); //координата Х где теперь окажется точка y:=Round(py+w*sin(ang*pi/180)); //координата У где теперь окажется точка FCanvas.MoveTo(px,py); //перемещение карандаша в центр окружности FCanvas.LineTo(x,y); //Отрисовка линии от центра окружности до точки с координатами Х,У end; end. |
#2
|
|||
|
|||
Missing operator or semicolon - это означает - пропущен оператор или точка с запятой. В показаном Вами фрагменте всё правильно. НО.
для начала - конструктор TMyLine.Create какой-то недописаный Должно быть как минимум так Код:
constructor TMyLine.Create(Destination: TCanvas; Newang:real; Newpx:integer; Newpy:integer; Newcvet:TColor; Neww:real; Newh:real); begin inherited Create(Newang, Newpx, Newpy, Newcvet, Neww, Newh);//<<==--!!!! FCanvas:=Destination; end; |
#3
|
|||
|
|||
Цитата:
Последний раз редактировалось paraffin, 28.09.2015 в 11:18. |
#4
|
||||
|
||||
конфликт имен / неправильное использование. FindPut это метод TZakon и глобальная переменная. в данном случае компилятор берет глобальную переменную.
ну и все-таки у конструкторов вызов предка делать. Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Цитата:
|
#6
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#7
|
|||
|
|||
что нужно поменять - или название метода FindPut, или название переменной в 64 строке
|
#8
|
||||
|
||||
так метод FindPut находится совсем в другом классе, а не в том из которого его вызываешь. хоть объект укажи что-ли:
Код:
FindPut.FindPut(1); Пишу программы за еду. __________________ |