Подпрограммы для работы с графическим окном
Доступ к свойствам графического окна можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.
Процедуры и функции для доступа к свойствам окна сгруппированы парами: если Prop — имя свойства кисти, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство:
function WindowWidth: integer; Возвращает ширину клиентской части графического окна в пикселах |
function WindowHeight: integer; Возвращает высоту клиентской части графического окна в пикселах |
function WindowLeft: integer; Возвращает отступ графического окна от левого края экрана в пикселах |
function WindowTop: integer; Возвращает отступ графического окна от верхнего края экрана в пикселах |
function WindowIsFixedSize: boolean; Возвращает True, если графическо е окно имеет фиксированный размер, и False в противном случае |
procedure SetWindowWidth(w: integer); Устанавливает ширину клиентской части графического окна в пикселах |
procedure SetWindowHeight(h: integer); Устанавливает высоту клиентской части графического окна в пикселах |
procedure SetWindowLeft(l: integer); Устанавливает отступ графического окна от левого края экрана в пикселах |
procedure SetWindowTop(t: integer); Устанавливает отступ графического окна от верхнего края экрана в пикселах |
procedure SetWindowIsFixedSize(b: boolean); Устанавливает, имеет ли графическое окно фиксированный размер |
function WindowCaption: string; Возвращает заголовок графического окна |
function WindowTitle: string; Возвращает заголовок графического окна |
procedure SetWindowCaption(s: string); Устанавливает заголовок графического окна |
procedure SetWindowTitle(s: string); Устанавливает заголовок графического окна |
procedure SetWindowSize(w,h: integer); Устанавливает размеры клиентской части графического окна в пикселах |
procedure SetWindowPos(l,t: integer); Устанавливает отступ графического окна от левого верхнего края экрана в пикселах |
procedure ClearWindow; Очищает графическое окно белым цветом |
procedure ClearWindow(c: Color); Очищает графическое окно цветом c |
procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); Устанавливает ширину и высоту клиентской части графического окна в пикселах |
procedure SaveWindow(fname: string); Сохраняет содержимое графического окна в файл с именем fname |
procedure LoadWindow(fname: string); Восстанавливает содержимое графического окна из файла с именем fname |
procedure FillWindow(fname: string); Заполняет содержимое графического окна обоями из файла с именем fname |
procedure CloseWindow; Закрывает графическое окно и завершает приложение |
procedure CenterWindow; Центрирует графическое окно по центру экрана |
function WindowCenter: Point; Возвращает центр графического окна |
procedure MaximizeWindow; Максимизирует графическое окно |
procedure MinimizeWindow; Сворачивает графическое окно |
procedure NormalizeWindow; Возвращает графическое окно к нормальному размеру |
Кроме того, можно возвращать размеры экрана Screen, а также размеры и положение графического компонента GraphBox, на котором осуществляется рисование:
function GraphBoxWidth: integer; Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) |
function GraphBoxHeight: integer; Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) |
function GraphBoxLeft: integer; Возвращает отступ графического компонента от левого края окна в пикселах |
function GraphBoxTop: integer; Возвращает отступ графического компонента от верхнего края окна в пикселах |
function ScreenWidth: integer; Возвращает ширину экрана в пикселях |
function ScreenHeight: integer; Возвращает высоту экрана в пикселях |
Можно также изменять свойства графического окна через объект Window .
Программирование в X-Window
средствами Free Pascal
Многие атрибуты окна задаются при его создании с помощью процедуры XCreateWindow() или XCreateSimpleWindow() . Впоследствии параметры можно изменить, обратившись к процедуре XChangeWindowAttributes() .
Характеристики окна описываются структурами типа TXSetWindowAttributes и TXWindowAttributes . Получить их можно с помощью процедуры XGetWindowAttributes() .
Все они делятся на две группы. В первую входят параметры, доступные «на чтение» и «на запись». Вторая группа представляет собой внутренние данные. Программа может прочитать их, но не может менять.
Сначала перечислим поля этих структур, которые относятся к «изменяемым» параметрам.
Фон окна определяется атрибутами background_pixmap и background_pixel . Первый из них задает картинку (карту пикселей), которая используется для заливки фона окна. При необходимости картина повторяется слева направо и сверху вниз. Если параметр background_pixmap равен None (задается по умолчанию), то он игнорируется. Если же при этом поле background_pixel не задано (установлено по умолчанию), то окно считается «прозрачным», в противном случае его фон заливается цветом background_pixel . Атрибуты background_pixmap и background_pixel могут также принимать значение ParentRelative . В этом случае характеристики фона заимствуются у родительского окна.
Вид края окна определяется полями border_pixmap и border_pixel . Первый атрибут определяет карту пикселей, используемую для заполнения края. Если он равен None , то край заполняется цветом border_pixel . Если же и поле border_pixel не задано, то для изображения края используются соответствующие характеристики родителя. То же самое происходит, если параметр border_pixmap равен CopyFromParent (взять у родителя). Последнее значение есть значение по умолчанию.
На перерисовку окна после изменения его размеров влияют атрибуты bit_gravity и win_gravity . Когда окно меняет размер, например, увеличивается или уменьшается, то, в принципе, нет необходимости перерисовывать все его содержимое. Часть окна остается неизменной. Правда, эта часть может поменять свое положение: переместиться вправо, влево, вверх или вниз.
Иногда при показе окна полезно сохранить содержимое экрана под окном . Если окно невелико, и показывается не на долго, то это позволяет экономить время, которое надо будет затратить на перерисовку экрана после того, как окно будет закрыто. Если атрибут save_under равен True , то сервер будет пытаться сохранить изображение под окном. Если же он равен False (по умолчанию), то сервер ничего не предпринимает.
Когда обрабатывает (или не обрабатывает) событие, последнее может быть передано его родительскому окну . Атрибут do_not_propagate_mask (по умолчанию 0) говорит и о том, какие события не должны доходить до родителей.
Изменение размеров окна и его положения на экране контролируется атрибутом override_redirect . Если он равен False , то размер окна и его положение меняются с помощью менеджера окон. Если же он равен True , то окно само решает, где ему быть, и какую ширину и высоту иметь.
Цветовую гамму окна задает параметр colormap . Значение по умолчанию — CopyFromPatent , которое говорит, что окно использует палитру своего непосредственного родителя.
Теперь рассмотрим «неизменяемые» параметры окна. Строго говоря, атрибуты, о которых пойдет речь, нельзя назвать неизменяемыми. Некоторые из них могут меняться сервером или менеджером окон. Но для обычных программ-клиентов они действительно являются таковыми.
Положение окна и его размеры сообщают поля x , y , width и height . Они дают координаты левого верхнего угла, ширину и высоту окна соответственно. Координаты измеряются в пикселях по отношению к родительскому окну.
Ширина края окна определяется параметром border_width .
Маска, говорящая о том, какие события выбраны для передачи окну породившим его клиентом, содержится в поле флагов your_event_mask . Значение параметра образуется комбинацией флагов, идентифицирующих события.
Информация о дисплее , на котором показано окно, содержится в структуре Visual , на которую показывает поле visual . Эти данные, как правило, не обрабатываются обычными программами-клиентами (заметим, что для получения информации о дисплее, в системе предусмотрена процедура XGetVisualInfo() ).
Класс окна сообщает поле class . Возможные значения: InputOutput и InputOnly .
Число цветовых плоскостей дисплея (число бит-на-пиксел) помещается в поле depth .
На информацию об экране , на котором помещается окно, указывает поле screen . Она, как правило, не используется обычными программами.
Идентификатор главного (корневого) окна экрана , на котором помещается окно, находится в поле root .
Если окно имеет палитру , и она в настоящее время активна, то поле map_installed равно True , в противном случае — False .
Видно в настоящее время окно на экране или нет, сообщает атрибут map_state .
Маска всех событий, выбранных всеми программами для данного окна , содержится в атрибуте all_event_mask . Дело в том, что окно обрабатывается не только порождающим его клиентом, но, возможно, и другими приложениями, например, менеджером окон.
Мы рассказали о том, как получить атрибуты окна, и что они означают. Теперь рассмотрим, как их изменить. Для этого можно использовать несколько процедур X Window, основной из которых является XChangeWindowAttributes() , имеющая следующий прототип:
Function XChangeWindowAttributes(prDisplay : PDisplay; nWnd : TWindow; nValueMask : cardinal; prWinAttr : PXSetWindowAttributes) : longint; cdecl;external;
Требуемые установки атрибутов передаются через аргумент prWinAttr . Он указывает на переменную типа TXSetWindowAttributes . Ее поля те же, что и соответствующие поля TXWindowAttributes . Разница заключается лишь в разных именах некоторых из них. Так, поле your_event_mask в TXWindowAttributes соответствует полю event_mask в TXSetWindowAttributes .
Структура TXSetWindowAttributes содержит дополнительное поле cursor . Оно определяет вид курсора мыши , когда последний находится в окне. Если поле равно None (значение по умолчанию), то используется курсор родительского окна, в противном случае значением параметра должен быть идентификатор того или иного курсора.
Параметр nValueMask при вызове указанной процедуры представляет комбинацию флагов, говорящих о том, какие из полей переменной prWinAttr принимать во внимание.
В следующем примере приведен фрагмент кода, в котором изменяются параметры border_pixmap и win_gravity некоторого окна:
. var prDisplay : PDisplay; prWnd : TWindow; rWndAttr : TXSetWindowAttributes; nValMask : cardinal; const nPixmap : TPixmap =0; . nValMask := CWBorderPixmap or CWWinGravity; rWndAttr.border_pixmap := nPixmap; rWndAttr.win_gravity := StaticGravity; . XChangeWindowAttributes (prDisplay, prWnd, nValMask, @rWndAttr); .
Как в паскале сделать отдельное окно
Кратко рассмотрим основные действия с этой программой. После установки программы из папки Паскаля или с помощью ярлыка запускается файл с именем turbo . exe . Основные элементы окна Турбо Паскаля приведены на рис. 6.1.
Рис. 6.1. Окно программы Turbo Pascal
Как видно на рис. 6.1, устройство окна несколько отличается от стандартного окна Windows .
Для входа в верхнее меню следует нажать клавишу F 10 или сделать щелчок мышью на нужном пункте. Если ни одно окно не открыто или необходимо окно для новой программы, в меню File выберите пункт New . Для открытия ранее сохраненной программы в этом же меню выберите Open или просто нажмите F 3 из основного окна. Выбрать нужную программу можно в появившемся диалоговом окне, возможно, для этого потребуется сменить папку.
Если открыто сразу несколько окон, переключаться между ними можно, нажимая при нажатой левой Alt цифровую клавишу с номером нужного окна (от 1 до 9). Получить список всех окон можно комбинацией клавиш Alt +0, закрыть текущее окно — Alt + F 3
После ввода программы (а лучше несколько раз в процессе ввода) ее следует сохранить на диске. Для этого в меню File достаточно выбрать команду Save или нажать F 2 из окна программы. При первом сохранении программе нужно дать имя. Помните, что Паскаль разрабатывался для операционной системы MS — DOS и даваемые файлам имена должны включать в себя только латинские буквы и цифры, а по длине не превышать 8 символов. Тип файла . pas можно не указывать, он добавится к имени автоматически.
Для сохранения файла с программой на дискету или открытия его с дискеты проще всего в окне ввода указать a: и нажать Enter. Аналогично можно перейти к другим сменным носителям, введя их системное имя диска.
После сохранения программы, для ее компиляции и выполнения достаточно нажать комбинацию клавиш Ctrl + F 9. Если в процессе компиляции найдена синтаксическая ошибка, компилятор сообщит о ней и установит курсор на строку, содержащую ошибку. После исправления ошибки нажмите Ctrl + F 9 еще раз. По завершении программы, если в ней не предусмотрено никакого останова, произойдет автоматический возврат в окно с исходным текстом. Вернуться к окну вывода программы после ее выполнения можно, нажав Alt + F 5.
Вследствие алгоритмических ошибок или аппаратных проблем запущенная программа может «зависнуть», например, бесконечно выполняя неправильно запрограммированный цикл. В этом случае, при работе из оболочки Паскаля, можно попытаться прервать ее сочетанием клавиш Ctrl +Break.
Переключение на русский язык и обратно из оболочки Турбо Паскаля зависит от настроек ОС, уточните их у преподавателя или оператора.
Переключение в полноэкранный режим и обратно, как и для других приложений DOS , выполняется сочетанием клавиш Alt + Enter .
По умолчанию программа Turbo Pascal не создает исполняемых файлов *. exe . Чтобы она начала это делать, достаточно в верхнем меню Compile установить пункт-переключатель Destination в значение Disk (значение по умолчанию — Memory ).
Оболочка Паскаля включает удобные средства отладки программ, основные требуемые команды собраны в меню Debug . Для выполнения программы по строкам достаточно нажимать F 7 или F 8. Разница между назначениями этих клавиш в том, что нажатие F 7 пошагово выполняет программу с входом во все возможные подпрограммы, а F 8 — нет. Пока тема «Подпрограммы» не изучена, разницы в действии клавиш не будет заметно. Строка, которая будет выполняться следующей, выделена светло-зеленым цветом. Перейти сразу к нужному месту в программе можно, установив курсор на соответствующую строку и нажав клавишу F 4. Выйти из режима пошагового выполнения и прервать работу отладчика позволяет сочетание клавиш Ctrl + F 2.
В процессе пошагового выполнения можно посмотреть и даже изменить значения любых переменных. Для этого достаточно установить курсор на имя нужной переменной и нажать сочетание клавиш Ctrl + F 4. На экране должно появиться диалоговое окно » Evaluate and Modify «. В поле ввода Expression уже показано имя переменной, на которой стоял курсор. Если это не так, здесь можно задать имя любой доступной переменной или ввести произвольное выражение на Паскале. Нажатие Enter или кнопки Evaluate выводит результат в поле Result . В поле New Value можно, не прерывая пошагового выполнения, изменить значение переменной. Если предложенное изменение возможно, после нажатия кнопки Modify оно будет показано в поле Result , в противном случае там выведется сообщение » Cannot be modified «. Таким образом, окно » Evaluate and Modify » позволяет гибко тестировать поведение программы при различных входных данных.
Наконец, в Паскаль встроена мощная система помощи. Нажатие клавиши F 1 вызывает окно помощи по редактору, а Shift + F 1 — индекс оглавления справочной системы. В тексте помощи ссылки на другие разделы выделены желтым цветом, а переходить по ссылкам можно клавишами Tab и Shift + Tab или клавишами со стрелками. Нажатие Alt + F 1 возвращает к чтению предыдущей статьи. Пользуясь выделением с помощью мыши или клавишами со стрелками при нажатой Shift , информацию из окна помощи можно копировать во встроенный буфер обмена и затем вставлять в новый или существующий файл. Соответствующие команды доступны из меню Edit . Дополнительные возможности системы помощи доступны из меню Help .
Оболочка программы Free Pascal отличается размером окна консоли, но очень похожа по управлению, так что рассматривать её отдельно не будем.
Подробнее о работе с этой и другими оболочками компании Borland можно узнать в специальной литературе.
Ввод-вывод, оператор присваивания, арифметические операции
Язык программирования Паскаль. Знакомство со средой программирования Турбо Паскаль. Основные понятия. Первая программа
Паскаль — язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623-1662) и разработан в 1968-1971 гг. Никлаусом Виртом. Первоначально был разработан для обучения, но вскоре стал использоваться для разработки программных средств в профессиональном программировании.
Паскаль популярен среди программистов по следующим причинам:
- Прост для обучения.
- Отражает фундаментальные идеи алгоритмов в легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.
- Позволяет четко реализовать идеи структурного программирования и структурной организации данных.
- Использование простых и гибких структур управления: ветвлений, циклов.
- Надежность разрабатываемых программ.
Турбо Паскаль — это система программирования, созданная для повышения качества и скорости разработки программ (80-е гг.). Слово Турбо в названии системы программирования — это отражение торговой марки фирмы-разработчика Borland International (США).
Систему программирования Турбо Паскаль называют интегрированной (integration — объединение отдельных элементов в единое целое) средой программирования, т.к. она включает в себя редактор, компилятор, отладчик, имеет сервисные возможности.
Основные файлы Турбо Паскаля:
Turbo.exe — исполняемый файл интегрированной среды программирования;
Turbo.hlp — файл, содержащий данные для помощи;
Turbo.tp — файл конфигурации системы;
Turbo.tpl — библиотека стандартных модулей, в которых содержатся встроенные процедуры и функции (SYSTEM, CRT, DOS, PRINTER, GRAPH, TURBO3, GRAPH3).
Запуск интегрированной среды программирования
Для запуска интегрированной среды программирования нужно установить текущим каталог с Турбо Паскалем (TP7\BIN) и ввести команду: turbo.exe.
Задание. Запустите среду программирования и рассмотрите экран. Перед вами полоса меню, область окна и строка статуса. Нажмите клавишу F10 — теперь вам доступны все опции меню. Используя клавиши управления курсором, рассмотрите меню. С командами меню мы будем знакомиться постепенно. Нажмите клавишу Esc (вы вышли из меню). Перемещая курсор в окне, следите за строкой статуса. Какая информация отражается в этой строке?
Почти все, что вы видите и делаете в среде Турбо Паскаль, происходит в окнах.
Окно — это область экрана, которую можно перемещать, изменять в размере, перекрывать, закрывать и открывать.
Интегрированная среда программирования Турбо Паскаль позволяет иметь любое количество открытых окон, но в любой момент времени активным может быть только одно.
Активное окно – это окно, с которым вы в настоящий момент работаете.
Общие горячие клавиши:
F2 — сохраняет файл активного окна;
F3 — появление диалогового окна и возможность открыть файл;
F4 — запускает программу до строки, на которой стоит курсор;
F5 — масштабирует диалоговое окно;
F6 — переходит к следующему открытому окну;
F7 — запускает программу в режиме отладки с заходом внутрь процедур;
F8 — запускает программу в режиме отладки, минуя вызов процедур;
F9 — компилирование программы в текущем окне;
F10 — возвращение в меню.
Мы начнем изучение меню с наиболее важных и необходимых режимов.
Как войти в меню? Всего есть три возможности:
С помощью клавиш управления курсором подсветите слово FILE и нажмите клавишу «Enter». Что вы видите?
Появилась вертикальная таблица со списком команд, называемая выпадающим меню. Познакомимся с ним.
Open-F3 — открыть существующий файл (при активизации этой опции появляется окно со списком файлов, где можно выбрать необходимый),
New — создать новый файл (очищает память редактора и переводит в режим создания нового файла, которому присваивается имя Noname.pas; имя можно изменить при записи файла на диск),
Save-F2 — сохранить файл (переписывает файл из памяти редактора на диск),
Save as — сохранить с новым именем,
Save all — сохранить все в окнах (записывает содержимое всех окон редактора в соответствующие файлы),
Change dir — смена каталога (позволяет изменить установленный по умолчанию диск или каталог),
Print — печать файла,
Get info — выдача информации о текущем состоянии программы и используемой памяти,
DOS Shell — выход в DOS без выгрузки из памяти (для возврата ввести команду exit),
Exit — выход и выгрузка из памяти.
Программы на языке Паскаль имеют блочную структуру:
1. Блок типа PROGRAM — имеет имя, состоящее только из латинских букв и цифр. Его присутствие не обязательно, но рекомендуется записывать для быстрого распознавания нужной программы среди других листингов.
2. Программный блок, состоящий в общем случае из 7 разделов:
-
раздел описания модулей (uses);
Общая структура программы на языке Паскаль следующая:
Начнем знакомство с Паскалем с программы, которая складывает два числа и выводит сумму на экран.
Откройте файл, в который Вы запишите эту программу. Для этого нажмите клавишу F10, чтобы выйти в главное меню, затем клавишами перемещения курсора выберите опцию File, а в выпавшем меню команду New.
Примечание. Обратите внимание на оформление текста программы.
-
Найдите в этой программе заголовок, раздел описания переменных, признак начала программы, признак конца программы, тело программы, комментарий.
А теперь подведем итог вашим размышлениям.
Имя этой программы Summa2. Заметим, что требования к имени выполняются: оно отражает содержание программы, а также не содержит недопустимых символов.
Далее идет специально выделенный комментарий, в котором вы должны записать подробно условие задачи и указать, кто написал эту программу и когда.
Из разделов описаний имеется лишь один — раздел переменных. Он начинается со служебного слова Var. Мы описали три переменные: number1, number2, result. Все они переменные целого типа. Поэтому мы перечислили их через запятую, поставили двоеточие и указали тип переменных. Подобные объявления разделяются между собой точкой с запятой.
После описательной части идет раздел операторов, начинающийся со служебного слова Begin, после которого идут операторы языка.
Недостатком этой программы является то, что значения переменных постоянны. А нам нужно научиться писать такие программы, которые решают поставленные задачи в общем виде, т. е. для любых значений переменных. Для этого мы научимся запрашивать значения у пользователя, анализировать их и выдавать соответствующий результат.