Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 04:41   #1
NevroZ
 
Регистрация: 13.06.2012
Сообщений: 5
Восклицание Стирание нарисованной линии. Ассемблер

Вобщем прога мышкой рисует линии в досе, подскажите как дописать что бы она стирала линию при нажатии правой кнопки мыши.(Линии рисует от предиущего щелчка к следующему).
Код:
; Рисует на экране прямые линии, оканчивающиеся в позициях, которые указываются 
; мышью.
.model  tiny 
.code
org    100h 
.186 
start:
mov    ax,12h
int    10h 
mov   ax,0 
int    33h 
mov   ax,1 
int   33h
mov ax,000Ch
mov cx,0002h
mov dx,offset handler
int 33h
mov ah,0
int 16h
mov ax,000Ch
mov cx,0000h
int 33h
mov ax,3
int 10h 
ret
handler:
push 0A000h
pop cs
push cs
pop ds
push cx
push dx
mov    ax,2 
int    33h
cmp    word ptr previous_X,-1 
je    first_point
call   line_bresenham
exit_handler:
pop   dx
pop   cx
mov    previous_X,cx
mov    previous_Y,dx
mov   ax, 1 
int    33h
retf
first_point:
call   putpixel1b
jmp   short exit_handler
line_bresenham:
mov ax, сx
sub ax,previous_X
jns dx_pos
neg ax
mov word ptr X_increment, 1
jmp short dx_neg
dx_pos: mov word ptr X_increment, -1
dx_neg: mov bx,dx
sub bx,previous_Y
jns dy_pos
neg bx
mov word ptr Y_increment, 1
jmp short dy_neg
dy_pos: mov word ptr Y_increment,-1 
dy_neg:
shl ax,1
shl bx,1
call   putpixel1b
cmp ax,bx
jna dx_le_dy
mov di,ax
shr di,1
neg di
add di,bx 
cycle:
cmp ex,word ptr previous_X
je exit_bres
cmp di,0
jl fractlt0
add dx,word ptr Y_increment 
sub di,ax            
fractlt0:
add сx,word ptr X_increment 
add di,bx            
call putpixel1b     
jmp short cycle
dx_le_dy: :
mov di,bx              
shr di,1
neg di             
add di,ax           
cycle2: '.
cmp dx,word ptr previous_Y
je exit_bres         
cmp di,0              
jl fractlt02          
add cx,word ptr X_increment 
sub di,bx
fractlt02: 
add dx,word ptr Y_increment
add di,ax
call putpixel1b        
jmp short cycle2        
exit_bres: 
ret
Putpixel1b:
pusha 
xor bx,bx            
mov ax,dx         
imul ax, ax,80       
push cx
shr cx,3         
add ax,cx         
mov di,ax         
mov si,di         
pop cx     
mov bx,0080h
and cx,07h 
shr bx,cl        
lods   es:byte ptr some_label 
or    ax,bx
stosb
popa
ret
previous_X  dw  -1 
previous_Y  dw  -1 
Y_increment     dw  -1 
X_increment     dw  -1 
Some_label:
end         start
___________
1.Название темы должно адекватно отражать суть решаемой задачи/проблемы.

2. Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.06.2012 в 08:23.
NevroZ вне форума Ответить с цитированием
Старый 14.06.2012, 04:47   #2
NevroZ
 
Регистрация: 13.06.2012
Сообщений: 5
По умолчанию

Модеры, не удаляйте пожалуйста тему по другому не могу сформулировать без слов которые запрещены. Просто хочу понять как дописать.
NevroZ вне форума Ответить с цитированием
Старый 14.06.2012, 08:05   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А чем "Удаление нарсованной линии. Ассемблер" не подходит?

Самый простой (но не очень хороший) способ удаления линии - нарисовать поверх нее линию цвета фона.

Последний раз редактировалось s-andriano; 14.06.2012 в 08:08.
s-andriano вне форума Ответить с цитированием
Старый 14.06.2012, 09:04   #4
NevroZ
 
Регистрация: 13.06.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
А чем "Удаление нарсованной линии. Ассемблер" не подходит?

Самый простой (но не очень хороший) способ удаления линии - нарисовать поверх нее линию цвета фона.
Надо именно при нажатии правой кнопки мыши линия удалялась...И я не знаю как это сделать...
NevroZ вне форума Ответить с цитированием
Старый 14.06.2012, 13:39   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. Я Вам помог сформулировать название тем так, чтобы оно удовлетворяло принятым правилам. Считаю, что мышь - деталь не существенная для названия.

2. Я так понимаю, что с удалением линии у Вас проблем нет? Тогда правая кнопка мыши определяется по тому же байту состояния, что и левая, только по соседнему биту (ближайший старший разряд).
s-andriano вне форума Ответить с цитированием
Старый 14.06.2012, 14:24   #6
NevroZ
 
Регистрация: 13.06.2012
Сообщений: 5
Восклицание

Цитата:
Сообщение от s-andriano Посмотреть сообщение
1. Я Вам помог сформулировать название тем так, чтобы оно удовлетворяло принятым правилам. Считаю, что мышь - деталь не существенная для названия.

2. Я так понимаю, что с удалением линии у Вас проблем нет? Тогда правая кнопка мыши определяется по тому же байту состояния, что и левая, только по соседнему биту (ближайший старший разряд).
Проблема именно в том что я не могу понять как вписать в прогу удаление линии (нарисованной левой кнопкой) нажатием правой. Я вообще дуб дубом, поэтому обратился на форум.
NevroZ вне форума Ответить с цитированием
Старый 14.06.2012, 18:35   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Да как рисование, так и удаление. Только, я так понял, удалять она должна вне зависимости от того, где щелкнули мышью, следовательно, запоминать нужно не только последнюю позицию щелчка, но и предпоследнюю.

PS. Вообще, это садизм выкладывать на форуме неоткомментированную прогу на Ассемблере.
s-andriano вне форума Ответить с цитированием
Старый 14.06.2012, 19:51   #8
NevroZ
 
Регистрация: 13.06.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Да как рисование, так и удаление. Только, я так понял, удалять она должна вне зависимости от того, где щелкнули мышью, следовательно, запоминать нужно не только последнюю позицию щелчка, но и предпоследнюю.

PS. Вообще, это садизм выкладывать на форуме неоткомментированную прогу на Ассемблере.

Я первый раз на этом форуме, как выкладывать не знаю.
Можешь примерно рассказать как это написать? Ну или есть возможность и мозги то точно=)
NevroZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ImageList1 Стирание картинок с формы PROGRAMyGA Помощь студентам 1 12.04.2011 13:58
Рисование эллипса на канве и последующее его стирание Vohakisa Помощь студентам 3 21.05.2010 14:11
Можноли проверить, находиться ли мышь над нарисованной фигурой? TwiX Мультимедиа в Delphi 3 26.08.2009 10:35
Стирание диска Яр|/||< (^_^) Общие вопросы Delphi 0 22.08.2009 13:53
начало второй нарисованной линии должно передвинутся к началу первой. Delphi maddamo4ka Помощь студентам 7 08.12.2008 19:19