Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Приложение А. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,






    unit Unit1;

     

    interface

     

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ComCtrls, ExtCtrls;

    type

    TMoveThread = class(TThread)

    private

    FBox: TPaintBox; // Где воспроизводится картинка

    b0, b1: tbitmap; // Сами картинки

    i: integer; // Для определения координат картинки

    procedure DoVisualSwap; // Одна процедура двигает вправо,

    procedure DoVisual; // Другая влево

    protected

    procedure Execute; override;

    public

    constructor Create(a, b: TBitmap; c: TPaintBox);

    destructor Destroy; override;

    end;

     

    type

    TForm1 = class(TForm)

    PaintBox1: TPaintBox;

    PaintBox2: TPaintBox;

    PaintBox3: TPaintBox;

    TrackBar1: TTrackBar;

    TrackBar2: TTrackBar;

    TrackBar3: TTrackBar;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    TrackBar4: TTrackBar;

    Button8: TButton;

    Button9: TButton;

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure TrackBar1Change(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure TrackBar4Change(Sender: TObject);

    procedure Button8Click(Sender: TObject);

    procedure Button9Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    Thread1,

    Thread2,

    Thread3: TMoveThread;

    end;

     

    var

    Form1: TForm1;

    var taxi00: TBitmap;

    taxi01: TBitmap;

    implementation

     

    {$R *.dfm}

    var speed: integer=0;

    constructor TMoveThread.Create(a, b: tbitmap; c: TPaintBox);

    begin

    b0: =a; b1: =b; Fbox: =c; i: =0;

    inherited Create(False);

    end;

     

    destructor TMoveThread.Destroy;

    begin

    b0.free;

    b1.free;

    inherited Destroy;

    end;

     

    procedure TMoveThread.DoVisualSwap; { Двигает картинку вправо }

    begin

    with FBox do

    begin

    canvas.Draw(i, 0, b0);

    i: =i+1;

    sleep(speed);

    end;

    Application.ProcessMessages;

    end;

     

    procedure TMoveThread.DoVisual; { Двигает картинку влево }

    begin

    with FBox do

    begin

    canvas.Draw(i, 0, b1);

    i: =i-1;

    sleep(speed);

    end;

    Application.ProcessMessages;

    end;

     

     

    procedure TMoveThread.Execute; {В зависимости от координат, картинка двигается

    влево или вправо }

    begin

    while true do

    begin

    while i< =(fbox.Width+b0.Width) do

    begin

    Synchronize(DoVisualSwap);

    end;

    while i> =(0-b0.Width) do

    begin

    Synchronize(DoVisual);

     

    end;

    end;

    end;

     

     

    procedure TForm1.Button1Click(Sender: TObject);

    begin

    if Thread1.Suspended=true then Thread1.Resume;

    end;

     

    procedure TForm1.Button2Click(Sender: TObject);

    begin

    if Thread1.Suspended=false then Thread1.Suspend;

    end;

     

    procedure TForm1.Button3Click(Sender: TObject);

    begin

    if Thread2.Suspended=true then Thread2.Resume;

    end;

     

    procedure TForm1.Button4Click(Sender: TObject);

    begin

    if Thread2.Suspended=false then Thread2.Suspend;

    end;

     

    procedure TForm1.Button5Click(Sender: TObject);

    begin

    if Thread3.Suspended=true then Thread3.Resume;

    end;

     

    procedure TForm1.Button6Click(Sender: TObject);

    begin

    if Thread3.Suspended=false then Thread3.Suspend;

    end;

     

    procedure TForm1.Button7Click(Sender: TObject);

    begin

     

    Thread1.Suspend;

    Thread2.Suspend;

    Thread3.Suspend;

    end;

     

    procedure TForm1.Button8Click(Sender: TObject);

    begin

    Form1.Close;

    end;

     

    procedure TForm1.Button9Click(Sender: TObject);

    begin

    if not Thread1.Suspended then

    Thread1.Suspend;

    if not Thread2.Suspended then

    Thread2.Suspend;

    if not Thread3.Suspended then

    Thread3.Suspend;

    Thread1.i: =0;

    Thread2.i: =0;

    Thread3.i: =0;

    PaintBox1.Refresh;

    PaintBox2.Refresh;

    PaintBox3.Refresh;

    Thread1.Resume;

    Thread2.Resume;

    Thread3.Resume;

    end;

     

    procedure TForm1.FormCreate(Sender: TObject);

     

     

    begin

    {}

    taxi00: =tbitmap.Create; // Создается объект BitMap

    taxi00.LoadFromFile('taxi00.bmp'); //В него загружается изображение

    taxi01: =tbitmap.Create;

    taxi01.LoadFromFile('taxi01.bmp');

    thread1: = TMoveThread.Create(taxi00, taxi01, PaintBox1); //Создается поток

    Thread1.Priority: =tpLowest; // Устанавливается небольшой приоритет у потока; это необходимо для того, чтобы поток был управляемым и не забирал все ресурсы.

     

     

    thread2: = TMoveThread.Create(taxi00, taxi01, PaintBox2); //Создается поток

    Thread2.Priority: =tpLowest;

    thread3: = TMoveThread.Create(taxi00, taxi01, PaintBox3); //Создается поток

    Thread3.Priority: =tpLowest;

    end;

     

    procedure TForm1.FormDestroy(Sender: TObject);

    begin

    taxi00.Free;

    Taxi01.Free;

    Thread1.Terminate;

    Thread2.Terminate;

    Thread3.Terminate;

    end;

     

    procedure TForm1.TrackBar1Change(Sender: TObject);

    var I: integer;

    priority: TThreadPriority;

    { Изменение приоритета соответствующего потока }

    begin

    priority: =tpIdle;

    for i: =0 to ((sender as ttrackbar).position -1) do inc(priority);

    if sender=trackbar1 then thread1.priority: =priority

    else

    if sender=trackbar3 then thread3.priority: =priority

    else thread2.Priority: =priority;

    end;

     

    procedure TForm1.TrackBar4Change(Sender: TObject);

    begin

    speed: =round(TrackBar4.Position/10);

    end;

     

    end.






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.