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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2009, 13:09   #1
Slash3
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 14
По умолчанию По нажатию обеих кнопок мыши выход из программы

Помогите исправить текст программы...

Код:
uses crt;

type TMouseInfo=record
            		activeFlag:integer;
					x,y,dx,dy:integer;
    				mouseButtonsState:integer;
				    dataSegment:integer;
				end;
var
    mouseInfo:TMouseInfo;


function int2str(int:integer):string;
var sint:string;
begin
	str(int, sint);
    int2str:=sint;
end;

procedure asmInitMouse;assembler;
asm
    mov AX,0000H
    int 33H
end;

procedure asmShowCursor;assembler;
asm
	mov AX,0001H
    int 33H
end;

procedure asmHideCursor;assembler;
asm
	mov AX,0002H
    int 33H
end;


procedure asmGetMouseClickInfo(var x,y,clickCount:integer);assembler;
asm
	mov AX,0005H
    mov BX,0000H
    int 33H

    mov AX,BX
    les	DI,clickCount
    stosw

    mov AX,CX
	les	DI,x
    stosw

    mov AX,DX
	les	DI,y
    stosw
end;

procedure asmGetMouseReleaseInfo(var x,y,clickCount:integer);assembler;
asm
	mov AX,0006H
    mov BX,0000H
    int 33H

    mov AX,BX
    les	DI,clickCount
    stosw

    mov AX,CX
	les	DI,x
    stosw

    mov AX,DX
	les	DI,y
    stosw
end;

procedure asmGetTypeMouse(var driverVersionLow,driverVersionHigh,mouseType,usedIRQ:integer);assembler;
asm

	mov AX,0024H
    int 33H

    xor AH,AH

    mov AL,BL
	les	DI,driverVersionLow
    stosw

    mov AL,BH
	les	DI,driverVersionHigh
    stosw

    mov AL,CH
	les	DI,mouseType
    stosw

    mov AL,CL
	les	DI,usedIRQ
    stosw
end;

{procedure asmMouseEventDriver;assembler;
asm
   	mov mouseInfo.activeFlag,1
    mov mouseInfo.mouseButtonsState,BX
    mov mouseInfo.x,CX
    mov mouseInfo.y,DX
    mov mouseInfo.dataSegment,DS
end;


procedure asmSetMouseEventDriver(mask:integer;driver:pointer);assembler;
asm
    mov	AX,0CH
    mov CX,mask
    mov DX,offset driver
    int 33H
end;}

procedure asmSetCursor(code:byte);assembler;
asm
	mov AX,000aH
    mov BX,0000H
    mov CX,7000H
    mov DL,code
    mov DH,07H
    int 33H
end;


procedure getMouseClickInfo(var x,y,clickCount:integer);
begin
    asmGetMouseClickInfo(x,y,clickCount);
end;

procedure getMouseReleaseInfo(var x,y,clickCount:integer);
begin
    asmGetMouseReleaseInfo(x,y,clickCount);
end;

procedure _drawWindow(x1,y1,x2,y2,bgcolor,txtcolor:integer);
begin
	window(x1,y1,x2,y2);
    textBackGround(bgcolor);
    textColor(txtcolor);
    clrscr;
end;

procedure _drawAllWindows;
begin
    textBackGround(black);
    clrscr;
end;

procedure putChar(ch:char;x,y:integer);
begin
 	gotoxy(x,y);
    write(ch);
end;

const Esc=#27;
var ch:char;
	x,y,clickCount:integer;
    driverVersionLow,driverVersionHigh,mouseType,usedIRQ:integer;

begin
    _drawAllWindows;
    asmInitMouse;
    asmShowCursor;
    ch:='A';
    asmSetCursor(ord(ch));
    {asmSetMouseEventDriver(2,@asmMouseEventDriver);}
    asmGetTypeMouse(driverVersionLow,driverVersionHigh,mouseType,usedIRQ);

    write(driverVersionLow);
    write(' - ');
    write(driverVersionHigh);
    write(' - ');
    write(mouseType);
    write(' - ');
    writeln(usedIRQ);
    repeat
        repeat
			getMouseClickInfo(x,y,clickCount);
            if clickCount>0 then
            	begin
                	asmHideCursor;
					putChar(ch, (x div 8)+1, (y div 8)+1);
                	ch:=chr(ord(ch)+1);
                    asmSetCursor(ord(ch));
                    asmShowCursor;
                    repeat
                    	getMouseReleaseInfo(x,y,clickCount);
                    until clickCount>0;
                end;
			{if (mouseInfo.activeFlag=1) and (odd(mouseInfo.mouseButtonsState)) then
            	begin
                	mouseInfo.activeFlag:=0;
                	putChar(codeChar);
                	inc(codeChar);
                    asmSetCursor(codeChar);
                end;}

        until keyPressed;
		ch:=readkey;
    until ch=Esc;
    {asmSetMouseEventDriver(0,@asmMouseEventDriver);}
    asmHideCursor;
end.

Последний раз редактировалось Slash3; 01.04.2009 в 13:22.
Slash3 вне форума Ответить с цитированием
Старый 01.04.2009, 15:41   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Ivan_32, извини, но ты неправ...
В сеансе MS-DOS никто не запрещает вызывать прерывания. Иначе бы ни одно DOS-приложение не работало. Запрет идет на регистры защищенного режима, прямое обращение к портам ввода-вывода и подобные вещи. Прерывание 33h разрешено.
Slash3, Вы используете функции 5 и 6..... Лучше в таких случаях ставить обработчик через 0Ch хотя бы. Либо использовать грубую 3-ую функцию и проверять равенство BX с 3.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 01.04.2009, 16:05   #3
Slash3
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 14
По умолчанию

Ребята я в этом не чего не понимаю(((( не могли бы вы подробнее как то расписать((
Slash3 вне форума Ответить с цитированием
Старый 01.04.2009, 19:39   #4
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

вот функция:
возвращает true если нажаты обе кнопки, иначе - false

Код:
function ClickedBoth():boolean;
var butt:integer;
begin
 asm
  mov ax,3
  int 33h
  mov butt,bx
 end;
 if butt=3 then ClickedBoth:=true
 else ClickedBoth:=false;
end;
и сделай вместо "until ch=Esc;" - "until ClickedBoth()"
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 02.04.2009, 22:49   #5
Slash3
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 14
По умолчанию

Проблемка... ошибка Error 113: Error in statement.
Slash3 вне форума Ответить с цитированием
Старый 03.04.2009, 13:23   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Проблемка...
какая ж это проблема? Это же просто ошибка ни на какой строке...
Или ты думаеш что сдесь телепаты?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2009, 17:37   #7
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Кажется понял где косяк. butt сделай не integer а word
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 03.04.2009, 18:43   #8
Slash3
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 14
По умолчанию

Пишет Identifier expected. Курсор мигает рядом со скобочками ClickedBoth()
Slash3 вне форума Ответить с цитированием
Старый 03.04.2009, 19:07   #9
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

а саму функцию ты впихнул?
до основного тела программы...... перед const например
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 03.04.2009, 21:44   #10
Slash3
Пользователь
 
Регистрация: 09.03.2009
Сообщений: 14
По умолчанию

Да конечно... все равно не работает не хватает чего то в скобках(((
Slash3 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вызвать по нажатию кнопки меню настройки клавиатуры, мыши, монитора 1234 Общие вопросы Delphi 2 10.09.2008 16:52
Ошибка и падение (выход) Excel при выполнении сложной программы на VBA Serge_Bliznykov Microsoft Office Excel 6 13.08.2008 16:50
Выход из программы relav_ Общие вопросы Delphi 18 15.03.2008 01:36
Нажатие кнопок мыши zzzzz Win Api 7 02.12.2007 12:33
Выход из программы Slash Общие вопросы Delphi 8 24.03.2007 07:53