Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Обработка текстовой и графической информации

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Пример 8. Организация режима диалога
character(1)nomj1,chisl(12),chis(12) character(12)chislo equivalence(chislo,chisl(1)) integer*2dummy integer*2kodsimwol character(1)kod1
cКодыкнопокклавиатуры(0,1,2,3,4,5,6,7,8,9,-,.,+,d,e), cкоторыемогутбытьиспользованыдлявводачисловыхданных dimensionkodi(15) datakodi/48,49,50,51,52,53,54,55,56,57,45,46,43,100,101 */ common/klik/klik,klik1,klik2,klik3 character(5)resnt integer*2ixswerhu(1000),iyswerhu(1000) *,ixslewa(1000),iyslewa(1000) *,ixsperedi(1000),iysperedi(1000) *,nomer(1000) integer*2zad1,zad2 *,NOS1,NOS2 *,kil1,kil3 *,niz1,niz3 *,krilolew2,krilopraw2 *,krilolew3,krilopraw3 cМассивыдляхраненияреальныхкоординатточек common/razmeri/xt(1000),yt(1000),zt(1000) *,dlinaLA,wisotaLA,razmahLA
91
cОпределениеразмеровиспользуемыхрисунков. cПереборфайловсрисунками do2222kn=1,3 write(2,*) if(kn.eq.1)open(1,le=foto1,form='binary',iostat=iche) if(kn.eq.2)open(1,le=foto2,form='binary',iostat=iche) if(kn.eq.3)open(1,le=foto3,form='binary',iostat=iche)
92 Глава 2. Обработка графической информации
ci4=0—приуспешномвыполнении if(iche.eq.0)write(2,*)'Найденфайлрисунка' if(iche.ne.0)write(2,*)'Ненайденфайлрисунка' if(kn.eq.1)write(2,*)'Рисунокfoto1' if(kn.eq.2)write(2,*)'Рисунокfoto2' if(kn.eq.3)write(2,*)'Рисунокfoto3' if(iche.ne.0)goto2222 cОпределяемразмерырисунков read(1)ch read(1)ix read(1)iy write(2,*) write(2,*)'Ширинарисункаix=',ix write(2,*)'Высотарисункаiy=',iy write(2,*) if(ix.gt.ix2)write(2,*)'Рисунокширеразмераэкрана!' if(iy.gt.iy2)write(2,*)'Рисуноквышеразмераэкрана!' cЗапомнилиразмерырисунковвмассивах irisx(kn)=ix irisy(kn)=iy close(1) cЗакрылифайлсрисунком 2222continue cКонецпереборафайловсрисунками
cОчисткалевойчастиэкрана(заливкабелымцветом) c15—задаембелыйцвет dummy=setcolor(15) cРисуемпрямоугольник dummy=rectangle($gllinterior,0,iy2,(ix2-200),0)
cНазначилиположениянаэкраневерхнихлевыхугловрисунков c(вданномслучаерассматриваем3рисунка) iux(1)=0 iuy(1)=0
Пример 8. Организация режима диалога
iux(2)=0 iuy(2)=300 iux(3)=650 iuy(3)=0
cЗадержка1000ms callsleepqq(1000) cОпределяемномернажатойнарисованнойнаэкранекнопки c(knopkaris) callsubmous(okno,melm,xx1,xx2,yy1,yy2,ix2,iy2) cЗадержка1000ms callsleepqq(1000) cВзависимостиотномера(knopkaris)нарисованнойнаэкране cкнопки,накоторуюмынавеликурсорmouseинажалилевую cкнопкуmouse,выполняемзадаваемоенамидействие. cВданномслучаевыводимнаэкраннужныйнамрисунок if(knopkaris.eq.1)i4=loadimage(foto1,iux(1),iuy(1)) if(knopkaris.eq.2)i4=loadimage(foto2,iux(2),iuy(2)) if(knopkaris.eq.3)i4=loadimage(foto3,iux(3),iuy(3)) cЕслинажатанарисованнаянаэкранекнопкасномером4, cтовызываетсяподпрограммасименемObrabotka if(knopkaris.eq.4)callObrabotka 1001continue write(7,3701)knopkaris,iiix,iiiy 3701format(3i5,'knopkaris,iiix,iiiy')
93
cДругиекнопкивданномпримеренезадействованы, cприихнажатииидемнавыход if(knopkaris.gt.4)goto2002
cОрганизуемвводданных. c9—задаемяркосинийцвет dummy=setcolor(9) cЗадаемположениетекстанаэкране lcx=700
94 Глава 2. Обработка графической информации
lcy=50 callmoveto(lcx,lcy,pt) cВыводимнаэкрансообщениевзависимостиотномеранажатой cкнопки if(knopkaris.eq.1)calloutgtext('Видслева') if(knopkaris.eq.1)write(2,*)'Видслева' if(knopkaris.eq.2)calloutgtext('Видсверху') if(knopkaris.eq.2)write(2,*)'Видсверху' if(knopkaris.eq.3)calloutgtext('Видспереди') if(knopkaris.eq.3)write(2,*)'Видспереди' cДляконтролясообщениезапомнилиивфайле2
cЗадержка1000ms callsleepqq(1000) if(klik.ne.0)goto22000 klik=klik+1 irx=700 iry=700 lrx=400 lry=100 text='ДлинаЛА' cВводданныхсклавиатуры callWwodDannih(irx,iry,lrx,lry,text,DlinaLA) iry=800 text='ВысотаЛА' cВводданныхсклавиатуры callWwodDannih(irx,iry,lrx,lry,text,WisotaLA) iry=900 text='РазмахкрылаЛА' cВводданныхсклавиатуры callWwodDannih(irx,iry,lrx,lry,text,RazmahLA)
cОчисткачастиэкрана(рисуембелыйпрямоугольник). c15—задаембелыйцвет dummy=setcolor(15)
Пример 8. Организация режима диалога
cРисуемпрямоугольник dummy=rectangle($gllinterior,400,1000,1200,700)
ntochek=0 itoch=0 22000continue write(7,3001) write(okno,3001) 3001format *('Видслева.Положительноенаправлениеосей:X-влево, *Y-вверх') if(klik1.ne.0)goto102 klik1=klik1+1 cЗагрузканаэкранрисункасименемfoto1.Координатыугла cрисункаiux(1),iuy(1) i4=loadimage(foto1,iux(1),iuy(1)) cЗадержка1000ms callsleepqq(1000) c9-Задаемяркосинийцвет dummy=setcolor(9) cЗадаемположениевыводимоготекста irx=100 iry=800 callmoveto(irx,iry,pt) cВыводимтекстнаэкран calloutgtext *('Положительноенаправлениеосей:X-влево,Y-вверх') ikod=1 cЗадаемположениевыводимоготекста irx=100 iry=820 callmoveto(irx,iry,pt) cВыводимтекстнаэкран calloutgtext('Отметьтекнопкойmouseправуюдальнюю *точку(хвостЛА)')
95
96 Глава 2. Обработка графической информации
read(okno,*)!Ждетнажатиякнопки"ENTER" zad1x=iiix zad1y=iiiy write(7,3101)iiix,iiiy 3101format(2i5,'iiix,iiiy—Координатыхвоста(O)') cОчистиличастьэкрана(рисуембелыйпрямоугольник) dummy=setcolor(15) dummy=rectangle($gllinterior,100,900,1000,800) cНосЛА c9-Задаемяркосинийцвет dummy=setcolor(9) cЗадаемположениевыводимоготекста irx=100 iry=840 callmoveto(irx,iry,pt) cВыводимтекстнаэкран calloutgtext *('Отметьтекнопкойmouseлевуюдальнююточку(носЛА)') read(okno,*)!Ждетнажатиякнопки"ENTER" cПоложениеносаЛА nos1x=iiix nos1y=iiiy write(7,3102)iiix,iiiy 3102format(2i5,'iiix,iiiy—КоординатыносаЛА') cОчистиличастьэкрана(рисуембелыйпрямоугольник) dummy=setcolor(15) dummy=rectangle($gllinterior,100,900,1000,800)
Конец фрагмента подпрограммы subroutine subbb1 (jjj)
Пример 9. Ввод цифровых данных
с клавиатуры
subroutineWwodDannih(irx,iry,lrx,lry,text,dlina) usedib
Пример 9. Ввод цифровых данных склавиатуры
integer*2status2,lcx,lcy,rcx,rcy integer*2lcx2,lcy2,rcx2,rcy2 integer*2irx,iry,lrx,lry type(xycoord)pt record/wxycoord/s character(20)text integer*2ix2,iy2 common/melmmm/melmmm,iiix,iiiy,ix2,iy2 *,xxxmin,xxxmax,yyymin,yyymax,nomertochki cПеременныедлявводаданных real*8dlina dimensionkchis(12) character(1)nomj1,chisl(12),chis(12) character(12)chislo equivalence(chislo,chisl(1)) integer*2dummy integer*2kodsimwol character(1)kod1 logical*4pressed
97
cКодыкнопокклавиатуры,которыемогутбытьиспользованы cпривводецифровыхданных(0,1,2,3,4,5,6,7,8,9,-,.,+,d,e) dimensionkodi(15) datakodi/48,49,50,51,52,53,54,55,56,57,45,46,43,100,101/ 1002continue
cЛевыйверхнийуголпрямоугольникаirx,iry,ширина=lrx, cвысота=lry lcx=irx rcx=lcx+lrx lcy=iry rcy=lcy+lry c2—задаемзеленыйцвет dummy=setcolor(2)
98 Глава 2. Обработка графической информации
cРисуемпрямоугольник dummy=rectangle($gllinterior,lcx,rcy,rcx,lcy) lcx2=lcx+10 rcx2=rcx-10 lcy2=lcy+10 rcy2=rcy-10 c15—задаембелыйцвет dummy=setcolor(15) cВнутризеленогопрямоугольникарисуембелыйпрямоугольник dummy=rectangle($gllinterior,lcx2,rcy2,rcx2,lcy2) c12—задаемкрасныйцвет dummy=setcolor(12) cВыводимнадписи callmoveto((lcx+50),(lcy+20),pt) calloutgtext(text) callmoveto((lcx+50),(lcy+40),pt) calloutgtext('Введите') cЗаполняемсимвольнуюпеременнуюпробелами do1k=1,12 chisl(k)='' c13—нажатакнопка"Enter" kchis(k)=13 1continue
cВводданныхсклавиатуры c(впримеревводимоечислоограничено12символами) do2k=1,12 cОпределяемфактнажатиякнопкиклавиатуры. cНашликодкнопки kod1=getcharqq() chis(k)=kod1 cОпределилиномеркнопкивсписке i=ichar(kod1) kchis(k)=i cНажатакнопка"Enter" if(i.eq.13)goto22
Пример 9. Ввод цифровых данных склавиатуры
cДляконтролязапомнилирезультатвфайле2 write(2,*)kod1,i 3050format(a4) 3051format(a1) cЗаписываем(kod1)всимвольнуюпеременную(nomj1) write(nomj1,3051)kod1 cРисуемсимволнажатойкнопкинаэкране calloutgtext(nomj1) cЗаносимсимволочереднойнажатойкнопкивпеременнуюchislo chisl(k)=nomj1 2continue 22continue
cВыполняемпроверкуправильностиввода.Считываемчисловое cзначение(dlina)изсимвольнойпеременной(chislo) read(chislo,*,iostat=iche)dlina if(iche.eq.0)goto700
99
cОбнаруженаошибкаввода callmoveto((lcx+50),(lcy+60),pt) calloutgtext('Ошибкаввода') calloutgtext(chislo) write(2,*)'Ошибкаввода' cЗадержкаповремени1000ms callsleepqq(1000) goto1002
cОшибоквводанет 700continue callmoveto((lcx+50),(lcy+60),pt) calloutgtext('Введено') calloutgtext(chislo) write(2,*)'ЛАдлина=',dlina 1000continue
100 Глава 2. Обработка графической информации
return end
cОпределяемфактнажатиякнопки"Enter"клавиатуры
subroutineEnter() usedib character(1)kod1 cНашликодкнопки kod1=getcharqq() cУзналиномеркнопкивсписке i=ichar(kod1) c13-нажатакнопка"Enter" if(i.eq.13)goto1 cЗадержкавремени1000ms,есликнопка"Enter"ненажата callsleepqq(1000) 1continue return end
Замечание. В примере показан лишь один из возможных вариантов решения задачи. Могут быть предложены идругие варианты, например на экране может быть нарисована клавиатура. Ввод данных может осу­ществляться нажатием кнопок мыши, которые по координатам курсора определяют факт нажатия нужной нарисованной на экране кнопки кла­виатуры (аналогично примеру 8). Можно рассмотреть более простые ва­рианты, выделив зону ввода вдочернем окне (okno) ииспользуя опера­торы read(okno,*). Можно оставить видимой часть главного окна ивво­дить данные склавиатуры оператором read (*,*) ит.п.
Окно диалога может иметь вид, приведенный на рис. 2. Как видно из рисунка, варианты оформления окон, количества, положений, размеров иизображений кнопок управления, видов ишрифтов выводимых тек­стовых сообщений, видов рисунков могут быть самыми разными. Так как рисунки заставок (кнопок) загружаются из отдельных файлов фор-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]