Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2015, 16:43   #1
RomaBayn
Пользователь
 
Регистрация: 24.10.2014
Сообщений: 10
По умолчанию

Пожалуйста помогите сделать Delphi вращающиеся полуокружность со скоростями чтобы переключать срочно нужно сделать!

Вот написал что-то нужно переделать чтобы работала!
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Canvas.Chord(0, 0, 150, 150, 0, 150, 150, 0);
end;

end.
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Timer2: TTimer;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N2001: TMenuItem;
    N1001: TMenuItem;
    N501: TMenuItem;
    N3: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N2001Click(Sender: TObject);
    procedure N1001Click(Sender: TObject);
    procedure N501Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
      a:real;
      B:array[1..4,1..2] of integer;
 
implementation
 
{$R *.dfm}
 
procedure Prizma;
var i:integer;
begin
Form1.Refresh;
for i:=1 to 4 do begin
B[i,1]:=trunc(80*sin(a+i*4*pi/3));
B[i,2]:=trunc(-20*cos(a+i*4*pi/3));
end;
for i:=1 to 3 do begin
Form1.Canvas.MoveTo(200+B[i,1],100+B[i,2]);
Form1.Canvas.LineTo(200+B[i+1,1],100+B[i+1,2]);
Form1.Canvas.MoveTo(200+B[i,1],200+B[i,2]);
Form1.Canvas.LineTo(200+B[i+1,1],200+B[i+1,2]);
Form1.Canvas.LineTo(200+B[i+1,1],100+B[i+1,2]);
end;
a:= a+2;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Prizma;
form1.Timer1.Enabled:=true;
form1.Timer2.Enabled:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Timer1.Enabled:=false;
form1.Timer2.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Prizma;
end;
procedure Prizmaa;
var i:integer;
begin
Form1.Refresh;
for i:=1 to 4 do begin
B[i,1]:=trunc(80*sin(a+i*4*pi/3));
B[i,2]:=trunc(-20*cos(a+i*4*pi/3));
end;
for i:=1 to 3 do begin
Form1.Canvas.MoveTo(200+B[i,1],100+B[i,2]);
Form1.Canvas.LineTo(200+B[i+1,1],100+B[i+1,2]);
Form1.Canvas.MoveTo(200+B[i,1],200+B[i,2]);
Form1.Canvas.LineTo(200+B[i+1,1],200+B[i+1,2]);
Form1.Canvas.LineTo(200+B[i+1,1],100+B[i+1,2]);
end;
a:= a-2;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Prizmaa;
form1.Timer1.Enabled:=false;
form1.Timer2.Enabled:=true;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Prizmaa;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
Form1.Timer1.Interval:= 400;
Form1.Timer2.Interval:= 400;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Form1.Timer1.Interval:= 300;
Form1.Timer2.Interval:= 300;
end;
procedure TForm1.N2001Click(Sender: TObject);
begin
Form1.Timer1.Interval:= 200;
Form1.Timer2.Interval:= 200;
end;

procedure TForm1.N1001Click(Sender: TObject);
begin
Form1.Timer1.Interval:= 100;
Form1.Timer2.Interval:= 100;
end;

procedure TForm1.N501Click(Sender: TObject);
begin
Form1.Timer1.Interval:= 50;
Form1.Timer2.Interval:= 50;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Form1.Timer1.Interval:= 500;
Form1.Timer2.Interval:= 500;
end;

end.

Последний раз редактировалось Stilet; 29.05.2015 в 17:05.
RomaBayn вне форума Ответить с цитированием
Старый 29.05.2015, 17:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А по какой оси то вращение нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2015, 17:56   #3
RomaBayn
Пользователь
 
Регистрация: 24.10.2014
Сообщений: 10
По умолчанию

Вот так по Оси Y получается
RomaBayn вне форума Ответить с цитированием
Старый 29.05.2015, 19:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Первое что пришло в голову:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
                  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, 
                    Dialogs, ExtCtrls, ComCtrls;

type

		  { TForm1 }

                  TForm1 = class(TForm)
				    Timer1: TTimer;
				    TrackBar1: TTrackBar;
				    procedure FormCreate(Sender: TObject);
				    procedure FormPaint(Sender: TObject);
				    procedure Timer1Timer(Sender: TObject);
                  private
                                    { private declarations }
                  public
                                    { public declarations }
                  end;


var   c:tpoint; r,i:integer;
                  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
                  c.x:=Width div 2;
                  r:=Width div 3;
                  c.y:=Height - r;
                  i:=0;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
                  with Canvas do begin
                    Arc(c.x-r+i,c.y-r,c.x+r-i,c.y+r,0,180*16);
		  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  inc(i,TrackBar1.Position); repaint;
  if i>2*r then i:=0;
end;

end.
Не вздумай копипастить, эта программа не проверялась. Проанализируй ее и разберись как она работает.

P.S. Слегка довел код до правильного.
I'm learning to live...

Последний раз редактировалось Stilet; 29.05.2015 в 19:56.
Stilet вне форума Ответить с цитированием
Старый 01.06.2015, 00:06   #5
RomaBayn
Пользователь
 
Регистрация: 24.10.2014
Сообщений: 10
По умолчанию

Можете программу в целом написать?просто не получается не работает.
RomaBayn вне форума Ответить с цитированием
Старый 01.06.2015, 08:02   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А она и так целиком )
Я же предупреждал - Не копипастить!!!. Тупое копирование из тырнета текста кода в Делфи не пройдет и никогда не проходило. Помимо этого нужно подключать события как минимум.
Еще раз нагадую: Проанализируй ее и разберись как она работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ ПОЖАЛУЙСТА СДЕЛАТЬ МАКРОС Tison Microsoft Office Excel 3 21.12.2009 23:55
Помогите пожалуйста сделать задачки в Delphi YO$YA Помощь студентам 3 09.11.2008 13:26
вращающиеся гроб netuser87 Паскаль, Turbo Pascal, PascalABC.NET 1 12.12.2007 19:37
Помогите сделать лабы пожалуйста cL1zMa Паскаль, Turbo Pascal, PascalABC.NET 3 09.12.2007 22:27