ЛАБОРАТОРНІ РОБОТИ № 1, 2, 3

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2020
Тип роботи:
Лабораторна робота
Предмет:
Адміністрування САПР

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра САП  ЛАБОРАТОРНІ РОБОТИ № 1, 2, 3 з курсу: “Адміністрування САПР” на тему: „Створення компоненту бібліотеки засобами графічного редактора Symbol Editor, Pattern Editor, Library Executive та схеми електричної принципової редактором Shematic” Львів - 2005 МЕТА РОБОТИ  ТЕОРЕТИЧНІ ВІДОМОСТІ             3. ІНДИВІДУАЛЬНЕ ЗАВДАННЯ  ТЕКСТ ПРОГРАМИ program TPMark3; uses SysUtils, Windows, Messages; var wc : TWndClassEx; // Зміна шаблону класу вікна. MainWnd : HWND; // Описувач головного вікна. Mesg : TMsg; // Змінна для циклу збора повідомлень. xPos, yPos, nWidth, nHeight : Integer; MyDC, WMFDC, OldDC : HDC; // Контекст пристрою. zoom : Integer; // Масштаб (по замовчуванню 100). brush : HBrush; // Координати початків координат для всіх графіків. ox1, oy1, ox2, oy2, ox3, oy3, ox4, oy4, ox5, oy5, ox6, oy6 : integer; MFile : HMetaFile; // Дескриптор метафайлу. count : integer; // Допоміжна змінна. rec : TRect; // Область вікна для малювання. prec : PRect; // Область для метафайлу. // Віконна процедура головного вікна. function WindowProc(wnd : HWND; Msg : Integer; Wparam : Wparam; Lparam : Lparam) : Lresult; stdcall; Begin // Далі проходить цикл обробки повідомлень. case msg of wm_destroy : // Повідомленні, яке надсилається при знищенні вікна. begin postquitmessage(0); exit; Result := 0; end else Result := DefWindowProc(wnd, msg, wparam, lparam); end; end; //--------------------------------------------------------------------------- // Процедура побудови графіка функції, з використанням ліній. procedure DrawGraphicWithLines(ox, oy, zoom : integer; A, B, krok : double; color : longint); var x, y : integer; Fi, Ro : double; pen : HPen; begin pen := CreatePen(ps_Solid, 2, color); SelectObject(MyDC, pen); Fi := 0; Ro := A*sin(B*Fi); x := Round(Ro*cos(Fi)*zoom) + ox; y := Round(Ro*sin(Fi)*zoom) + oy; MoveToEx(MyDC, x, y, nil); Fi := Fi + krok; repeat Ro := A*sin(B*Fi); x := Round(Ro*cos(Fi)*zoom) + ox; y := Round(Ro*sin(Fi)*zoom) + oy; LineTo(MyDC, x, y); Fi := Fi + krok; until Fi > 12.5; DeleteObject(pen); end; //--------------------------------------------------------------------------- // Процедура побудови графіка функції, з використанням точок. procedure DrawGraphicWithPoints(ox, oy, zoom : integer; A, B, krok : double; color : longint); var x, y : integer; Fi, Ro : double; begin Fi := 0; repeat Ro := A*sin(B*Fi); x := Round(Ro*cos(Fi)*zoom) + ox; y := Round(Ro*sin(Fi)*zoom) + oy; SetPixel(MyDC, x, y, color); Fi := Fi + krok; until Fi > 12.5; end; //--------------------------------------------------------------------------- // Процедура побудови координатних осей. procedure DrawOsi(ox, oy, zoom : integer); Var pen : HPen; brush : HBrush; point : array [1..5] of TPoint; begin // 1. Створуємо перо. pen := CreatePen(ps_Solid, 2, RGB(0, 0, 0)); SelectObject(MyDC, pen); // 2. Створюємо пензлик. brush := CreateSolidBrush(RGB(0, 0, 0)); SelectObject(MyDC, brush); SetBkMode(MyDc, 1); // Робимо прозорий фон. // 3. Малюємо осі координат. MoveToEx(MyDC, ox - zoom - 30, oy, nil); LineTo(MyDC, ox + zoom + 30, oy); // Малюємо OX. MoveToEx(MyDC, ox, oy + zoom + 30, nil); LineTo(MyDC, ox, oy - zoom - 30); // Малюємо OY. // 4. Малюємо стрілку для осі OX. point[1].X := ox + zoom + 33; point[1].Y := oy - 1; point[2].X := ox + zoom + 13; point[2].Y := oy + 4; point[3].X := ox + zoom + 23; point[3].Y := oy - 1; point[4].X := ox + zoom + 13; point[4].Y := oy - 5; point[5].X := ox + zoom + 33; point[5].Y := oy - 1; Polygon(MyDC, point, 4); // 5. Малюємо стрілку для осі OY. point[1].X := ox - 1; point[1].Y := oy - zoom - 33; point[2].X := ox - 5; point[2].Y := oy - zoom - 13; point[3].X := ox; point[3].Y := oy - zoom - 23; point[4].X := ox + 4; point[4].Y := oy - zoom - 13; point[5].X := ox - 1; point[5].Y := oy - zoom - 33; Polygon(MyDC, point, 4); // 6. Виводимо назви осей. TextOut(MyDc, ox + zoom + 30, oy + 4, 'X', 1); TextOut(MyDc, ox + 4, oy - zoom - 40, 'Y', 1); // 7. Знищуємо об'єкти. DeleteObject(brush); DeleteObject(pen); end; //--------------------------------------------------------------------------- // Процедура побудови координатної сітки. procedure DrawGrid(ox, oy, zoom : integer); Var pen : HPen; x, y, krok : integer; begin pen := CreatePen(ps_Dot, 1, RGB(0, 0, 0)); SelectObject(MyDC, pen); SetBkMode(MyDc, 1); // Робимо прозорий фон. krok := 40; y := oy + krok; while y <= oy + zoom + 30 do begin MoveToEx(MyDC, ox - zoom - 30, y, nil); LineTo(MyDC, ox + zoom + 30, y); y := y + krok; end; y := oy - krok; while y >= oy - zoom - 30 do begin MoveToEx(MyDC, ox - zoom - 30, y, nil); LineTo(MyDC, ox + zoom + 30, y); y := y - krok; end; x := ox - krok; while x >= ox - zoom - 30 do begin MoveToEx(MyDC, x, oy + zoom + 30, nil); LineTo(MyDC, x, oy - zoom - 30); x := x - krok; end; x := ox + krok; while x <= ox + zoom + 30 do begin MoveToEx(MyDC, x, oy + zoom + 30, nil); LineTo(MyDC, x, oy - zoom - 30); x := x + krok; end; DeleteObject(pen); end; //--------------------------------------------------------------------------- begin // Далі йде заповнення шаблону класу вікна. wc.cbSize := sizeof(wc); wc.style := cs_hredraw or cs_vredraw; wc.lpfnWndProc := @WindowProc; wc.cbClsExtra := 0; wc.cbWndExtra := 0; wc.hInstance := HInstance; wc.hIcon := LoadIcon(0, idi_application); wc.hCursor := LoadCursor(0, idc_arrow); wc.hbrBackground := COLOR_BTNFACE + 1; wc.lpszMenuName := nil; wc.lpszClassName := 'WinMin: Main'; RegisterClassEx(wc); // Реєстрація нового класу в системі. // Заповнення зменних xPos, yPos, nWidth, nHeight. xPos := 0; yPos := 0; nWidth := 1024; nHeight := 739; // Створення головного вікна. MainWnd := CreateWindowEx(0, // Прапорці розширених стилів. 'WinMin: Main', // Ім'я класу вікна, яке задане при заповненні структури wc. 'Маркелов - Лабораторна робота 3 (виконав Паранчак Т. М.).', // Заголовок вікна. ws_overlappedwindow, // Прапорці стилів вікна. xPos, // Горизонтальна позиція вікна. yPos, // Вертикальна позиція вікна. nWidth, // Ширина вікна. nHeight, // Висота вікна. 0, // Описувач батьківського вікна (parent) чи вікна-володаря (owner). 0, // Описувач меню вікна (меню нема, нема і описувача). Hinstance, // Описувач програми (application). nil); // Address of window-creation data. ShowWindow(MainWnd, CmdShow); // Відображуємо вікно. // Задання початкових значень. count := 0; zoom := 100; ox1 := 150; oy1 := 170; ox2 := 500; oy2 := 170; ox3 := 850; oy3 := 170; ox4 := 150; oy4 := 520; ox5 := 500; oy5 := 520; ox6 := 850; oy6 := 520; GetClientRect(MainWnd, rec); new(prec); prec.Left := rec.Left; prec.Top := rec.Top; prec.Right := rec.Right; prec.Bottom := rec.Bottom; // Цикл обробки повідомлень. Він може трохи видозмінюватися, але цей код присутній завжни. While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg); // Робота з графічними функціями. MyDC:=GetDC(MainWnd); // Отримання контексту пристрою виводу. SaveDC(OldDC); // ************************ Мій власний код. *************************** if (Mesg.message = 256) or (Mesg.message = 15) or (Mesg.message = 49366) then begin if (count = 0) or (count >= 3) then begin Rectangle(MyDC, xPos, yPos, nWidth, nHeight); // 1. Натиснення '+'. if (Mesg.message = 256) and (Mesg.wParam = 107) then begin Rectangle(MyDC, xPos, yPos, nWidth, nHeight); zoom := zoom + 20; ox2 := ox2 + (zoom - 100)*2; ox3 := ox3 + (zoom - 100)*4; oy4 := oy4 + (zoom - 100)*2; ox5 := ox5 + (zoom - 100)*2; oy5 := oy5 + (zoom - 100)*2; ox6 := ox6 + (zoom - 100)*4; oy6 := oy6 + (zoom - 100)*2; end else if (Mesg.message = 256) and (Mesg.wParam = 109) then begin Rectangle(MyDC, xPos, yPos, nWidth, nHeight); if zoom >= 100 then begin ox2 := ox2 - (zoom - 100)*2; ox3 := ox3 - (zoom - 100)*4; oy4 := oy4 - (zoom - 100)*2; ox5 := ox5 - (zoom - 100)*2; oy5 := oy5 - (zoom - 100)*2; ox6 := ox6 - (zoom - 100)*4; oy6 := oy6 - (zoom - 100)*2; end; zoom := zoom - 20; end else if (Mesg.message = 256) and (Mesg.wParam = 37) then begin ox1 := ox1 - 80; ox2 := ox2 - 80; ox3 := ox3 - 80; ox4 := ox4 - 80; ox5 := ox5 - 80; ox6 := ox6 - 80; end else if (Mesg.message = 256) and (Mesg.wParam = 39) then begin ox1 := ox1 + 80; ox2 := ox2 + 80; ox3 := ox3 + 80; ox4 := ox4 + 80; ox5 := ox5 + 80; ox6 := ox6 + 80; end else if (Mesg.message = 256) and (Mesg.wParam = 38) then begin oy1 := oy1 - 80; oy2 := oy2 - 80; oy3 := oy3 - 80; oy4 := oy4 - 80; oy5 := oy5 - 80; oy6 := oy6 - 80; end else if (Mesg.message = 256) and (Mesg.wParam = 40) then begin oy1 := oy1 + 80; oy2 := oy2 + 80; oy3 := oy3 + 80; oy4 := oy4 + 80; oy5 := oy5 + 80; oy6 := oy6 + 80; end else if (Mesg.message = 256) and (Mesg.wParam = 112) then begin // WMFDC := CreateEnhMetaFile(MyDC, 'd:\TPMark3.wmf', prec, nil); // MFile := CloseEnhMetaFile(WMFDC); end else if (Mesg.message = 256) and (Mesg.wParam = 113) then begin // PlayEnhMetaFile(WMFDC, MFile, rec); end; // 1. Малюємо перший графік. DrawOsi(ox1+zoom-100, oy1+zoom-100, zoom); DrawGrid(ox1+zoom-100, oy1+zoom-100, zoom); DrawGraphicWithPoints(ox1+zoom-100, oy1+zoom-100, zoom, 1, 4, 0.02, RGB(205, 1, 27)); TextOut(MyDc, ox1+zoom-100 - zoom - 20, oy1 + zoom+zoom-100 + 50, 'Рис. 1. Одна функція (A = 1, B = 4).', 37); // 2. Малюємо другий графік. DrawOsi(ox2+zoom-100, oy2+zoom-100, zoom); DrawGrid(ox2+zoom-100, oy2+zoom-100, zoom); DrawGraphicWithLines(ox2+zoom-100, oy2+zoom-100, zoom, 1, 10, 0.01, RGB(0, 168, 0)); TextOut(MyDc, ox2+zoom-100 - zoom - 20, oy2+zoom-100 + zoom + 50, 'Рис. 2. Одна функція (A = 1, B = 10).', 38); // 3. Малюємо третій графік. DrawOsi(ox3+zoom-100, oy3+zoom-100, zoom); DrawGrid(ox3+zoom-100, oy3+zoom-100, zoom); DrawGraphicWithLines(ox3+zoom-100, oy3+zoom-100, zoom, 1, 10.5, 0.01, RGB(0, 0, 255)); TextOut(MyDc, ox3+zoom-100 - zoom - 25, oy3+zoom-100 + zoom + 50, 'Рис. 3. Одна функція (A = 1, B = 10.5).', 40); // 1. Малюємо першу квітку. DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 1, 5.5, 0.001, RGB(255, 0, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.9, 5.5, 0.01, RGB(255, 100, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.8, 5.5, 0.01, RGB(255, 128, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.7, 5.5, 0.01, RGB(255, 150, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.6, 5.5, 0.01, RGB(255, 150, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.5, 5.5, 0.01, RGB(255, 180, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.4, 5.5, 0.01, RGB(255, 200, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.3, 5.5, 0.01, RGB(255, 220, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.2, 5.5, 0.1, RGB(255, 255, 0)); TextOut(MyDc, ox4+zoom-100 - zoom - 40, oy4+zoom-100 + zoom + 10, 'Рис. 4. Девять функцій (A = [0.2; 1], B = 5.5).', 48); // 2. Малюємо другу квітку. DrawGraphicWithLines(ox5+zoom-100, oy5+zoom-100, zoom, 1, 3, 0.01, RGB(242, 0, 231)); brush := CreateSolidBrush(RGB(242, 0, 231)); SelectObject(MyDC, brush); FloodFill(MyDC, ox5+zoom-100, oy5+zoom-100-50, RGB(242, 0, 231)); FloodFill(MyDC, ox5+zoom-100-50, oy5+zoom-100+30, RGB(242, 0, 231)); FloodFill(MyDC, ox5+zoom-100+50, oy5+zoom-100+30, RGB(242, 0, 231)); DeleteObject(brush); DrawGraphicWithLines(ox5+zoom-100, oy5+zoom-100, zoom, 0.15, 3.5, 0.1, RGB(255, 255, 0)); TextOut(MyDc, ox5+zoom-100 - zoom, oy5+zoom-100 + zoom + 10, 'Рис. 5. Дві функції (A = 1, B = 3', 34); TextOut(MyDc, ox5+zoom-100 - zoom + 40, oy5+zoom-100 + zoom + 27, 'і A = 0.15; B = 3.5).', 23); // 3. Малюємо третю квітку. DrawGraphicWithLines(ox6+zoom-100, oy6+zoom-100, zoom, 1, 16.7, 0.01, RGB(255, 0, 0)); TextOut(MyDc, ox6+zoom-100 - zoom - 25, oy6+zoom-100 + zoom + 10, 'Рис. 6. Одна функція (A = 1, B = 16.7).', 40); end; end; count := count + 1; // *********************************************************************** ReleaseDC(MainWnd,OldDC); // Звільнення зсилки. DeleteDC(MyDC); // Видалення зсилки. end; //WMFDC := CreateEnhMetaFile(MyDC, 'd:\TPMark3.wmf', prec, nil); //MFile := CloseEnhMetaFile(WMFDC); //DeleteEnhMetaFile(MFile); end. РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ  ВИСНОВОК Програмування під операційну систему Windows є досить просте і дає великі можливості, хоча й потребує великих знань про принципи виконання програм та виникнення подій в системі.
Антиботан аватар за замовчуванням

02.10.2020 20:21

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!