Студопедия

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

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

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






Приложение А. 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 :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.