Разработка удобной диалоговой программы, облегчающей доступ к файловым данным

Формирование строки статуса программы с помощью метода NewStatusDef. Формирование меню и программирование диалоговых запросов. Создание и использование групп с помощью процедуры GetClipRect. Диалоговое окно выбора режима. Обработка команд пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.12.2012
Размер файла 25,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

ГОУ ВПО НОРИЛЬСКИЙ ИНДУСТРИАЛЬНЫЙ ИНСТИТУТ

Факультет ЭиТО

Курсовая работа

по Информатике

Студенты гр. АП-06: Арламов Александр

Безрученко Дмитрий

Преподаватель: Новиков В.В.

Норильск

2007

Введение

программа меню запрос

Целью данной курсовой работы является разработка удобной диалоговой программы, облегчающей доступ к файловым данным.

Создание программы

Для начала решения задачи необходима ее четкая формулировка. От того, насколько хорошо сформулирована цель, которую необходимо достигнуть, зависит качество и быстрота исполнения решения.

После постановки задачи, необходимо проанализировать возможные решения, и разбить ее на более простые подзадачи. Каждая подзадача должна быть функционально осмысленна, и нести в себе определенную функциональную нагрузку.

Постановка задачи

В рамках данного курсового проекта, необходимо разработать удобную диалоговую программу, облегчающую доступ к файловым данным. В качестве предметной области мы используем записную книжку, содержащую в себе информацию о ФИО, номере телефона и адресе человека. Мы предусмотрели возможность добавления новых записей, удаления старых, а также редактирования уже существующих.

Все выше описанные операции производятся посредством простого в использовании и реализации пользовательского интерфейса.

Реализация

1.Формирование строки статуса

Turbo vision позволяет определять несколько вариантов строки статуса. Каждый вариант создается с помощью метода NewStatusDef. В нашей программе мы указали максимальный возможный диапазон контекста программы при обращении к методу NewStatusDef. С помощью метода NewStatusKey в строке статуса определяется очередная командная клавиша. При обращении к методу сначала указывается текст, высвечиваемый в строке статуса, причем символом ~ выделяется та часть сообщения, которая будет подсвечена в строке статуса другим цветом: таким способом в Turbo Vision указываются командные клавиши. Идентификатор kbAltX задает комбинацию клавиш, а cmQuit - связанную с ней команду. В Turbo Vision при обращении к методам NewStatusDef и NewStatusKey указывается переменная типа Pointer. Внутри методов эта переменная трактуется как ссылка на новый метод, что позволяет организовать цепочку последовательных определений.

2.Формирование меню.

В программу включен код, реализующий строку меню с опцией Файл, связав с этой опцией такие действия, как открытие уже существующего файла данный и/или создание нового. Кроме того, в главное меню мы поместили еще одну опцию, названную Работа. Эта опция открывает доступ к содержательной части программы. В нашей работе мы используем стандартный идентификатор hcContext при описании каждой опции.

3.Программирование диалоговых запросов

Процедура FileOpen. Ее задача - выбрать один из возможных файлов с данными и подготовить его к работе.

Тип PFileDialog - это указатель на объект TFileDialog, создающий и обслуживающий стандартное диалоговое окно выбора файлов. Первый оператор инициирует новый экземпляр объекта TFileDialog.

Парамеир fdOpenButton указывает на необходимость включить в диалоговое окно кнопку Open.

Второй оператор помещает вновь созданное окно в основное поле экрана программы и инициирует диалог с пользователем.

Перед выходом из процедуры FileOpen экземпляр объекта TFileDialog уничтожается обращением к деструктору Done.

С помощью оператора DisableCommands мы временно запрещаем набор команд, указанной в константе WinCom2. Эта константа в нашем случае должна содержать команду cmOpen; ее определение нужно включить сразу за определением константы WinCom1.

4.Создание и использование групп

С помощью вызова процедуры GetClipRect мы получаем размеры минимального прямоугольника, который следует обновлять при любых перемещениях окна или изменениях его размера. Процедура Bounds.Crow изменяет вертикальный и горизонтальный размеры прямоугольника Bounds: при положительном параметре соответствующий размер увеличивается, при отрицательном - уменьшается. Функция StandardScrollBar создает указатель на полосу прокрутки стандартного размера. При обращении к ней параметр sbVertical (sbHorizontal) определяет положение полосы, а параметр sbHandleKeyboard разрешает использование клавиатуры для управления ей. Процедура Insert включает вновь созданное окно TScrollBar в основное окно TWindow.

5.Указатель на элемент списка

Поле Location будет хранить номер той строки, которая отождествляется с выбранной строкой и которая на экране выделяется цветом. Вначале проверяется, попадает ли строка с номером, хранящимся в Location, в число выводимых строк. Если это не так, значит, пользователь изменил размеры окна или сдвинул его относительно текста; в этом случае нужны образом корректируется значение Location. Такая проверка гарантирует, что в окне всегда будет выводиться текущая строка.

TScroller.HandleEvent . С помощью этого метода обрабатываются все стандартные действия с окном.

6.Диалоговое окно выбора режима

Изменив метод TNotebook.HandleEvent, мы добавляем автоматический переход в режим просмотра данных в случае успешного файла с данными.

Команда cmClose - закрывает окно просмотра: в момент, когда пользователь в режиме просмотра данных нажмет клавишу “Esc” или воздействует мышью на кнопку Закрыть окно, на экране должно раскрыться диалоговое окно выбора режима, предлагающее одно из пяти возможных продолжений. Для этого, в уже созданный обработчик данных событий TInterior.HandleEvent вводим обработку событий cmClose.

Функция Control используется для создания диалогового окна выбора продолжения. В качестве значения этой функции будет возвращаться одна из пяти новых команд. Control должна создать диалоговое окно выбора режима, получить с его помощью команду, идентифицирующую выбранный режим, и вернуть эту команду в качестве своего значения.

7.Обработка команд пользователя

Обработчик событий диалогового окна поддерживает только стандартные команды cmClose, cmOk, cmCancel. Но мы используем другой метод. Для этого вводим новый объект TDlgWin как потомок объекта TDialog и перекрываем ему метод HandleEvent. В новом методе сначала вызываем стандартный обработчик, а затем анализируем событие, если оно не очищено и содержит команду, значит была нажата какая-то командная кнопка, и нам следует заставить обработчик закрыть окно и вернуть эту команду как результат диалога с пользователем.

Метод EndModal предназначен для того, чтобы завершить работу с диалоговым окном и вернуть команду в программу, использующую это окно.

8.Режим поиска записи

С помощью этого окна пользователь может задать несколько начальных букв, являющихся ключом для поиска записи. Получив данные из этого окна, процедура SearchItem организует поиск первой от начала коллекции строки, для которой не выполняется условие: Pattern >= Item.

В реализации процедуры SearchItem указанная проверка осуществляется для строк, предварительно преобразованных к прописным буквам с помощью внутренней процедуры UpString, то есть поиск игнорирует возможную разницу в высоте букв шаблона и строк коллекции.

Итоги

Итак, наша программа обеспечивает довольно высокий уровень диалога с пользователем: в ней есть командные клавиши, «всплывающие» меню, удобные диалоговые окна, поддержка мыши. Данная программа обладает простым интуитивно понятным интерфейсом, а ее функциональные возможности позволяют производить весь набор операций необходимый для ее нормальной работы.

Список литературы

1. Епанешников А. М. Епанешникова В. А. Программирование в среде Turbo Vision, М.: Диалог-Мифи, 2002г.

2. В. М. Бондарев, В. И. Рублинецкий, Е. Г. Качко. Основы программирования. - Харьков, Фолио; Ростов на Дону, Феникс, 1998, 368 с.

3. Никлаус Вирт «Алгоритмы и структуры данных» издательство "Невский Диалект" · 2001 г. · 352 стр.

Приложение. Программный код

Program Notebook;

{Программа работает с файлами данных Записной книжки}

Uses App, Objects, Menus, Drivers, Views, StdDlg, DOS, Memory, Dialogs;

type

{Объект TWorkWin создает окно рамки с полосами прокрутки для управления

встроенным в него объектом TInterior}

PWorkWin =^TWorkWin;

TWorkWin =object (TWindow)

Constructor Init(Bounds: TRect);

end;

{Объект TDlgWin создает диалоговое окно для выбора режима работы}

PDlgWin =^TDlgWin;

TDlgWin = object (TDialog)

Procedure HandleEvent (var Event: TEvent); Virtual;

end;

{Следующий объект обслуживает внутреннюю часть рамочного окна TWorkWin.

Он создает скроллируемое окно с записями из архивного файла и с помощью

диалогового окна TDlgWin управляет работой с этими записями}

PInterior =^TInterior;

TInterior = object (TScroller)

PS: PStringCollection;

Location: Word;

Constructor Init(var Bounds: TRect; HS,VS: PScrollBar);

Procedure Draw; Virtual;

Procedure ReadFile;

Destructor Done; Virtual;

Procedure HandleEvent(var Event: TEvent); Virtual;

end;

{Объект-программа TNotebook поддерживает работу с меню и строкой статуса}

TNotebook = object (TApplication)

Procedure InitStatusLine; Virtual;

Procedure InitMenuBar; Virtual;

Procedure HandleEvent(var Event: TEvent); Virtual;

Procedure FileSave;

Procedure ChangeDir;

Procedure DOSCall;

Procedure FileOpen;

Procedure Work;

end;

const

{Команды для обработчиков событий}

cmChDir = 202; {Сменить каталог}

cmWork = 203; {Обработать данные}

cmDOS = 204; {Временно выйти в Windows}

cmCan = 205; {Команда завершения работы}

cmDelete = 206; {Удалить текущую запись}

cmSearch = 207; {Искать нужную запись}

cmEdit = 208; {Редактировать запись}

cmAdd = 209; {Добавить запись}

{Множество временно недоступных команд}

WinCom1: TCommandSet = [cmSave, cmWork];

WinCom2: TCommandSet = [cmOpen];

LName = 25; {Длина поля Name}

LPhone= 11; {Длина поля Phone}

LAddr = 40; {Длина поля Addr}

LLine = LName+LPhone+LAddr; {Длина строки}

type

DataType = record {Тип данных в файле}

Name : String [LName]; {Имя}

Phone: String [LPhone];{Телефон}

Addr : String [LAddr]; {Адрес}

end;

var

DataFile: file of DataType; {Файловая переменная}

OpFileF : Boolean; {Флаг открытого файла}

{-------------Реализация объекта TWorkWin-------------}

Constructor TWorkWin.Init(Bounds: TRect);

{Создание окна данных}

var

HS,VS: PScrollBar; {Полосы-указатели}

Interior: PInterior; {Указатель на управляемое текстовое окно}

begin

TWindow.Init(Bounds,'',0); {Создание нового окна с рамкой}

GetClipRect(Bounds); {Получаем координаты минимальной

перерисовываемой части окна}

Bounds.Grow(-1,-1); {Устанавливаем размеры окна с текстом}

{Дальше включаем стандартные по размеру и положению полосы-указатели}

VS := StandardScrollBar(sbVertical+sbHandleKeyBoard);

HS := StandardScrollBar(sbHorizontal+sbHandleKeyBoard);

{Далее создаем текстовое окно}

Interior := New(PInterior,Init(Bounds, HS, VS));

Insert(Interior) {Включаем его в основное окно}

end;

{-------------}

Procedure TDlgWin.HandleEvent;

begin

Inherited HandleEvent(Event);

if Event.What=evCommand then

EndModal(Event.Command)

end;

{-------------}

Procedure TNotebook.FileOpen;

{Открывает файл данных}

var

PF: PFileDialog; {Диалоговое окно выбора файла}

Control: Word;

s: PathStr;

begin

{Далее создаем экземпляр динамического объекта}

New(PF, Init('*dat','Выберите нужный файл:','Имя файла',fdOpenButton,0));

{С помощью следующего оператора окно выводится на экран и результат

работы пользователя с ним помещается в переменную Control}

Control := DeskTop^.ExecView(PF);

{Далее анализируем результат запроса}

case Control of

StdDlg.cmFileOpen,cmOk:

begin {Пользователь указал имя файла}

PF^.GetFileName(s); {s содержит имя файла}

Assign(DataFile,s);

Reset(DataFile);

if IOResult <> 0 then

Rewrite(DataFile);

OpFileF := IOResult=0;

if OpFileF then

begin

DisableCommands(WinCom2);

EnableCommands(WinCom1);

Work {Переходим к работе}

end;

end;

end; {case Control}

Dispose(PF, Done) {Уничтожаем экземпляр}

end; {FileOpen}

{-------------}

Procedure TNotebook.FileSave;

{Закрывает файл данных}

begin

Close(DataFile);

OpFileF := False;

EnableCommands(WinCom2); {Разрешаем открыть файл}

DisableCommands(WinCom1) {Запрещаем работу и сохраняем}

end; {TNotebook.FileSave}

{-------------}

Procedure TNotebook.ChangeDir;

{Изменяет текущий каталог}

var

PD: PChDirDialog; {Диалоговое окно смены каталога}

Control: Word;

begin

New(PD, Init(cdNormal,0)); {Создаем диалоговое окно}

Control := DeskTop^.ExecView(PD); {Используем окно}

ChDir(PD^.DirInput^.Data^); {Устанавливаем новый каталог}

Dispose(PD, Done) {Удаляем окно}

end; {TNotebook.ChangeDir

{-------------}

Procedure TNotebook.DOSCall;

{Временный выход в Винду}

const

txt = 'Для возврата введите EXIT в ответ'+' на приглашение Windows..';

begin

DoneEvents; {Закрыть обработчик событий}

DoneVideo; {Закрыть монитор экрана}

DoneMemory; {Закрыть монитор памяти}

SetMemTop(HeapPtr); {Освободить кучу}

WriteLn(txt); {Сообщить о выходе}

SwapVectors; {Установить стандартные векторы}

{Передать управление командному процессору Винды (далее)}

Exec(GetEnv('COMPEC'),'');

{Вернуться из Винды (далее)}

SwapVectors; {Восстановить векторы}

SetMemTop(HeapEnd); {Восстановить кучу}

InitMemory; {Открыть монитор памяти}

InitVideo; {Открыть монитор экрана}

InitEvents; {Открыть обработчик событий}

InitSysError; {Открыть обработчик ошибок}

Redraw {Восстановить вид экрана}

end; {DOSCall}

{-------------}

Constructor TInterior.Init;

{Создает окно скроллера}

begin

TScroller.Init(Bounds, HS, VS);

ReadFile;

GrowMode := gfGrowHiX+gfGrowHiY;

SetLimit(LLine, PS^.Count)

end;

{-------------}

Destructor TInterior.Done;

begin

Dispose(PS,Done);

Inherited Done

end;

{-------------}

Procedure TInterior.ReadFile;

{Читает содержимое файла данных в массив LINES}

var

k: Integer;

s: String;

Data: DataType;

f: text;

begin

PS := New(PStringCollection, Init(100,10));

seek(DataFile,0);

while not (EOF(DataFile) or LowMemory) do

begin

Read(DataFile, data);

with data do

begin

s := Name;

while Length(s) < LName do

s := s+' ';

s := s+Phone;

while Length(s) < LName+LPhone do

s := s+' ';

s := s+Addr

end;

if s<>'' then PS^.Insert(NewStr(s))

end;

Location := 0;

end; {ReadFile}

{-------------}

Procedure TInterior.Draw;

{Выводит данные в окно просмотра}

var

n, {Текущая строка экрана} k {Текущая строка массива} : Integer;

B: TDrawBuffer;

Color: Byte;

p: PString;

begin

if Delta.Y>Location then

Location := Delta.Y;

if Location>Delta.Y+pred(Size.Y) then

Location := Delta.Y+pred(Size.Y);

for n := 0 to pred(Size.Y) do

{Size.Y - количество строк окна}

begin

k := Delta.Y+n;

if k=Location then

Color := GetColor(2)

else

Color := GetColor(1);

MoveChar(B,' ',Color,Size.X);

if k < pred(PS^.Count) then

begin

p := PS^.At(k);

MoveStr(B, Copy(p^,Delta.X+1,Size.X),Color);

end;

WriteLine(0,N,Size.X,1,B);

end;

end; {TInterior.Draw}

{-------------}

Function Control: Word;

{Получает команду из основного диалогового окна}

const

X = 1;

L = 12;

DX = 13;

But: array [0..4] of String [13] = {Надписи на кнопках}

('`1` Выход ','`2`Убрать ','`3` Искать ','`4` Изменить ','`5` Добавить ');

Txt: array [0..3] of String [52] = ({Справочный текст}

'Убрать - удалить запись, выделенную цветом',

'Искать - искать запись, начинающуюся нужными буквами',

'Изменить - изменить поле (поля) выделенной записи',

'Добавить - добавить новую запись=)');

var

R: TRect;

D: PDlgWin;

k: Integer;

begin

R.Assign(7,6,74,15);

D := New(PDlgWin,Init(R, 'Выберите продолжение:'));

with D^ do

begin

for k := 0 to 3 do {Вставляем поясняющий текст}

begin

R.Assign(1,1+k,65,2+k);

Insert(New(PStaticText,Init(R,#3+Txt[k])));

end;

for k := 0 to 4 do {Вставляем кнопки}

begin

R.Assign(X+k*DX,6,X+k*DX+L,8);

Insert(New(PButton,Init(R,But[k],cmCan+k,bfNormal)))

end;

SelectNext(False); {Активизируем первую кнопку}

end;

Control := DeskTop^.ExecView(D); {Выполняем диалог}

end; {Control}

{-------------}

Procedure TInterior.HandleEvent;

Procedure DeleteItem;

{Удаляет указанный в Location элемент данных}

var

D: Integer;

PStr: PString;

s: String;

Data: DataType;

begin

PStr := PS^.At(Location); {Получаем текущую запись}

s := copy(PStr^,1,LName);

seek(DataFile,0);

D := -1; {D - номер записи в файле}

repeat {Цикл поиска по совпадению поля Name}

inc(D);

read(DataFile,Data);

with Data do while Length(Name) < LName do

Name := Name+' '

until Data.Name=s;

seek(DataFile,pred(FileSize(DataFile)));

read(DataFile,Data); {Читаем последнюю запись}

seek(DataFile,D);

write(DataFile,Data); {Помещаем ее на место удаляемой}

seek(DataFile,pred(FileSize(DataFile)));

truncate(DataFile); {Удаляем последнюю запись}

with PS^ do D := IndexOf(At(Location));

PS^.AtFree(D); {Удаляем строку из коллекции}

Draw {Обновляем окно}

end; {DeleteItem}

{-------------}

Procedure AddItem(Edit: Boolean);

{Добавляет новый или редактирует старый элемент данных}

const

y = 1;

dy= 2;

L = LName+LPhone+LAddr;

var

Data: DataType;

R: TRect;

InWin: PDialog;

BName, BPhone, BAddr: PInputLine;

Control: Word;

OldCount: Word;

s: String;

p: PString;

begin

Seek(DataFile,FileSize(DataFile)); {Добавляем записи в конец файла}

repeat {Цикл ввода записей}

if Edit then {Готовим заголовок}

s := 'Редактирование:'

else

begin

Str(FileSize(DataFile)+1,s);

while Length(s) < 3 do

s := '0'+s;

s := 'Вводится запись N '+s;

end;

FillChar(Data,SizeOf(Data),' '); {Заполняем поля пробелами}

R.Assign(15,5,65,16);

InWin := New(PDialog, Init(R, s)); {Создаем окно}

with InWin^ do

begin {Формируем окно}

R.Assign(2,y+1,2+LName,y+2);

BName := New(PInputLine, Init(R,LName));

Insert(BName); {Поле имени}

R.Assign(2,y,2+Lname,y+1);

Insert(New(PLabel,Init(R, 'Имя',BName)));

R.Assign(2,y+dy+1,2+LPhone,y+dy+2);

BPhone := New(PInputLine, Init(R,LPhone));

Insert(BPhone); {Поле телефона}

R.Assign(2,y+dy,2+LPhone,y+dy+1);

Insert(New(PLabel, Init(R, 'Телефон',BPhone)));

R.Assign(2,y+2*dy+1,2+LAddr,y+2*dy+2);

BAddr := New(PInputLine, Init(R,LAddr));

Insert(BAddr); {Поле адреса}

R.Assign(2,y+2*dy,2+LAddr,y+2*dy+1);

Insert(New(PLabel, Init(R, 'Адрес',BAddr)));

{Вставляем две командные кнопки(далее)}

R.Assign(2,y+3*dy+1,12,y+3*dy+3);

Insert(New(PButton, Init(R, 'Ввести',cmOk,bfDefault)));

R.Assign(2+20,y+3*dy+1,12+20,y+3*dy+3);

Insert(New(PButton, Init(R, 'Выход',cmCancel,bfNormal)));

SelectNext(False) {Активизируем первую кнопку}

end; {Конец формирования окна}

if Edit then with Data do

begin {Готовим начальный текст}

p := PS^.At(Location); {Читаем данные из записи}

s := p^;

Name := copy(s,1,LName);

Phone:= copy(s,succ(LName),LPhone);

Addr := copy(s,succ(LName+LPhone),LAddr);

InWin^.SetData(Data) {Вставляем текст в поля ввода}

end;

Control := DeskTop^.ExecView(InWin); {Выполняем диалог}

if Control=cmOk then with Data do

begin

if Edit then

DeleteItem; {Удаляем старую запись}

Name := BName^.Data^;

Phone:= BPhone^.Data^;

Addr := BAddr^.Data^;

s[0] := chr(L);

FillChar(s[1],L,' ');

move(Name[1],s[1],Length(Name));

move(Phone[1],s[succ(LName)],Length(Phone));

move(Addr[1],s[succ(LName+LPhone)],Length(Addr));

OldCount := PS^.Count; {Прежнее количество записей}

PS^.Insert(NewStr(s)); {Добавляем в коллекцию}

{Проверяем добавление}

if OldCount <> PS^.Count then

write(DataFile,Data) {Да - добавляем в файл}

end;

until Edit or (Control=cmCancel);

Draw

end; {AddItem}

{-------------}

Procedure SearchItem;

{Ищет нужный элемент}

Function UpString(s: String): String;

{Преобразует строку в верхний регистр}

var

k: Integer;

begin

for k := 1 to Length(s) do

if s[k] in ['a'..'z'] then

s[k] := chr(ord('A')+ord(s[k])-ord('a'))

else if s[k] in ['а'..'п'] then

s[k] := chr(ord('А')+ord(s[k])-ord('а'))

else if s[k] in ['р'..'я'] then

s[k] := chr(ord('Р')+ord(s[k])-ord('р'));

UpString := s

end; {UpString}

var

InWin: PDialog;

R: TRect;

s: String;

p: PInputLine;

k: Word;

begin {SearchItem}

R.Assign(15,8,65,16);

InWin := New(PDialog, Init(R,'Поиск записи:'));

with InWin^ do

begin

R.Assign(2,2,47,3);

p := New(PInputLine, Init(R,50));

Insert(p);

R.Assign(1,1,40,2);

Insert(New(PLabel, Init(R, 'Введите образец для поиска:',p)));

R.Assign(10,5,20,7);

Insert(New(PButton, Init(R,'Ввести',cmOk,bfDefault)));

R.Assign(25,5,35,7);

Insert(New(PButton, Init(R,'Выход',cmCancel,bfNormal)));

SelectNext(False);

end;

if DeskTop^.ExecView(InWin) = cmCancel then

exit;

s := p^.Data^;

Location := 0;

while (UpString(s) >= UpString(PString(PS^.At(Location))^))

and (Location < pred(PS^.Count)) do

inc(Location);

if (Location < Delta.Y) or (Location >Delta.Y+pred(Size.Y)) then

ScrollTo(Delta.X,Location)

else

Draw

end; {SearchItem}

{-------------}

var

R: TPoint;

label Cls;

begin

TScroller.HandleEvent(Event);

case Event.What of

evCommand:

case Event.Command of

cmClose:

begin

Cls:

case Control of {Получить команду из основного диалогового окна}

cmCan, cmCancel: EndModal(cmCancel);

cmEdit: AddItem(True);

cmDelete: DeleteItem;

cmSearch: SearchItem;

cmAdd: AddItem(False);

end;

end;

cmZoom: exit;

end;

evMouseDown: {Реакция на щелчок мышью}

begin

MakeLocal(MouseWhere, R); {Получаем в R координаты указателя мыши}

Location := Delta.Y+R.Y;

Draw

end;

evKeyDown: {Реакция на клавиши + -}

case Event.KeyCode of

kbEsc: goto Cls;

kbGrayMinus: if Location > Delta.Y then

begin

dec(Location);

Draw

end;

kbGrayPlus: if Location < Delta.Y+pred(Size.Y) then

begin

inc(Location);

Draw

end;

end;

end;

end; {TInterior.HandleEvent}

{-------------}

Procedure TNotebook.Work;

{Работа с данными}

var

R: TRect;

PW: PWorkWin;

Control: Word;

begin

R.Assign(0,0,80,23);

PW := New(PWorkWin, Init(R));

Control := DeskTop^.ExecView(PW);

Dispose(PW,Done)

end;

{-------------}

Procedure TNotebook.HandleEvent(var Event: TEvent);

{Обработчик событий программы}

begin {TNotebook.HandleEvent}

TApplication.HandleEvent(Event); {Обработка стандартных команд cmQuit и cmMenu}

if Event.What = evCommand then

case Event.Command of

{Обработка новых команд}

cmOpen: FileOpen; {Открыть файл}

cmSave: FileSave; {Закрыть/Сохранить файл}

cmChangeDir: ChangeDir; {Сменить диск}

cmDOSShell: DOSCall; {Временный выход в Винду}

cmWork: Work; {Обработать данные}

else

exit {Не обрабатывать другие команды}

end;

ClearEvent(Event) {Очистить событие после обработки}

end; {TNotebook.HandleEvent}

{-------------}

Procedure TNotebook.InitMenuBar;

{Создание меню}

var

R: TRect;

begin

GetExtent(R);

R.B.Y := succ(R.A.Y); {R - координаты строки в меню}

MenuBar := New(PMenuBar, Init(R,

NewMenu( {Создаем меню}

{Первый элемент нового меню представляет собой подменю}

NewSubMenu('~F~/Файл', hcNoContext,

{Описываем элемент главного меню}

NewMenu( {Создаем подменю}

NewItem( {Первый элемент}

'~1~/ Открыть','F3',kbF3,cmOpen,hcNoContext,

NewItem( {Второй элемент}

'~2~/ Закрыть','F2',kbF2,cmSave,hcNoContext,

NewItem( {Третий элемент}

'~3~/ Сменить диск','',0,cmChangeDir,hcNoContext,

NewLine( {Строка-разделитель}

NewItem('~4~/ Заглянуть в Винду','',0,cmDOSShell,hcNoContext,

NewItem('~5~/ Конец работы','Alt-X',kbAltX,cmQuit,hcNoContext,

NIL)))))) {Нет других элементов подменю}

),

{Создаем второй элемент главного меню}

NewItem('~W~/ Работа','',kbF4,cmWork,hcNoContext,

NIL) {Нет других элементов главного меню}

))))

end; {TNotebook.InitMenuBar}

{-------------}

Procedure TNotebook.InitStatusLine;

{Формирует строку статуса}

var

R: TRect; {Границы строки статуса}

begin

GetExtent(R); {Получаем в R координаты всего экрана}

R.A.Y := pred(R.B.Y);

StatusLine := New(PStatusLine,

Init(R, {Создаем строку статуса}

NewStatusDef(0, $FFFF, {Устанавливаем максимальный диапазон

текстной справочной службы}

NewStatusKey('~Alt-X~ Выход', kbAltX, cmQuit,

NewStatusKey('~F2~ Закрыть', kbF2, cmSaveFile,

NewStatusKey('~F3~ Открыть', kbF3, cmOpenFile,

NewStatusKey('~F4~ Работа', kbF4, cmWork,

NewStatusKey('~F10~ Меню', kbF10, cmMenu,

NIL))))), {Нет других клавиш}

NIL) {Нет других определений}

));

DisableCommands(WinCom1) {Запрещаем недоступные команды}

end; {TNotebook.InitStatusLine}

{-------------}

var

Nbook: TNotebook;

begin

Nbook.Init;

Nbook.Run;

Nbook.Done;

end.

Размещено на Allbest.ru


Подобные документы

  • Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.

    курсовая работа [1,5 M], добавлен 17.03.2014

  • Создание легкой и удобной в применении программы "Клавиатурный тренажер" с помощью программы Delphi7. Использование компонентов Panel, Timer, Button, Status Bar, Label. Описание процедур и функций программы. Руководство разработчика и пользователя.

    курсовая работа [276,3 K], добавлен 27.05.2015

  • Понятие и использование командной строки. Открытие командной строки. Команды, выполняемые с помощью командной строки. Как выполнить команду с повышенными привилегиями. Изменение внешнего вида окна командной строки с помощью параметров командной строки.

    презентация [948,2 K], добавлен 22.10.2014

  • Описание разрабатываемой программы с точки зрения пользователя. Диаграмма вариантов использования приложения. Объектное представление программы. Разработка класса корабля, прикладного окна и события but. Окно приложения с перемещающимися кораблями.

    курсовая работа [207,0 K], добавлен 05.04.2014

  • Рабочая среда MS Access. Окна, меню и панели инструментов. Основные режимы работы с таблицами. Создание таблиц. Создание первичных ключей и связей. Создание простого запроса с помощью мастера запросов. Изменение запроса с помощью конструктора запросов.

    практическая работа [1,5 M], добавлен 03.06.2008

  • Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.

    курсовая работа [597,4 K], добавлен 31.01.2016

  • Разработка программы нахождения значения определенного интеграла с помощью метода трапеций. Оценка абсолютной погрешности метода. Использование среды программирования Visual Studio Community 2015 для написания программы. Работа с графическим интерфейсом.

    курсовая работа [573,8 K], добавлен 17.03.2016

  • Разработка гипотетической машины при помощи макросредств ассемблера. Разработка алгоритма для реализации обязательных команд: сравнения двух символьных строк; их обмена; определения длины слова. Основные функции обработки строки, листинг программы.

    курсовая работа [59,6 K], добавлен 14.07.2012

  • Работа с элементом управления в VB.net. Работа с файлами, организация последовательного доступа с помощью объектов Streareader и Streamwriter. Последовательный доступ с помощью класса File, программирование задач с использованием циклов с параметром.

    лабораторная работа [644,8 K], добавлен 27.12.2013

  • Компиляция и использование модулей. Разработка интерфейса программы. Факторы, воздействующие на комфорт пользователя. Структура диалога типа меню и разработка экранных форм. Обоснование выбора типа подпрограмм для решения задачи. Текст программы.

    курсовая работа [30,1 K], добавлен 22.02.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.