Программирование оконных интерфейсов, страница 2

RELEASE WINDOWS kadr

<paбoтa только с экраном, окно удалено>

Клавишные функции

Клавишные функции позволяют создавать задержки в программе и выявлять нажатия клавиш. С помощью этих функций можно организовывать диалог пользователя в программе.

1) INKEY([[<вырN>][,<вырС>]]) - выдает ASCII - код (от 0 до 255) последней клавиши, нажатой на клавиатуре. Если нажатия не было, вырабатывается код 0. Необязательный параметр <вырN> указывает число секунд, в течение которых ожидается нажатие клавиши для продолжения программы. Если <вырN>=0, ожидание будет неограниченным. Если <вырN> опущено, функция сработает немедленно.

Параметр <вырС> управляет включением/выключением курсора и выявлением нажатия кнопки мыши. Для включения курсора в <вырС> указывается символ S, для отключения - Н. Для контроля нажатия кнопки мыши используется символ М, и при этом функция будет возвращать число 151. Допускается сочетание символов М и S/Н. Функция удобна для организации передачи управления внутри программы. Она может быть помещена непосредственно в циклы.

(см. ReadKey – Pascal)

 Функцию можно использовать и для задания пауз установленной длины, например,

паузы в 20 секунд:        = inkey(20)

2)LASTKEY() - выдает ASCII - код последней клавиши, нажатой на клавиатуре. Возвращаемые коды совпадают с кодами INKEY().В отличие от INKEY(), функция   LASTKEY() не меняет содержимого буфера клавиатуры.

3)KEYBOARD(<вырС>) - заносит символы <вырС> в буфер клавиатуры.

Пример.

KEYBOARD('ABC')

?INKEY(), LASTKEY(), INKEY(), LASTKEY(), INKEY(), LASTKEY()

65                66                  66              67                     67               0

Здесь числа 65,66,67 являются кодами букв A,B,C. Таблица    LASTKEY() и  INKEY() - кодов клавиш.

Клавиши

+Shift

+Ctrl

Alt

Клавиши

+Shift

+Ctrl

Alt

F1

F2

F3

F4

F5

F6

F7

F8

F9

F10

F11

F12

1

2

3

4

5

6

7

8

9

0

a

b

c

d

e

f

g

h

i

j

28

-1

-2

-3

-4

-5

-6

-7

-8

-9

133

134

49

50

51

52

53

54

55

56

57

48

97

98

99

100

101

102

103

104

105

106

84

85

86

87

88

89

90

91

92

93

135

136

33

64

35

36

37

94

38

42

40

41

65

66

67

68

69

70

71

72

73

74

94

95

96

97

98

99

100

101

102

103

137

138

-

33

-

-

-

30

-

-

-

-

1

2

3

4

5

6

7

8

9

10

10

10

10

10

10

10

11

11

11

11

13

14

12

12

12

12

12

12

12

12

12

1

3

4

4

3

1

3

3

3

2

3

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

INS

HOME

DEL

END

PGUP

PGDN

UP

RIGHT

LEFT

DOWN

ESC

ENTER

BACKSP

TAB

SPACE

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

22

1

7

6

18

3

5

4

19

24

27

13

127

9

32

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

22

1

7

6

18

3

5

4

19

24

27

13

127

9

32

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

146

29

149

23

31

30

141

2

26

145

27

10

127

148

32

3

3

3

4

2

2

1

1

3

2

3

4

1

4

2

4

16

15

16

15

16

15

15

15

16

16

2

1

16

3

П р и м е р. Разработать программу, выводящую в верхний левый угол экрана окно размером 5*25. Программа должна предоставить возможность пользователю  с помощью мыши: закрыть окно, изменить размер окна, переместить окно,

увеличить окно на весь экран и вернуть к прежнему размеру.Кроме того,

программа должна реагировать на клавиши:

- Esc - выход из программы;

- Right - увеличить размер окна по горизонтали;

- Down -  увеличить размер окна по вертикали.

k=10

kk=30

do while .t.

define window ddd from 5,5 to k,kk title "sss" system ;

grow zoom close float fill '+' minimize color scheme 10 footer "hhh"

activate window ddd

* Очистка буфера клавиатуры

keyboard CHR(0)

* Режим диалога

c=inkey(0)

do case

case c=27

deactivate window ddd

release window

exit

case c=4  && right

if kk<60

kk=kk+2

deactivate window ddd

release window

endif

case c=24  && down

if k<50

k=k+5

deactivate window ddd

release window

endif

endcase

enddo

Замечание 1. В случае использования встроенных окон внутренним окном м.б.Browse-окно.

DEFINE WINDOW kadr FROM 3,4 TO 20,50 TITLE 'kadr';

CLOSE FLOAT GROW SHADOW ZOOM

USE kad

ACTIVATE WINDOW kadr

Browse

DEACTIVATE WINDOW kadr

RELEASE WINDOWS kadr

1)  заливка окон из файла:

Опция    [FILL file <Имяфайла>]

Пример 1

DEFINE WINDOW kadr FROM 3,4 TO 20,50 TITLE 'kadr';

fill file "07.bmp"

ACTIVATE WINDOW kadr

wait

DEACTIVATE WINDOW kadr

RELEASE WINDOWS kadr

Пример 2

define window dd   at 0,0 size 50,200 IN DESKTOP ;

nozoom double  FONT "MS Sans Serif", 8 fill file &file4

activate window dd

.........