Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Практикалық жұмыс №23-26



Тақырыбы: Қозғалыс ұйымдастыру

Мақсаты: Сурет салуға арналған құралдармен танысу. Оларды сурет салуда пайдалану.Берілген есептің математикалық моделін құруға машықтандыру.

Обьектілер: Сурет салу беті (Canvas) және батырма (Button).

Жаттығу: Форманың сол жағында циферблат пен тілшелер орналасқан, ал оң жағында уақыт есептеу процесін іске қосатын немесе тоқтататын Button1 батырмасы бар. Сағат өлшемі форманың вертикальді өлшемі негізінде анықталады. Циферблат пен тілшелердің бейнеленуі Form1 бетіне сурет салуға арналған Canvas қасиетінің көмегімен орындалады. Төменде негізгі форма қосымшасы uArClock модуль коды берілген.

Тілшелі сағат

unit uArClock;

interface

uses

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

type

TForml = class(TForm);

Buttonl:TBUtton;

Timerl:TTimer;

procedure ArrowDraw (DrawColor:TColor);

procedure FormCreate(Sender:TObject);

procedure Button1Click(Sender:TObject);

procedure Timer1Timer(Sender:TObject);

procedure FormPaint(Sender:TObject);

private

{Private declarations}

public

{ Public declarations} end;

var Form1:TForm1;

CenterX,CenterY,Radius:Integer

HourArrow,MinArrow,SecArrow:Integer;

Hour,Min,Sec,MSec:Word;

HourAngle,MinAngle,SecAngle:Real;

implementation

($R *.DFM}

procedure TForm1.FormCreate (Sender:TObject);

begin

Form1.BorderStyle:=bsSingle;

Form1.BorderIcons:=[biSystemMenu, biMinimize];

Timer1.Interval:=1000;

Timer1.Enabled:=false;

CenterY:=Form1.ClientHeight div 2;

CenterX:=CenterY;

Radius:=CenterX-20;

HourArrow:=Radius-30;

MinArrow:=Radius-20;

SecArrow:=Radius-10;

end;

procedure TForm1.FormPaint(Sender:TObject);

var i:integer;

begin

// Циферблатты салу

with Form1.Canvas do begin

// Шеңберді шығару

Pen.Color:=clBlue;

Pen.Width:=4;

Brush.Color:=clWhite;

Ellipse(20,20,20+2*Radius,20+2*Radius);

Pen.Width:=2;

// Рискаларды шығару

for i:=0 to 11 do begin

MoveTo(CenterX+Round((Radius-9)*sin(i/6*pi)),

CenterY-Round((Radius-9)*cos(i/6*pi))); LineTo(CenterX+Round((Radius)*sin(i/6*pi)),

CenterY-Round((Radius)*cos(i/6*pi)));

end;

// Цифрларды шығару

Font.Height:=10;

Font.Color:=clBlack;

Brush.Color:=Forml.Color;

TextOut(CenterX-TextWidth('12')div 2,CenterY-Radius-TextHeight('12’)-5,'12'),

TextOut(CenterX+Radius-(-5),CenterY-TextHeight(‘3'),'3');

TextOut (CenterX-TextWidth('6')div2,CenterY+Radius+5,'6');

TextOut(CenterX-Radius-TextWidth('9')-5, CenterY- TextHeight('9'),'9');

end;

end;

procedure TForm1.ButtonlClic(Sender: TObject);

begin

if Button1.Caption='Старт' then begin

// Сағатты іске қосу

DecodeTime(Time,Hour,Min,Sec,MSec);

HourAngle:=(Hour mod 12)/12 * (2*Pi);

MinAngle:=Min/60*(2*Pi);

SecAngle:=Sec/60*(2*Pi);

ArrowDraw(clRed);

Button1.Caption:='Стоп';

Timer1.Enabled:=true;

end

else

begin

// Сағаттың тоқталуы

Button1.Caption:='Старт';

Timer1.Enabled:=false;

end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

// Тілшелерді өшіру

ArrowDraw(clWhite);

// Тілшелерді жаңа орында салу

DecodeTime(Time,Hour,Min,Sec,MSec);

HourAngle:=(Hour mod 12)/12*(2*Pi);

MinAngle:=Min/60*(2*Pi);

SecAngle:=Sec/60*(2*Pi);

ArrowDraw(clRed);

end;

procedure TForm1.ArrowDraw(DrawColor: TColor);

begin

with Form1.Canvas do begin

Pen.Color:=DrawColor;

MoveTo(CenterX, CenterY);

Pen.Width:=3;

LineTo(CenterX+Round(HourArrow*sin(HourAngle)), CenterY-Round(HourArrow*cos(HourAngle)));

MoveTo(CenterX, CenterY);

Pen.Width:=2;

LineTo(CenterX+Round(MinArrow*sin(MinAngle)), CenterY-Round(MinArrow*cos(MinAngle)));

MoveToCCenterX, CenterY); Pen.Width:=1; LineTo(CenterX+Round(SecArrow*sin(SecAngle)),

CenterY-Round(SecArrow*cos(SecAngle)));

end;

end;

Циферблат суреттемесін жасайтын код форманың OnPaint оқиға өңдеушісіне енгізілген. Ол қажет жағдайда сағат бейнесін автоматты түрде қалпына келтіреді. OnPaint оқиғасы форма қайта суреттеуді қажет еткен жағдайда,мысалы бұл терезе немесе оның бір бөлігін басқа тереземен жабылған жағдайда алдыңғы орынға шығуы кезінде генерацияланады. OnPaint оқиғасын өңдеу кезінде автоматты түрде Invalide және UpDate әдістері шақырылады. Егер форма бетін суреттеу қажет етілсе, онда программист бұл әдістерді өз бетінше шақыра алады. Бірақ Invalide және UpDate әдістерін шақыруды OnPaint оқиға өңдеушісіне енгізуге болмайды, өйткені осы жағдайда бұл әдістер үзіліссіз рекурсивті шақырыла береді.

OnCreatе оқиға өңдеушісінде TCanvas классының әдістері көмегімен сурет салу тиімсіз, өйткені бұл оқиға басталған моментте форма әлі құрылмайды. Уақытты есептеу үшін Timer1 таймері пайдаланылады, оған 1000-ға тең интервал орнатылған. Бұл интервал бір секундта OnTimer оқиғасына сәйкес. OnTimer оқиға өңдеушісінде DecodeTime процедурасының көмегімен кезектегі уақыт мәндерін бүтін сандар форматына айналдырады, ол сағат, минут және секунд мәндеріне сәйкес. Уақытты құрайтын мәндер негізінде сағат, минут және секунд тілшелерінің бұрылу бұрыштарының мәнін анықтаймыз. Содан кейін ArrowDraw процедурасының көмегімен тілшелердің салынуы орындалады. ArrowDraw процедурасына қатысты кодты программист өз бетінше дайындайды. Қолданушы форма өлшемін өзгерте алмайды, себебі BorderStyle қасиетіне bsSingle мәні орнатылған. Егер қолданушыға форма өлшемін басқаруды рұқсат етсе, онда программист бұл форма үшін OnResize оқиға өңдеушісін сағат өлшемін өзгерте отырып қарастыру керек. Форма өлшемі өзгереген кезде циферблатты қайта салу үшін (ескі бейнені өшіру үшін) форма, мысалы Refresh әдісінің көмегімен, бетін тазарту керек.

Тапсырма: Жоғарыдағы мысалда сағат тілшесінің қозғалысының ұйымдастыру жолын қолданып берілген жазық фигураның сызбасын жасайтын программа құру кереу.

Тапсырмалардың жеке нұсқалары:

1. Төбелері А(20,60), В(50,20), С(80,60) болатын үшбұрыш берілген. Осы үшбұрышты х осіне қатысты параллель жылжытуды іске асыратын бағдарлама жаз.

2. Экран жазықтығында өз ортасында айналатын және экранның көлбеу (горизонталь) осіне параллель экранның бір шетінен екінші шетіне дейін орын ауыстыратын кесіндіні бейнеле.

3. Светафорды имитациялайтын бағдарлама құр.

4. Жоғары ұшатын шарды бейнелеу бағдарламасын жаз.

5. Шариктің көлденең қозғалысын бейнеле.

6. Шариктің диагональдар бойынша қозғалысын бейнеле.

7. «Жылжыйтын құрттың» бағдарламасын құр.

8. Экранда жазықтығында өз центірімен айналатын дұрыс үшбұрыш бейнелеу керек.

9. Экранда жазықтығында өз центірімен айналатын тең бүйірлі үшбұрыш бейнелеу керек.

10. Экранда жазықтығында өз центірімен айналатын тіктөртбұрыш бейнелеу керек.

11. Экранда жазықтығында өзінің бір төбесі арқылы айналатын тіктөртбұрыш бейнелеу керек.

Әдебиеттер:

1. Гофман В.Э., Хомененко А.Д. Delphi 7. – СПб.:БХВ- Санкт-Петербург, 2011.-800с: ил.

2. Дарахвелидзе П.Г., Марков Е.П., Котенок О.А. Программирование в Delphi 5.- СПб.: -БХВ- Санкт- Петербург, 2011.-784с.:ил.

3. Архангельский. Программирование в Delphi 7, СПб: ÁÕÂ-Ñàíêò-Ïåòåðáóðã, 2003





Дата публикования: 2015-10-09; Прочитано: 473 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...