Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.09.2015, 09:54
paraffin paraffin вне форума
Прохожий
 
Регистрация: 07.09.2015
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию вызов процедуры по таймеру

Нужно по таймеру вызывать процедуру 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  
Старый 28.09.2015, 10:45
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

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  
Старый 28.09.2015, 11:16
paraffin paraffin вне форума
Прохожий
 
Регистрация: 07.09.2015
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
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;
За помощь с конструктором спасибо, но всё равно ошибка осталась, причём компилятор устанавливает курсор перед параметром 1

Последний раз редактировалось paraffin, 28.09.2015 в 11:18.
Ответить с цитированием
  #4  
Старый 28.09.2015, 11:25
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

конфликт имен / неправильное использование. FindPut это метод TZakon и глобальная переменная. в данном случае компилятор берет глобальную переменную.
ну и все-таки у конструкторов вызов предка делать.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 28.09.2015, 11:32
paraffin paraffin вне форума
Прохожий
 
Регистрация: 07.09.2015
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
конфликт имен / неправильное использование. FindPut это метод TZakon и глобальная переменная. в данном случае компилятор берет глобальную переменную.
ну и все-таки у конструкторов вызов предка делать.
а что нужно поменять в коде чтобы процедура вызывалась корректно?
Ответить с цитированием
  #6  
Старый 28.09.2015, 11:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от paraffin
а что нужно поменять в коде чтобы процедура вызывалась корректно?
понятия не имею! вот оно проявление зла - использование глобальных переменных
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 28.09.2015, 15:37
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

что нужно поменять - или название метода FindPut, или название переменной в 64 строке
Ответить с цитированием
  #8  
Старый 28.09.2015, 16:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

так метод FindPut находится совсем в другом классе, а не в том из которого его вызываешь. хоть объект укажи что-ли:
Код:
FindPut.FindPut(1);
хотя опять же FindPut не создан. вообщем каша полная.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter