p align="left">Якщо необхідно у деякій процедурі запустити таймер, що відлічив би заданий інтервал, наприклад, 5 секунд, після чого треба виконати деякі операції та вимкнути таймер, це можна зробити наступним чином. При проектуванні таймер робиться доступним (Enabled = true), але властивість Interval задається порівнюваним 0. Таймер не буде працювати, доки у момент, коли треба запустити таймер, не буде виконатися оператор [7]. Timer1.Interval:= 5000; Через 5 секунд після цього наступить подія OnTimer. В її обробнику треба задати оператор, що відключить таймер, після чого можна виконувати необхідні операції: Timer1.Interval:= 0; Таймер точно витримує задані інтервали Interval, якщо вони достатньо великі -- сотні та тисячі мілісекунд. Якщо ж задавати інтервали довжиною десятки або одиниці мілісекунд, то реальні інтервали часу виявляються знатно більше внаслідок різноманітних накладних витрат, що пов'язані із викликами функцій та іншими обчислювальними аспект. 2.2.8 MainMenuМеню -- це не візуальний компонент, який у додатку представляє собою список об'єднаних за функціональною ознакою пунктів, кожен із яких визначає команду або вкладене меню (підменю). Вибір пункту меню відповідає виконанню заданої команди або розкриттю підменю.Існує два виду меню [5]:– головне меню (MainMenu) -- компонент, призначений для керування працею усього додатку. При роботі додатку воно розташовується у верхні частині форми під заголовком та містить найбільш загальні команди роботи;– спливаюче меню (PopupMenu) -- може визначатися для будь-якого об'єкту. Воно також містить команди, але вони, як правило, відносяться до відповідного об'єкту. У додатку спливаюче меню викликається натисканням по правій кнопці миші у момент, коли вказівник миші наведений на відповідний об'єкт. Таке меню ще називається контекстним, оскільки до нього входять ті команди, які можна виконувати над конкретним об'єктом у конкретний час.Оскільки меню -- не візуальні компоненти, то вони можуть розміщуватись у будь-якому зручному для програміста місці форми. Для створення та зміни пунктів меню у процесі розробки додатку призначений Конструктор Меню (Menu Designer).Усі пункти меню мають однакові властивості, які відображаються у Інспекторі Об'єктів. Наприклад, властивості Name та Caption. Властивість ShortCut може задавати «гарячі клавіші» для команди, що відповідає пункту. Якщо властивість Caption задати як « - » (тире), то в меню з'явиться розділова горизонтальна риса.Для кожного пункту меню повинен бути заданий метод, що визначає дії, які виконуються у відповідь на подію вибору відповідного пункту. Щоб задати такий метод, треба запустити Конструктор меню та виконати подвійне натискання по необхідному пункту.2.2.9 OLEContainerАбревіатура OLE означає Objects Linked and Embedded (приєднання та вбудовані об'єкти). OLE є подальшим розвитком ідеї поділюваних між додатками даних. OLE дозволяє легко вмонтувати в додаток обробку будь-яких типів даних. Кожен раз, коли в програмі-клієнті користувач звертається до OLE-об'єкту з метою перегляду або редагування даних (зазвичай подвійного клацання мишкою на об'єкті), запускається додаток-сервер, в якому і відбувається робота з даними [2]. Як випливає з назви, OLE-об'єкти можна або приєднати до OLE-контейнера, або включити до нього. У першому випадку дані будуть зберігатися в файлі на диску; будь-який додаток буде мати доступ до цих даних і зможе вносити зміни. У другому випадку дані включаються в OLE-контейнер, і тільки він зможе переглядати і модифікувати ці дані. Вибрати OLE-сервер можна, двічі натиснувши на компоненті (див. Рисунок 6). Рисунок 4 - Вибір OLE-сервера У цьому діалозі є список всіх зареєстрованих в системі OLE-серверів. Тип OLE-об'єкту визначається як раз тим сервером, який Ви вкажете. Якщо Ви створите новий об'єкт (Create New), то при натисканні на кнопку OK запуститься програма OLE-сервера, в якій і формується новий об'єкт. Також OLE-об'єкт можна створити, використовуючи вже існуючий файл у форматі одного з OLE-серверів. Для цього потрібно вибрати пункт Create from File (див. Рисунок 7). Рисунок 5 -- Створення із файлу Обраний об'єкт можна як включити до програми, так і приєднати, відзначивши пункт Link. Якщо під час дизайну Ви обираєте об'єкт для включення в OLE-контейнер, то він повністю записується у файл форми (formName.dfm) і в подальшому прикомпілюється до .exe файлу. У випадку дуже великих об'єктів це може призвести до тривалих пауз і навіть до виникнення помилки "Out of resource". Тому рекомендується великі об'єкти робити приєднаними (linked). 2.3 Алгоритми процедур Блок-схема алгоритму процедури графічної побудови: 2.4 Програмний код додатку Головна форма: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, StdCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; GroupBox2: TGroupBox; PaintBox1: TPaintBox; MainMenu1: TMainMenu; N1: TMenuItem; Button1: TButton; GroupBox3: TGroupBox; ColorBox1: TColorBox; Label6: TLabel; Label5: TLabel; CheckBox1: TCheckBox; Label7: TLabel; Button2: TButton; Label8: TLabel; ColorBox2: TColorBox; Label9: TLabel; CheckBox2: TCheckBox; Label10: TLabel; CheckBox3: TCheckBox; Label11: TLabel; ColorBox3: TColorBox; Label12: TLabel; Label13: TLabel; ColorBox4: TColorBox; ComboBox1: TComboBox; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; Bycnherwbz1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ColorBox1Change(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ColorBox2Change(Sender: TObject); procedure CheckBox2Click(Sender: TObject); procedure CheckBox3Click(Sender: TObject); procedure ColorBox3Change(Sender: TObject); procedure ColorBox4Change(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure N2Click(Sender: TObject); procedure Activate(Sender: TObject); procedure N3Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure Bycnherwbz1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; x0,y0:integer; xe,ye:integer; x,y:real; dx,dy:real; Mx,My:real; xmin,xmax,ymin,ymax:integer; a1,a2,b1,b2:integer; xa,ya,xb,yb,xc,yc,xd,yd:real; v,c,c1:integer; OB,OD,D,BD:real; xn,yn,xn1,yn1:Real; X1,Y1,X2,Y2,Z1,Z2,xO,yO:real; w:integer; vis:integer; OBP,ODP:integer; implementation uses Unit3, Unit2, Unit4, Unit5, Unit6; {$R *.dfm} function ekrX(x:real):integer; //Преобразование X begin ekrX:=round(mx*(x-xmin)+a1); end; function ekrY(y:real):integer; //Преобразование Y begin ekrY:=round(my*(-y+ymax)+b1); end; procedure TForm1.Activate(Sender: TObject); begin if vis<>1 then begin Form2.ShowModal; end; End; procedure TForm1.FormCreate(Sender: TObject); begin xmin:=-4; xmax:=4; ymin:=-4; ymax:=4; a1:=10; a2:=410; b1:=10; b2:=410; dx:=1; dy:=1; with PaintBox1.Canvas do begin Brush.Color:=clWhite; Rectangle(-1,-1,PaintBox1.Width+1,PaintBox1.Height+1); Pen.width:=1; Pen.Color:=clBlack; Mx:=round((a2-a1)/(xmax-xmin)); My:=round((b2-b1)/(ymax-ymin)); x0:=a1-round(mx)*xmin; y0:=b1+round(my)*ymax; Pen.width:=1; Pen.Style:=psDot; Pen.Color:=Colorbox2.Selected;; Font.Color:=Colorbox3.Selected; if checkbox3.checked=true then begin TextOut(a2-10,y0-15,'X'); TextOut(x0+5,b1+5,'Y'); TextOut(x0+5,y0-18,'0'); end; x:=xmin; repeat Xe:=round(mx*(x-xmin)+a1); if Checkbox1.Checked=true then begin MoveTo(xe,b1);LineTo(xe,b2); end; if checkbox3.checked=true then begin if x<>0 then textOut(xe-5,y0+5,FloatToStr(x)); end; x:=x+dx; until(x>xmax); y:=ymin; repeat Ye:=round(my*(-y+ymax)+b1); if Checkbox1.Checked=true then begin MoveTo(a1,ye);LineTo(a2,ye); end; if checkbox3.checked=true then begin if y<>0 then textOut(x0-20,ye-5,FloatToStr(y)); end; y:=y+dy; until(y>ymax); Font.Color:=clBlack; If Checkbox2.Checked=true then begin Pen.Width:=2; Pen.Color:=Colorbox1.Selected;; Pen.Style:=psSolid; MoveTo(a1,y0); LineTo(a2,y0); MoveTo(x0,b1); LineTo(x0,b2); end; If v=1 then begin X1:=yC-yA;Y1:=xA-xC; Z1:=xA*yC-xC*yA; X2:=yD-yB;Y2:=xB-xD; Z2:=xB*yD-xD*yB; D:=X1*Y2-Y1*X2; If D<>0 then begin xO:=(Z1*Y2-Y1*Z2)/D; yO:=(X1*Z2-Z1*X2)/D; OB:=sqrt(sqr(xO-xB)+sqr(yO-yB)); OD:=sqrt(sqr(xO-xD)+sqr(yO-yD)); BD:=sqrt(sqr(xB-xD)+sqr(yB-yD)); OBP:=round(OB*(100/BD)); ODP:=100-OBP; label5.Caption:='OB='+FloatToStrF(OB,fffixed,4,2)+' '+IntToStr(OBP)+'%'+#13 +'OD='+FloatToStrF(OD,fffixed,4,2)+' '+intToStr(ODP)+'%'; Font.Color:=clRed; textOut(ekrX(xO)+6,ekrY(yO)-6,'O'); end else begin label5.Caption:=''; ShowMessage('Исправте координаты точек'); end; Case Combobox1.ItemIndex of 0:w:=1; 1:w:=2; end; Pen.Width:=w; Pen.Style:=psSolid; Pen.Color:=Colorbox4.Selected; MoveTo(ekrX(xa),ekrY(ya)); LineTo(ekrX(xb),ekrY(yb)); LineTo(ekrX(xc),ekrY(yc)); LineTo(ekrX(xd),ekrY(yd)); LineTo(ekrX(xa),ekrY(ya)); Pen.Width:=1;Pen.Style:=psDot; LineTo(ekrX(xc),ekrY(yc)); MoveTo(ekrX(xb),ekrY(yb)); LineTo(ekrX(xd),ekrY(yd)); Font.Color:=clRed; textOut(ekrX(xA)+6,ekrY(yA)+1,'A'); textOut(ekrX(xB)+6,ekrY(yB)+1,'B'); textOut(ekrX(xC)+6,ekrY(yC)+1,'C');
Страницы: 1, 2, 3, 4
|