Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 19.05.2010, 14:39   #1
itwaswritten
 
Регистрация: 27.04.2010
Сообщений: 3
Репутация: 10
По умолчанию клавиатура и си

есть функция, рисующая рамку, как заставить эту рамку двигаться при помощи клавиш влево, вправо, вверх, вниз?
Код:


#define TEST 1  /* управление генерируемой версией */
#include <STDIO.H>

#include "ubit.h"
#include "uvideo.h"
#include "ukbrd.h"

/* ------------------------- PUBLIC ROUTINES ---------------------------- */

int TFrameDraw( int x,    int y,    /* координаты рамки, левый верхний угол */
		int xend, int yend, /* координаты рамки, правый нижний угол */
		int fsym,           /* начальный символ рамки               */
		int tsym,           /* символ-заполнитель                   */
		int sa,             /* атрибут "чистого" экрана             */
		int fa,             /* атрибут символа рамки                */
		int ta              /* атрибут символа-заполнителя          */
              )
/*****
Вход:       См.аргументы.
Действие:   Очищает экран и рисует прямоугольную рамку символом fsym с
	    заполнением ее внутренностей символом tsym с указанными атрибутами.
	    После этого ожидает нажатия любой клавиши: при нажатиии kbESC
	    очищает весь экран и выходит, при любой другой - код этой клавиши
	    становится символом fsym и рисуется новая рамка.
Выход:      НОРМА:  0.
	    ОШИБКА: -1 - невозможно нарисовать рамку заданной конфигурации;
		    -2 - координаты рамки выходят за границы экрана;
		    -3 - один из атрибутов на входе - "слепой".
*****/
{
        if( (xend - x < 2) || (yend - y < 2) )
                return -1;
        if( (x < 0) || (y < 0) || (xend > VmXMAX) || (yend > VmYMAX) )
                return -2;

        if( IsBlind(sa) || IsBlind(fa) || IsBlind(ta) )
                return -3;
					fsym = KbWaitKey();
        VmClear( 0, 0, VmXMAX, VmYMAX, sa );
        do
        {
                VmFillPaint( x, y, xend, yend, fsym, fa );
                VmFillPaint( x + 1, y + 1, xend - 1, yend - 1, tsym, ta );
                fsym = KbWaitKey();
        } while( fsym != kbESC );

        return 0;


}

itwaswritten вне форума   Ответить с цитированием
Старый 19.05.2010, 14:47   #2
itwaswritten
 
Регистрация: 27.04.2010
Сообщений: 3
Репутация: 10
По умолчанию

ukbrd.h
Код:

#ifndef UKBRD_H
#define UKBRD_H

/*------------------------------- CONST -----------------------------------*/

 enum kbCodes {
	kbUP   = 0x4800, kbDN    = 0x5000, kbRT    = 0x4D00, kbLT   = 0x4B00,
	kbF1   = 0x3B00, kbF2    = 0x3C00, kbF3    = 0x3D00, kbF4   = 0x3E00,
	kbF5   = 0x3F00, kbF6    = 0x4000, kbF7    = 0x4100, kbF8   = 0x4200,
	kbF9   = 0x4300, kbF10   = 0x4400,
	kbESC  = 0x011B, kbENTER = 0x1C0D, KbSPACE = 0x3920, kbTAB  = 0x0F09,
	kbHome = 0x4700, kbEND   = 0x4F00, kbPgUp  = 0x4900, kbPgDn = 0x5100,
	kbINS  = 0x5200, kbBS    = 0x0E08
			  };



/*-------------------------------- PROTOTYPES -----------------------------*/

extern
void KbFlush( void )
/*****
Вход:	  Нет.
Действие: Опоржняет буфер клавиатуры первого уровня.
Выход: 	  Нет.
*****/
;
extern
int KbHit( void )
/*****
Вход: 	  Нет.
Действие: Проверяет, было ли нажатие клавиши.
Выход:	  Возвращает 0, если не было нажатия клавиши, иначе код клавиши.
*****/
;
extern
int KbWaitKey( void )
/*****
Вход:	  Нет.
Действие: Ожидает нажатия любой клавиши и затем опоржняет буфер клавиатуры.
Выход:	  Код нажатой клавиши.
*****/
;
extern
int KbHitEsc( void )
/*****
Вход:	  Нет.
Действие: Проверяет, было ли нажатие клавиши <Esc>.
Выход:	  Возвращает 0/kbESC - не было нажатия клавиши <Esc> / была
	  нажата клавиша <Esc>.
*****/
;
extern
void KbWaitEsc( void )
/*****
Вход:	  Нет
Действие: Ожидает нажатия клавиши <Esc>.
Выход:	  Нет.
*****/
;
extern
int KbWaitEscEnter( void )
/*****
Вход:	  Нет.
Действие: Ожидает нажаия клавиши <Esc> или <Enter>.
Выход:	  Код <Esc> или <Enter> при нажатии соответствующей клавиши.
*****/
;
#endif

/*----------------------------- end of UKBRD.H ----------------------------*/

itwaswritten вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
клавиатура из din в ps/2 Xatr Железо 0 28.03.2010 02:16
Клавиатура в Ubuntu Antoha79 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 9 16.08.2009 13:09
Клавиатура Fenix_Elite Общие вопросы Delphi 5 23.11.2008 09:02
Клавиатура RealSHELS Общие вопросы Delphi 6 29.03.2008 16:52
Клавиатура Pusher Assembler 0 22.03.2008 01:47


10:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru