Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 40
1
TASM

Нажатием левой кнопки мыши выбирать и запоминать цвет, при нажатии правой кнопки мыши - устанавливать выбранный цвет

10.04.2018, 18:02. Показов 4586. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Люди добрые, киньте какой-нибудь рабочий .asm для masm, похожий на решение следующей задачи, а то мне год надо зубрить чтобы написать что-то подобное. Заранее благодарен. Задача: Заполнить 0-ю страницу видеопамяти произвольным текстом. В первую строку экрана вывести 16 символов NUL (ASCII код 0) с различными значениями атрибута фона (старшая тетрада атрибута символа). Нажатием левой кнопки в первой строке выбирать и запоминать выбранный цвет. При размещении же курсора на любой символ остальных строк экрана менять его цвет на выбранный при нажатии правой кнопки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2018, 18:02
Ответы с готовыми решениями:

Работа с мышью: вывести квадрат нажатием левой кнопки мыши и спрятать его нажатием правой кнопки мыши
Ребят обьясните как вывести квадрат левым нажатием кнопки мыши и спрятав его правым нажатием кнопки...

По щелчку левой кнопки мыши должен меняться цвет формы, а по щелчку правой кнопки мыши – восстанавливаться предыдущий
Добрый день) Пишу одну программку, которая позволяла бы при перемещении курсора мыши менять его...

При нажати левой кнопки мыши в месте нажатия отображается зеленый кружок, а при нажатии правой кнопки мыши красный квад
При нажати левой кнопки мыши в месте нажатия отображается зеленый кружок, а при нажатии правой...

Изменить цвет символов на следующий в палитре цветов при нажатии левой кнопки мыши
Всем привет! Задание: Изменить цвет символов на следующий в палитре цветов при нажатии левой...

3
Модератор
Эксперт по электронике
8516 / 4370 / 1648
Регистрация: 01.02.2015
Сообщений: 13,577
Записей в блоге: 9
10.04.2018, 19:43 2
Если вам безразлично, что сдавать - посмотрите в этих темах
FAQ для раздела Assembler, MASM, TASM
Управление манипулятором мышь - изменение формы курсора в зависимости от координат.
Удаление элементов по нажатию левой клавиши мыши
При нажатии на правую кнопку мышки, содержимое чётных и нечётных столбцов экрана обменять местами
Вывод текстового файла на экран. Цветовая "подсветка" символов. Изменение цвета фона мышью.
Переключение видеостраниц при нажатии левой кнопки мыши
Обменять верхнюю и нижнюю части экрана по нажатию левой кнопки мыши
Нарисовать прямоугольник заданного размера, положение на экране определяется нажатием кнопки мыши
Выбор типа курсора мыши по нажатию на клавиши
Манипулятор "мышь" - изменение формы курсора в зависимости от координат

В них именно те принципы, которые вам нужны. Нужно только пользовательский обработчик видоизменить.
1
Модератор
Эксперт по электронике
8516 / 4370 / 1648
Регистрация: 01.02.2015
Сообщений: 13,577
Записей в блоге: 9
13.04.2018, 09:52 3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
.model small
 
.stack 100h
 
.data
        ;коды клавиш
        KeyCode_Esc                     equ     1Bh     ;Esc
 
        ;Константы событий "мыши"
        MouseEvent_None                 equ     0000h   ;Удалить пользовательский обработчик
        MouseEvent_Move                 equ     0001h   ;любое перемещение
        MouseEvent_PressLeftButton      equ     0002h   ;нажатие левой кнопки
        MouseEvent_ReleaseLeftButton    equ     0004h   ;отпускание левой кнопки
        MouseEvent_PressRightButton     equ     0008h   ;нажатие правой кнопки
        MouseEvent_ReleaseRightButton   equ     0010h   ;отпускание правой кнопки
        MouseEvent_PressMiddleButton    equ     0020h   ;нажатие средней кнопки
        MouseEvent_ReleaseMiddleButton  equ     0040h   ;отпускание средней кнопки
 
        MouseInitOk                     equ     0FFFFh  ;инициализация мыши - успешна
        MouseInitFault                  equ     0000h   ;инициализация мыши - мышь или драйвер мыши не установлены
 
        MouseButtons_Any                equ     0000h   ;количество кнопок у мыши - отлично от 2 и 3
        MouseButtons_2                  equ     0002h   ;количество кнопок у мыши - 2
        MouseButtons_2_                 equ     0FFFFh  ;количество кнопок у мыши - 2
        MouseButtons_3                  equ     0003h   ;количество кнопок у мыши - 3
 
        ;сообщения программы
        msgMouseFault                   db      'The mouse or mouse driver was not detected.', 13, 10, '$'
 
        Color                           db      0
        ValidColor                      db      0
.code
 
;Ожидание нажатия клавиши на клавиатуре
;вход
; - нет
;выход
;ax - al - ASCII код нажатой клавиши, ah - скан-код
ReadKey         proc
        mov     ah,     00h
        int     16h
        ret
ReadKey         endp
 
;Инициализация работы с "мышью"
;Выполняется аппаратный и программный сброс мыши и драйвера
;вход
; - нет
;выход
;ax - результат инициализации
;   - 0000h, если мышь или драйвер мыши не установлены
;   - FFFFh, если драйвер и мышь установлены
;bx - число кнопок
;   - 0002 или FFFF - две
;   - 0003 - три
;   - 0000 - другое количество
MouseInit       macro
        mov     ax,     0000h
        int     33h
endm
 
;Показать курсор "мыши"
;вход
; - нет
;выход
; - нет
MouseShowCursor macro
        push    ax
        mov     ax,     0001h
        int     33h
        pop     ax
endm
 
;Спрятать курсор "мыши"
;вход
; - нет
;выход
; - нет
MouseHideCursor macro
        push    ax
        mov     ax,     0002h
        int     33h
        pop     ax
endm
 
;Установить/удалить обработчик событий от "мыши"
;вход
;ES:DX = адрес обработчика
;СХ = условие вызова
;   бит 0 — любое перемещение мыши
;   бит 1 — нажатие левой кнопки
;   бит 2 — отпускание левой кнопки
;   бит 3 — нажатие правой кнопки
;   бит 4 — отпускание правой кнопки
;   бит 5 — нажатие средней кнопки
;   бит 6 — отпускание средней кнопки
;СХ = 0000h — отменить обработчик;выход
;выход
; - нет
MouseSetHandler proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    es
 
        mov     ax,     000Ch
        int     33h
 
        pop     es
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
MouseSetHandler endp
 
;Обработчик событий "мыши"
;вход
;АХ содержит условие вызова,
;ВХ - состояние кнопок,
;СХ, DX - X- и Y-координаты курсора,
;SI, DI - счетчики последнего перемещения по горизонтали и вертикали
;      (единицы измерения для этих счетчиков - мики, 1/200 дюйма),
;DS - сегмент данных драйвера мыши.
;выход
; - нет
MyMouseHandler  proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        push    es
        push    ds
 
        push    ax
        ;настройка сегментных регистров
        mov     ax,     0B800h
        mov     es,     ax
        mov     ax,     @data
        mov     ds,     ax
        ;пересчёт координат курсора к экранным
        shr     cx,     1       ;x
        shr     cx,     1
        shr     cx,     1
 
        shr     dx,     1       ;y
        shr     dx,     1
        shr     dx,     1
        ;вычисление адреса видеопамяти, соответсвующего
        ;экраным координатам
        mov     ax,     160
        mul     dx
        add     ax,     cx
        add     ax,     cx
        mov     si,     ax
        ;спрятать курсор мыши
        MouseHideCursor
 
        pop     ax
 
@@IsLeftButton:
        test    ax,     MouseEvent_PressLeftButton
        je      @@IsRightButton
        ;проверка нахождения курсора в первых 16 символах первой строки
        cmp     si,     16*2
        jae     @@mmhExit
        ;копирование цвета фона прямым обращением к памяти
        mov     al,     es:[si+1]
        mov     [Color],        al
        mov     [ValidColor],   1
        jmp     @@mmhExit
@@IsRightButton:
        ;если цвет фона ещё не копировался - выйти
        cmp     [ValidColor],   0
        je      @@mmhExit
        ;проверка нахождения курсора в первых 16 символах первой строки
        cmp     si,     16*2
        jb      @@mmhExit
        ;установка цвета фона прямым обращением к видеопамяти
        mov     al,     [Color]
        mov     es:[si+1],      al
@@mmhExit:
        ;показать курсор
        MouseShowCursor
        pop     ds
        pop     es
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        retf
MyMouseHandler  endp
 
;Заполнение экрана символами
FillScreen      proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        push    es
 
        mov     ax,     0B800h
        mov     es,     ax
        mov     si,     0
 
 
        mov     bl,     0       ;символ
        mov     bh,     0       ;цвет
        mov     cx,     25*80   ;количество знакомест на экране
@@ForWhole:
        and     bx,     0F0Fh
        mov     ax,     bx
        add     al,     'A'
        add     ah,     3       ;цвет фона делаем отличным от цвета символа
        and     ah,     07h
        shl     ah,     1
        shl     ah,     1
        shl     ah,     1
        shl     ah,     1
        or      ah,     bh      ;к цвету фона добавляем цвет символа
 
        mov     es:[si],ax      ;записываем символ и его атрибут (цвета)
        add     si,     2       ;переходим к следующему адресу символа на экране
 
        add     bx,     0101h   ;изменяем цвет и номер выводимого символа
 
        loop    @@ForWhole
 
        ;В первую строку экрана вывести 16 символов NUL (ASCII код 0)
        ;с различными значениями атрибута фона
        mov     cx,     16
        mov     ax,     0
        mov     di,     0
@@ForFirst16:
                stosw
                add     ah,     10h
        loop    @@ForFirst16
 
        pop     es
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
FillScreen      endp
 
;основная программа
main            proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;попытка инициализации мыши
        MouseInit
        cmp     ax,     MouseInitOk
        je      @@MouseInitOk
        ;если инициализация не удалась - вывести сообщение
        ;и завершить программу
        mov     ah,     09h
        lea     dx,     msgMouseFault
        int     21h
        jmp     @@Exit
 
@@MouseInitOk:
        ;заполнение экрана
        call    FillScreen
        ;установить признак, что сохранённый цвет фона недействительный
        mov     [ValidColor],   0
        ;установить пользовательский обработчик событий "мыши"
        push    es
        mov     ax,     seg MyMouseHandler
        mov     es,     ax
        mov     dx,     offset  MyMouseHandler
        mov     cx,     MouseEvent_PressRightButton OR MouseEvent_PressLeftButton
        call    MouseSetHandler
        pop     es
        ;показать курсор
        MouseShowCursor
        ;цикл ожидания нажатия кнопки ESC
        ;в цикле проверяется работа обработчика мыши
@@WaitEscapePressed:
        call    ReadKey
        cmp     al,     KeyCode_Esc
        jne     @@WaitEscapePressed
 
        ;завершение работы с "мышью"
        ; - спрятать курсор
        MouseHideCursor
        ; - удалить пользовательский обработчик прерывания
        mov     cx,     MouseEvent_None
        call    MouseSetHandler
 
@@Exit:
        mov     ax,     4C00h
        int     21h
main            endp
 
end     main
1
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 40
13.04.2018, 15:40  [ТС] 4
Вау, чудеса, работает! Спасибо!
0
13.04.2018, 15:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2018, 15:40
Помогаю со студенческими работами здесь

Действия при нажатии левой(правой) кнопки мыши в рабочей области окна
Нужно Написать Win32API. Что бы правая и левая кнопка мыши выполняли действия написанные в...

При нажатии правой кнопки мыши увеличить ширину формы на 10, левой уменьшить
При нажатии правой кнопки мыши увеличить ширину формы на 10, левой уменьшить. Помогите полностью...

При нажатии правой кнопки мыши увеличить ширину формы на 10, левой уменьшить.
Помогите написать код программы.При нажатии правой кнопки мыши увеличить ширину формы на 10, левой...

При нажатии кнопки мыши случайным образом менять цвет формы
Здравствуйте нужно сделать так чтобы при нажатии кнопки мыши случайным образом менять цвет формы.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru