Модуль мишки.

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Програмного забезпечення (ПЗ)

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

Рік:
2006
Тип роботи:
Курсова робота
Предмет:
Об'єктно-орієнтовані мови програмування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НУ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" кафедра ПЗ  Курсова робота з предмету „Об'єктно-орієнтовані мови програмування ” На тему: „Модуль мишки” Львів-2006 Зміст  TOC \o "1-3" \h \z \u  HYPERLINK \l "_Toc42274608" Вступ  PAGEREF _Toc42274608 \h 3  HYPERLINK \l "_Toc42274609" 1. Формулювання задачі  PAGEREF _Toc42274609 \h 4  HYPERLINK \l "_Toc42274610" 1.1. Системна структура миші  PAGEREF _Toc42274610 \h 4  HYPERLINK \l "_Toc42274611" 1.2. Скидання драйвера  PAGEREF _Toc42274611 \h 5  HYPERLINK \l "_Toc42274612" 1.3. Показати вказівник миші  PAGEREF _Toc42274612 \h 6  HYPERLINK \l "_Toc42274613" 1.4. Забрати вказівник миші  PAGEREF _Toc42274613 \h 6  HYPERLINK \l "_Toc42274614" 1.5. Отримання поточних координат миші і стан її кнопок  PAGEREF _Toc42274614 \h 6  HYPERLINK \l "_Toc42274615" 1.6. Переміщення вказівника в нове положення  PAGEREF _Toc42274615 \h 7  HYPERLINK \l "_Toc42274616" 2. Опис програми  PAGEREF _Toc42274616 \h 8  HYPERLINK \l "_Toc42274617" 3. Інструкція користувачу  PAGEREF _Toc42274617 \h 10  HYPERLINK \l "_Toc42274618" Висновки  PAGEREF _Toc42274618 \h 12  HYPERLINK \l "_Toc42274619" Література  PAGEREF _Toc42274619 \h 13  HYPERLINK \l "_Toc42274620" Додатки  PAGEREF _Toc42274620 \h 14  HYPERLINK \l "_Toc42274621" Додаток 1. Модуль для роботи з мишкою  PAGEREF _Toc42274621 \h 14  HYPERLINK \l "_Toc42274622" Додаток 2. Текст демонстраційної програми  PAGEREF _Toc42274622 \h 15  Вступ Стрімкий розвиток комп'ютерних технологій приводить до розвитку пристроїв, що взаємодіють з ними. З кожним роком розробляються новітні технології, які з часом реалізовуються у виробництві. До великої частки розробок, які стосуються комп'ютерної галузі, відносяться пристрої вводу інформації. Для виготовлення таких пристроїв, велику увагу звертають на швидкість вводу інформації, простоту та вигідність, а також економічні фактори виробництва. На даному етапі розвитку, компанії, що займаються виготовленням комп'ютерних пристроїв, досить часто розробляють нові та вдосконалюють вже існуючі розробки. Маніпулятор миша є одним з найпоширенішим пристроєм вводу інформації, який модернізується. По своїй структурі, миша, є досить простим та дешевим пристроєм, оскільки має просту технологію виготовлення, а також є досить зручною в користуванні. Більшість апаратних пристроїв, які входять до складу ПК, комплектуються драйверами – особливими програмами, за допомогою яких реалізується взаємодія з апаратурою на фізичному рівні. Не винятком є і маніпулятор миша: розроблений для неї фірмою Microsoft. Цей драйвер є стандартом для драйверів такого типу. В курсовій роботі розглянемо основні принципи побудови драйвера миші та використання його на системному рівні. 1. Формулювання задачі В курсовій роботі потрібно розробити модуль для роботи з мишкою, який дозволяє виконувати основні функції даного пристрою. Для роботи з мишкою на апаратному рівні потрібно використовувати прямий доступ до апаратних ресурсів, дані операції дозволяє виконувати мова програмування Assembler. Більшість мов програмування в свій синтаксис включають стандартні команди Assembler, не винятком є і Pascal. За допомогою цього компілятора напишемо модуль для роботи з мишкою, а також програму для демонстрації створеного модуля. Далі розглянемо основні принципи роботи маніпулятора мишки. Системна структура миші Переміщення миші вимірюється в кроках. Крок – це мінімальна відстань, яка реєструється датчиками миші. Зазвичай дозволяюча здатність датчиків відповідає 8 крокам на міліметр, тобто величина складає 0,125 мм.. Існують пристрої, що мають більш високу точність – до 16 кроків на міліметр. Монітор миші підраховує число кроків на кожному напрямку і перетворює їх в еквівалентну кількість елементів зображення віртуального екрану. Елементи зображення визначаються з стандартного текстового режиму 80х25 шляхом множення координат на 8, тобто віртуальний екран – це максимальне розрішення CGA- адаптера в графічному режимі – 640х480. координати миші можуть виходити за границі віртуального екрану, якщо реальний адаптер має більше розрішення. Монітор екрана слідкує за відповідністю положення вказівника миші на фізичному екрані поточним віртуальним координатам, отриманих від монітора миші. Оскільки дисплей може працювати в різних режимах (текстовому або графічному), монітора екрана опитує поточний режим адаптера за допомогою переривання $10 і автоматично міняє зображення вказівника при зміні режимів. При швидких переміщеннях миші монітор екрана може не встигати міняти положення вказівника на екрані, тому драйвер слідкує також за швидкістю зміщення. Якщо ця швидкість більша за деяку порогову величину, драйвер подвоює число кроків, які відповідають одному й тому ж лінійному зміщенні миші, в результаті вказівник починає зміщатись на екрані з подвоєною швидкістю. Створене драйвером стандартне зображення вказівника на екрані відповідає інверсному прямокутнику в текстовому режимі (тобто прямокутнику, колір якого визначається операцією NOT, що застосовується до байту поточного символу) та направленою справа-наліво і знизу-вверх стрілкою – в графічному режимі. Цей вказівник може змінюватись по вимозі програми. Доступ до функції драйвера миші реалізується за допомогою переривання $33 MS-DOS. В табл. 1,1, описуються функції переривання так, як вони реалізовані в драйвері миші фірми Microsoft. Таблиця 1.1. Функції драйвера миші Скидання драйвера Вхід: AX = 0 Вихід: AX-стан миші і драйвера: $0000 – миша або драйвер не встановлені; $FFFF – скид виконаний, драйвер і миша встановлені; BX – кількість кнопок у миші 0 – число кнопок відмінна від двох 2 – дві кнопки; 3 – три кнопки. Після звертання до функції $00 всі параметри драйвера приймають значення по замовчення: встановлюється стандартна форма вказівника (прямокутник або стрілка – в залежності від поточного режиму роботи дисплея); вказівник поміщається в центр екрану і його зображення гаситься; з вказівником зв’язується відеосторінка 0; драйвера автоматично визначає поточне розрішення екрану і встановлює максимально можливу область переміщення вказівника. Звичайно ця функція викликається після зміни режиму роботи дисплея. 1.3. Показати вказівник миші Вхід: AX=1; Функція $01 показує вказівник на екрані. Оскільки драйвер відслідковує переміщення миші і при погашенні вказівника, останній може з'явитися в любому місці екрану – не обов'язково там, де був погашений. 1.4. Забрати вказівник миші Вхід: AX=2: Функція $02 гасить вказівник миші. Цю функцію слід викликати перед кожним використанням прямого до відеопам’яті. Справа в тому, що драйвер запам’ятовує стан відеопам’яті перед виводом вказівника на екран і відновлює цей стан при зміні вказівника в нове місце. Якщо перед безпосереднім записом у відеопам’ять не погасити вказівник, драйвер виведе на екран невірний символ при зміщенні миші. Точно так ж при безпосередньому зчитуванні із відеопам'яті можна зчитувати вказівник миші замість відповідного символу. Слід мати на увазі, що драйвер нарощує на одиницю внутрішній лічильник всякий раз, коли викликається функція $02, і зменшує цей лічильник при виклику функції $01. Вказівник з'являється тільки в тому випадку, якщо цей лічильник рівний 0, тому виклик функції $01 і $02 може не привести до бажаних результатів, якщо порушені відповідності викликів. 1.5. Отримання поточних координат миші і стан її кнопок Вхід: AX=3. Вихід: BX – байт стану кнопок: Біти 0 – ліва кнопка; 1 – права кнопка; 2 – середня кнопка; (1 відповідає натиснутій кнопці; 0 - відпущеній); CX – горизонтальна координата миші; DX – вертикальна координата. Функція $03 дає інформацію про поточний стан мишки; стан кнопок вказується бітами регістра BX, в той час як в регістр CX і DX повертаються поточні координати вказівника. Координати вказівника відповідають віртуальному екрану. На практиці вони містять положення координатної точки (пікселя) вказівника в графічному режимі або помножені на 8 координати в текстовому режимі (відлік координат від 0). Таким чином, щоб перевести віртуальні координати позиція-колонка, потрібно розділити отримані значення на 8 і додати до них одиницю (текстові координати в Турбо Паскалі відраховуються від 1). Для графічного режиму такий перелік не потрібний. 1.6. Переміщення вказівника в нове положення Вхід: AX=4; CX, DX – потрібні віртуальні координати (X, Y) миші. Функція $04 встановлює вказівник миші в задану точку екрана. Функція отримує віртуальні координати, тому при звертанні до неї координати текстового екрану повинні зменшуватись на одиницю і множитись на 8. Віртуальні координати потрібного положення вказівника повинні знаходитись в прямокутнику, який межується звертаннями до функцій $07 та $08. 2. Опис програми В даному розділі розглянемо структуру модуля Mouse.pas (Додаток 1). Даний модуль написаний на мові програмування Pascal та описує такі функції і процедури: Повертає значення True, якщо програмі доступна миша. MousePresent: boolean; Для провірки доступності миші функція контролює вектор переривань $33 – він не повинен бути нульовим. Потім вона звертається до функції 3 драйвера (дати статус миші) і контролює зміну регістру BX. Ці перевірки здійснюються тільки в тому випадку, якщо внутрішня змінна NButton, містить кількість кнопок миші, рівна нулю. Якщо миша оснащена двома або трьома кнопками, в цю змінну поміщається потрібне число першого ж звертання до функції InitMouse. Функція MouseInit здійснює скидання драйвера миші та повертає кількість кнопок. MouseInit(var nb:word):boolean; Після виклику цієї функції вказівник гаситься і встановлюється в центр екрану, він набуває стандартної форми, границі переміщення вказівника розширюються на весь екран, для цього відображення в текстовому режимі вибирається відеосторінка 0 (основна). Якщо до цього моменту були визначені елементи вибору, вони скидаються. Функція повертає значення True після успішного виклику та False, якщо відсутній драйвер миші або нема фізичного доступу. Виклик функції повинен бути першим перед початком роботи з мишею. Процедура Mouseshow показує вказівник миші. procedure Mouseshow; Процедура Mousehide; гасить вказівник миші. procedure Mousehide; Драйвер миші веде підрахунок звертань до функцій. Щоб виключити неоднозначну реакцію, процедури Mouseshow та Mousehide перевіряють внутрішній флаг MouseVisible і реалізують звертання до цих функцій тільки в тому випадку, якщо це дійсно необхідно. Якщо вказівник уже зображений на екрані, ігнорується виклик Mouseshow, навпаки, якщо вказівник погашений, ігнорується виклик Mousehide. Слід зауважити, що при роботі з стандартними процедурами модуля Crt, а також при нормальному виводі на екран процедурами Write/WriteLn Turbo Pascal організовує прямий доступ до відеопам’яті. Тому корисно використовувати Mousehide перед будь-якими змінами екрану. Процедура mouseread повертає поточний стан миші: procedure mouseread(var x,y,bmask:integer); bmask – признак стану кнопок; x,y – поточні віртуальні координати. В змінній bmask процедура повертає інформацію по поточний стан кнопок миші. Для кожної кнопки в цьому слові виділений один біт (0-вий біт для лівої, 1-ий біт для правої і 2-ий біт для середньої; 0-ий біт відповідає молодшому розряду). Якщо біт має одиничне значення, кнопка натиснута, в іншому випадку – відпущена. Процедура mousesetpos переміщує вказівник в задану точку екрану procedure mousesetpos(x,y:word); x,y – віртуальні координати потрібного положення вказівника. З використанням цих підпрограм створимо програму для демонстрації роботи мишки в текстовому та графічному режимах. Сама програма демонстрації (Додаток 2) містить такі підпрограми: Procedure ShowCircle(X, Y, Xold, Yold, An : Integer); - зображення сектора в квадраті розміром 100х100 з верхньою координатою X,Y та кутом сектора An. Перед виводом нового положення сектора виводиться область екрану в точку Xold, Yold, що було запам’ятовано попереднім викликом функції, а також запам'ятовується область, в яку буде виводитись сектор. Дана функція застосовується в графічному режимі для демонстрації натиснення кнопок миші та переміщення об'єкту за допомогою миші. Procedure Button(x,y,x1,y1:word; S :string); - рисування кнопки з вказаними координатами та надписом. Procedure FrameGraph(X1,Y1,X2,Y2,cf,ct:Integer;s:string); - рисування подвійної рамки в графічному режимі з вказаними координатами, кольором рамки та тексту, а також вивід назви (заголовку) рамки. Procedure Cursor(I1,I2:Byte);Assembler; - встановлення розміру текстового курсору, використовується для „приховання” курсору в текстовому режимі. Procedure FrameWindow(X1,Y1,X2,Y2,cf,ct:Byte;s:string); - рисування подвійної рамки в текстовому режимі з вказаними координатами, кольором рамки та тексту, а також вивід назви (заголовку) рамки. Procedure TextDem; - Процедура для демонстрації роботи мишки в текстовому режимі. Procedure GraphDem; - Процедура для демонстрації роботи мишки в графічному режимі. 3. Інструкція користувачу Після запуску програми на виконання на екрані буде зображено основне меню програми для вибору наступних дій (рис 3.1.). Щоб запустити демонстраційних можливостей створеного модуля в графічному режимі потрібно натиснути клавішу 1, для графічного режиму – 2. Щоб вийти з програми потрібно натиснути 0.  Рис 3.1. Натиснувши 1 програму почне виконувати підпрограму TextDem – демонстрування роботи в текстовому режимі. (Рис 3.2.). На екрані зображено режим відображення – текстовий, кількість кнопок миші, координати, текстові координати миші, а також стан натиснутих клавіш. Якщо натиснути будь-яку клавішу буде відображено її стан.  Рис 3.2. По кутах екрану зображено чотири прямокутники, якщо натиснути кнопку мишки на одному з них, то вказівник мишки переміститься в протилежний. Це демонструє можливість процедури переміщення курсору в задану точку. Щоб вийти з текстового режиму потрібно натисну кнопку миші на надписі Вихід. Програма повернеться в головне меню. Далі виберемо графічний режим, для цього потрібно натиснути клавішу 2. Програма почне виконувати підпрограму GraphDem. (Рис 3.3). На екрані буде зображено режим роботи – графічний, кількість кнопок миші, а також поточні графічні координати. В лівому верхньому куті екрана зображений сектор, який використовується для демонстрування роботи натискування клавіш мишки. Натиснувши ліву клавішу почне збільшуватись кут сектора, праву – зменшуватись. Натиснувши обидві клавіші на секторі можна його переміщувати по екрані не відпускаючи клавіш мишки.  Рис 3.3. Для виходу з демонстраційної підпрограми в графічному режимі потрібно натиснути кнопку Вихід. Висновки В курсовій роботі розглянуто основні функції для роботи з маніпулятором мишка на системному рівні. Також розроблено модуль підпрограм для роботи з даним маніпулятором, які дозволяють працювати з мишкою в середовищі Pascal. На даній мові програмування розроблено програму для демонстрування роботи мишки в текстовому та графічному режимах. Література Издательская группа BHV, Турбо Паскаль 7.0. 1999р. Климова Л. М. "Практическое програмирование. Решение типовых задач" - М., 2000. Фаронов В. В. Программирование на персональных ЭВМ в среде ТУРБО ПАСКАЛЬ. -М.,1990. Фар онов В. В. Турбо Паскаль 7.0. Практика программирования. Учебное пособие.-М., 2000. Додатки Додаток 1. Модуль для роботи з мишкою unit mouse; interface var MousePresent: boolean; function MouseInit(var nb:word):boolean; procedure Mouseshow; procedure Mousehide; procedure mouseread(var x,y,bmask:integer); procedure mousesetpos(x,y:word); implementation uses dos; var r:registers; mi:pointer; function MouseInit; begin if mousepresent then begin r.ax:=0; intr($33,r); if r.ax = 0 then begin nb:=0; mouseinit:=false; end else begin nb:=r.bx; mouseinit:=true end; end else begin nb:=0; mouseinit:=false; end; end; procedure mouseshow; begin r.ax:=1; intr($33,r); end; procedure mousehide; begin r.ax:=2; intr($33,r); end; procedure mouseread; begin r.ax:=3; intr($33,r); x:=r.cx; y:=r.dx; bmask:=r.bx; end; procedure mousesetpos; begin r.ax:=4; r.cx:=x; r.dx:=y; intr($33,r); end; begin getintvec($33,mi); if mi=nil then mousepresent := False else; if byte(mi^)= $ce then mousepresent :=False else mousepresent :=True; end. Додаток 2. Текст демонстраційної програми Uses Crt, Mouse, Graph; Label 1; Const MDelay=10000; Var Size : Word; P, P1 : Pointer; BMask,X, Y, OldX, OldY : Integer; Nb : word; Gd, Gm :Integer; S : String; Xc, Yc, XcOld, YcOld : Integer; A1 : Integer; Procedure ShowCircle(X, Y, Xold, Yold, An : Integer); Begin PutImage(Xold, Yold, P^, NormalPut); FreeMem(P, Size); Size := ImageSize(X, Y, X+100, Y+100); GetMem(P, Size); GetImage(X, Y, X+100, Y+100, P^); SetColor(2); SetFillStyle(7,2); Sector(X+50,Y+50,0,An,50,50); End; Procedure Button(x,y,x1,y1:word; S :string); Begin SetFillStyle(1,6); Setcolor(15); Bar(X,Y,X1,Y1); SetColor(9); Rectangle(X,Y,X1,Y1); SetColor(9); rectangle(X+7,Y+7,X1-7,Y1-7); Line(x,y,x+7,y+7); Line(x1,y,x1-7,y+7); Line(x,y1,x+7,y1-7); SetFillStyle(1,9); FloodFill(x1-4,y1-4,9); SetColor(6); Rectangle(x,y,x1,y1); Setcolor(15); SetTextStyle(0,0,1); OutTextXY(X+((X1-X) div 2)-(TextWidth(S) div 2), Y+((Y1-Y) div 2)-(TextHeight(S) div 2),S); End; Procedure FrameGraph(X1,Y1,X2,Y2,cf,ct:Integer;s:string); Var I,k:Byte; Begin SetColor(cf); RecTangle(X1,Y1,X2,Y2); RecTangle(X1+3,Y1+3,X2-3,Y2-3); SetFillStyle(0,1); SetTextStyle(0,0,1); Bar(X1+((X2-X1) div 2)-(TextWidth(S) div 2),Y1-(TextHeight(S) div 8), X1+((X2-X1) div 2)+(TextWidth(S) div 2),Y1+(TextHeight(S))); SetColor(ct); OutTextXY(X1+((X2-X1) div 2)-(TextWidth(S) div 2), Y1-(TextHeight(S) div 8),S); End; Procedure Cursor(I1,I2:Byte);Assembler; Asm MOV DX,3D4H MOV AL,10 OUT DX,AL MOV AL,I1 INC DX OUT DX,AL MOV AL,11 DEC DX OUT DX,AL MOV AL,I2 INC DX OUT DX,AL end; Procedure FrameWindow(X1,Y1,X2,Y2,cf,ct:Byte;s:string); Var I,k:Byte; Begin k:=textattr; textattr:=cf; For I:=X1+1 To X2-1 Do Begin GotoXY(I,Y1); Write('═'); GotoXY(I,Y2); Write('═'); End; For I:=Y1+1 To Y2-1 Do Begin GotoXY(X1,I); Write('║'); GotoXY(X2,I); Write('║'); End; GotoXY(X1,Y1); Write('╔'); GotoXY(X1,Y2); Write('╚'); GotoXY(X2,Y1); Write('╗'); GotoXY(X2,Y2); Write('╝'); textattr:=ct; Window(1,1,80,25); gotoxy(x1+round(((x2-x1)/2)-(0.5*length(s))),y1); write(s); textattr:=k; End; Procedure TextDem; Begin TextBackGround(1); ClrScr; FrameWindow(1,1,80,24,15+16,14+16,' Текстовий режим '); MouseInit(Nb); GotoXY(30,25);TextColor(14);Write('Кiлькiсть клавiш: ');TextColor(10);Write(Nb); FrameWindow(25,6,55,8,15+15,16+15,' Координати '); FrameWindow(25,9,55,11,15+15,16+15,' Текстовi координати '); FrameWindow(25,12,55,14,15+15,16+15,' Лiва клавiша '); FrameWindow(25,15,55,17,15+15,16+15,' Права клавiша '); FrameWindow(25,18,55,20,15+15,16+15,' Середня клавiша '); TextColor(15); GotoXY(34,23); Write('<< ВИХIД >>'); FrameWindow(2,2,4,4,15+15,0,''); FrameWindow(77,2,79,4,12+15,0,''); FrameWindow(2,21,4,23,13+15,0,''); FrameWindow(77,21,79,23,14+15,0,''); TextColor(15); GotoXY(30,7); Write(' X= Y= '); GotoXY(30,10); Write(' X= Y= '); OldX := 0; OldY := 0; MouseShow; while true Do Begin MouseRead(X,Y,BMask); If (X<>OldX) Or (Y<>OldY) Then Begin {Координати} MouseHide; TextColor(10); GotoXY(37,7); Write(X,' '); GotoXY(45,7); Write(Y,' '); GotoXY(37,10); Write((X div 8)+1,' '); GotoXY(45,10); Write((Y div 8)+1,' '); OldX := X; OldY := Y; MouseShow; Continue; End; If BMAsk=0 Then Begin TextColor(10); GotoXY(27,13); Write(' Вiдпущена '); GotoXY(27,16); Write(' Вiдпущена '); GotoXY(27,19); Write(' Вiдпущена '); Continue; End Else Begin If (X div 8 >=33) And (Y div 8 = 22) And (X div 8<=43) Then Exit; If (X div 8 = 3-1) And (Y div 8 = 3-1) Then Begin MouseSetPos(78*8-8,22*8-8); Delay(MDelay); Continue; End; If (X div 8 = 78-1) And (Y div 8 = 22-1) Then Begin MouseSetPos(3*8-8,3*8-8); Delay(MDelay); Continue; End; If (X div 8 = 78-1) And (Y div 8 = 3-1) Then Begin MouseSetPos(3*8-8,22*8-8); Delay(MDelay); Continue; End; If (X div 8 = 3-1) And (Y div 8 = 22-1) Then Begin MouseSetPos(78*8-8,3*8-8); Delay(MDelay); Continue; End; End; {Лiва} If BMask=1 Then Begin GotoXY(27,13); Write(' Натиснута '); Continue; End; {Права} If BMask=2 Then Begin GotoXY(27,16); Write(' Натиснута '); Continue; End; {Середня} If BMask=3 Then Begin GotoXY(27,19); Write(' Натиснута '); Continue; End; End; End; Procedure GraphDem; Begin Gd := Detect; InitGraph(Gd, Gm, ''); MouseInit(Nb); if GraphResult <> grOk then Begin WriteLn('Помилка iнiцiалiзацii графчного режиму !!!'); ReadKey; Exit; End; SetBKColor(1); ClearDevice; FrameGraph(0,10,GetMaxX-1,GetMaxY-20,15,14,' Графiчний режим '); SetColor(14); MoveTo(240,465); OutText('Кiлькiсть клавiш: '); Str(Nb,S); SetColor(10); OutText(S); FrameGraph(220,100,420,150,14,15,' Координати '); SetColor(15); OutTextXY(270,120,'X= Y= '); Button(240,420,400,450,'Вихiд'); Size := ImageSize(50, 50, 150, 150); GetMem(P, Size); GetImage(50, 50, 150, 150, P^); SetColor(2); SetFillStyle(1,2); Sector(100,100,0,360,50,50); Xc := 50; Yc := 50; XcOld := 50; YcOld := 50; A1 := 360; MouseShow; while true Do Begin MouseRead(X,Y,BMask); If BMAsk=3 Then Begin If ((X>=Xc) And (Y>=Yc) And (X<=Xc+100) And (Y<=Yc+100)) And ((X<>OldX) Or (Y<>OldY)) Then Begin MouseHide; Xc := Xc + (X-OldX); Yc := Yc + (Y-OldY); If (Xc < 5) Or (Xc+100>635) Then Xc := Xc - (X-OldX); If (Yc < 5) Or (Yc+100>475) Then Yc := Yc - (Y-OldY); ShowCircle(Xc,Yc,XcOld,YcOld,A1); XcOld := Xc; YcOld := Yc; End; End Else If (BMask=1) And (A1>90) Then Begin If (X>=240) And (Y>=420) And (X<=400) And (Y<=450) Then Exit; MouseHide; Dec(A1,2); ShowCircle(Xc,Yc,XcOld,YcOld,A1); End Else If (BMask=2) And (A1<360) Then Begin MouseHide; Inc(A1,2); ShowCircle(Xc,Yc,XcOld,YcOld,A1); End Else MouseShow; If (X<>OldX) Or (Y<>OldY) Then Begin {Координати} MouseHide; Str(X,S); SetColor(10); SetFillStyle(0,1); Bar(290,110,330,130); OutTextXY(300,120,S); Str(Y,S); SetColor(10); SetFillStyle(0,1); Bar(350,110,390,130); OutTextXY(360,120,S); OldX := X; OldY := Y; MouseShow; Continue; End; End; CloseGraph; FreeMem(P,Size); End; Var Ch : Char; Begin 1: TextMode(CO80); TextBackGround(0); ClrScr; Cursor(1,0); If Not MouseInit(Nb) Then Begin FrameWindow(20,10,60,12,4,4,'Помилка'); GotoXY(30,11);TextColor(15); Write('Мишка не знайдена !!!'); ReadKey; Exit; End; FrameWindow(30,10,50,14,15,14,''); TextColor(10); GotoXY(31,11);Write('1 - Текстовий режим'); GotoXY(31,12);Write('2 - Графiчний режим'); GotoXY(31,13);Write('0 - Вихiд'); While True Do Begin Ch := ReadKey; If Ch = #48 Then Break; If Ch = #49 Then Begin TextDem; Goto 1; End; If Ch = #50 Then Begin GraphDem; Goto 1; End; End; End.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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