Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Затавить вентилятор быстро двигаться, Хелп 
:(
    Опции темы
Ulka
Дата 16.3.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Вот код программы. Вентилятор должен быстро двигаться (то есть переключение скоростей).. до меня не доходит как это рганизовать
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
   function Perevorot(per:double):double;

const
   fi=Pi/2;
   fip=Pi/30;
var
     b : boolean;
     sk:double;
  Form1: TForm1;
  Vl1 : array[0..3] of TVertex =(
          (250,250,1),
          (320,300,1),
          (390,250,1),
          (250,250,1));

  N: array [1..4] of TPoint=(
          (x:300;y:335),
          (x:300;y:550),
          (x:200;y:550),
          (x:200;y:335));
  P1 : TTransform =(
       (1,0,0),
       (0,1,0),
       (-250,-250,1));
  P2 : TTransform =(
       (1,0,0),
       (0,1,0),
       (250,250,1));
  R : TTransform =(
       (1,0,0),
       (0,1,0),
       (0,0,1));
  R1 : TTransform =(
       (1,0,0),
       (0,1,0),
       (0,0,1));

  T: TTransform;
  T1: TTransform;

implementation

{$R *.dfm}
function Perevorot (per:double): double;

Var f:double;

begin
f:=pi/per;
  
  R1[0,0]:=cos(f);
  R1[0,1]:=sin(f);
  R1[1,0]:=-sin(f);
  R1[1,1]:=cos(f);
  CombineTransform(T1,P1,R1);
  CombineTransform(T1,T1,P2);
end;



procedure TForm1.FormCreate(Sender: TObject);
 begin
 sk:=0.00300;
 b:=true;
 perevorot(sk);
  R[0,0]:=cos(fi);
  R[0,1]:=sin(fi);
  R[1,0]:=-sin(fi);
  R[1,1]:=cos(fi);
  CombineTransform(T,P1,R);
  CombineTransform(T,T,P2);
  R1[0,0]:=cos(fip);
  R1[0,1]:=sin(fip);
  R1[1,0]:=-sin(fip);
  R1[1,1]:=cos(fip);
  CombineTransform(T1,P1,R1);
  CombineTransform(T1,T1,P2);

end;


procedure TForm1.FormPaint(Sender: TObject);
var
  Lep1: array[0..3] of TVertex;
  i : integer;
begin
 
 with canvas do
    begin
     Ellipse(150,150,350,350);
     PolyLine(N);
     font.Name := 'Verdana';
     font.Size:=10;
     TextOut(50,50,'Стрелка вверх - включить вентилятор,');
     TextOut(50,68, 'Стрелка вниз - выключение вентилятора!');
     TextOut(50,86,'1 и 2 - увелечение скорости.');
    end;
    
  for i:=0 to 3 do
    begin
      Lep1[i]:=Vl1[i];
    end;

 for i:=1 to 4 do
    Begin
      ApplyTransform(Lep1, Lep1, T);
      with canvas do
       begin
         PolyBezier([Point(round(Lep1[0,0]),round(Lep1[0,1])),
                 Point(round(Lep1[1,0]),round(Lep1[1,1])),
                 Point(round(Lep1[2,0]),round(Lep1[2,1])),
                 Point(round(Lep1[3,0]),round(Lep1[3,1]))]);
       end;
      end;

   
end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin
  ApplyTransform(Vl1,Vl1,T1);
  OnPaint(self);

end;



procedure TForm1.Timer2Timer(Sender: TObject);
begin
   if (b=true) and (sk>0.1) then
       sk:=sk-0.3
   else
    if (b=false) and (sk<0.150) then
       sk:=sk+0.3;
    if (b=false) and (sk>0.140) then
       begin
         Timer1.Enabled:=false;
         Timer2.Enabled:=false;
       end;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
     if key='1' then
       begin
         b:=true;
         Timer1.Enabled:=true;
         Timer2.Enabled:=true;
        end;

      if key='2' then
       begin
         b:=false;
         Timer1.Enabled:=false;
         Timer2.Enabled:=false;
        end;
      perevorot(sk);
end;

end.


Это сообщение отредактировал(а) Girder - 16.3.2006, 12:40
PM MAIL   Вверх
kindDevil
Дата 17.3.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



а слабо с битмапами и задержкой, орг с помощью application.processmessages ?
smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.