Создание SDI –приложения




Пусть наше приложение содержит следующие формы:

- Главная форма с меню.

- Форма для определения режимов работы программы.

- Форма «О программе» (About).

- Форма для ввода исходных данных и вывода результата.

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

Пусть меню имеет следующую структуру:

File Windows Help

Quit New About

Open Dialog

Две радиокнопки имеют имена rB1 и rB2; две кнопки выбора имена cB1 и cB2; строка редактирования textBox1. Реализация единственной командной кнопки: Hide(); (убрать с экрана, но не уничтожить, в таком случае ее можно позже только открыть, нет необходимости ее заново создавать).

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

1. Во избежание случайного закрытия этой формы уберем с нее кнопку ´. Для этого дадим ее свойству ControlBox значение False. В нашем приложении мы предусмотрим только открытие этой формы во время работы приложения. Ее создание выполняется автоматически при запуске. Поэтому при случайном ее закрытии (с уничтожением) пользователь лишен возможности ее заново создать.

2. Необходимо обеспечить доступ к радиокнопкам, кнопкам выбора и строке редактирования извне. По умолчанию они имеют атрибут доступа private и являются переменными своего класса (в нашем случае Form2). Для этого их свойствам Modifiers дадим значение public.

3. Желаемое местоположение формы обеспечивается изменением значений двух ее свойств: для StartPosition выберем значение Manual и для Location задаем подходящие значения координат X и Y верхнего левого угла. Таким образом можем подбирать местоположение любой формы, в том числе и главной.

4. Для обеспечения создания и открытия формы при запуске приложения в класс главной формы внести следующие дополнения:

- Объявление Form2 f2; в раздел переменных.

- В конструктор Form1 добавить

public Form1()

{

InitializeComponent();

f2 = new Form2();

F2.Show();

}

Реализация пункта меню Open Dialog: f2.Show();

Для создания формы «О программе» используем заготовку: ставим курсор мыши на имя нашего приложения, нажмем правую клавишу, из выпадающего меню выберем Add – New Item, затем из списка About Box и нажмем на кнопку Add. На экране появится заготовка формы «О программе». На ней имеются компоненты типа Label, поэтому внесение изменений в заготовку не вызывает трудностей. Реализация единственной кнопки этой формы Close(); реализация пункта меню About:

private void aboutToolStripMenuItem_Click(object sender, EventArgs e)

{

AboutBox1 ab1;

ab1 = new AboutBox1();

Ab1.ShowDialog();

}

Возникает вопрос: какая разница между двумя способами открытия форм ShowDialog()и Show()? При открытии формы через ShowDialog()заблокируется доступ к другим формам, пока эта форма не закрыта. При открытии через Show()на экране компьютера появится еще одна форма, но между открытыми формами можно переключаться.

Для ввода одномерного массива используем строку. При работе с этой формой необходимо ссылаться на переменные диалоговой формы (Form2). Но они являются переменными другого класса, поэтому ссылка на них возможно только через указатель на экземпляр соответствующего класса. Для обеспечения такой ссылки включим в число переменных Form2:

public Form2 f22;

Реализация пункта меню New:

private void newToolStripMenuItem_Click(object sender, EventArgs e)

{

Form3 f3;

f3 = new Form3();

f3.f22 = f2; //для обеспечения ссылки на диалоговое окно

f3.Show();

}

Реализация командной кнопки «Вычислить» (в зависимости от состояния кнопок выбора вычисляют или нет сумму/произведение; в зависимости от состояний радиогруппы обрабатывают числа больше/меньше заданного в диалоговом окне значения):

private void button2_Click(object sender, EventArgs e)

{

string[] St1Arr;

string r1;

double []x;

double z,sum = 0,pr = 1;

r1 = textBox1.Text;

St1Arr = r1.Split(';');

x = new double[St1Arr.Length];

z=Convert.ToDouble(f22.textBox1.Text);

for (int i = 0; i < x.Length; i++)

x[i] = Convert.ToDouble(St1Arr[i]);

if (f22.cB1.Checked)

//найдем сумму, используем ссылку на диалоговую форму

{

for (int i = 0; i < x.Length; i++)

{

if (f22.rB1.Checked && x[i] >= z) sum += x[i];

if (f22.rB2.Checked && x[i] < z) sum += x[i];

}

}

if (f22.cB2.Checked) //найдем произведение

{

for (int i = 0; i < x.Length; i++)

{

if (f22.rB1.Checked && x[i] >= z) pr*= x[i];

if (f22.rB2.Checked && x[i] < z) pr*= x[i];

}

}

label3.Text = "" + sum;

label5.Text = "" + pr;

}

 

Формы. Меню. Диалоги.

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

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

Обмен информацией осуществляется передачей сообщений и управляющих сигналов.

Диалог должен подчиняться определённым правилам:

· участники диалога должны понимать язык друг друга;

· порядок высказываний в диалоге строго определён: "вопрос - ответ";

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

Типы диалога

Тип диалога определяет, кто из "собеседников" управляет процессом обмена информацией.

Различают два типа диалога:

1. управляемые программой;

2. управляемые пользователем.

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

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

Схема диалоговой системы может быть представлена следующим образом:

интерфейс компьютер диалог программа

Рисунок 1 - Схема диалоговой системы.

Рисунок 2 - Графы абстрактного диалога: а - диалог, управляемый системой; б - диалог, управляемый пользователем

Можно выделить 4 типа диалога:

1. Структура диалога типа "вопрос-ответ" (Q&A) основана на аналогии с обычным интервью. Система берет на себя роль интервьюера и получает информацию от пользователя в виде ответов на вопросы. Это наиболее известная структура диалога; все диалоги, управляемые компьютером, в той или иной степени состоят из вопросов, на которые пользователь отвечает. Однако в структуре Q&A этот процесс выражен явно. В каждой точке диалога система выводит в качестве подсказки один вопрос, на который пользователь дает один ответ. В зависимости от полученного ответа система может решить, какой следующий вопрос задавать. Структура Q&A предоставляет естественный механизм ввода, как управляющих сообщений (команд), так и данных. Никаких ограничений на диапазон тип входных данных, которые могут обрабатываться, не накладывается. Существуют системы, ответы в которых даются на естественном языке, но чаще используются предложения из одного слова с ограниченной грамматикой.

Диалог в виде вопросов и ответов в достаточной степени обеспечивает поддержку пользователя, так как даже краткий наводящий вопрос при разумном построении может быть самопоясняющим. Структура Q&А не гарантирует минимального объема ввода, оцениваемого по количеству нажатий клавиш, однако при подходящем подборе сокращений можно уменьшить любую избыточность. Вместе с тем, структура Q&А обладает одним существенным недостатком. Даже если ввод происходит достаточно быстро, для человека, который уже знает, какие вопросы задает система и какие ответы нужно на них давать, отвечать на всю серию вопросов довольно утомительно.

С появлением графического интерфейса структура Q&А несколько устарела, тем не менее, у нее имеются определенные достоинства. Эта структура может удовлетворить требования различных пользователей и типов данных. В частности, такая структура особенно уместна при реализации диалога с множеством "ответвлений", т.е. в тех случаях, когда на каждый вопрос предусматривается большое число ответов, каждый из которых влияет на то, какой вопрос будет задан следующим. По этой причине структура Q&A часто используется в экспертных системах.

2. Диалог на основе меню.

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

Существует несколько основных форматов представления меню на экране:

· список объектов, выбираемых прямым указанием, либо указанием номера (или мнемонического кода);

· меню в виде блока данных;

· меню в виде строки данных;

· меню в виде пиктограмм.

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

Меню в виде строки данных может появляться вверху или внизу экрана и часто остается в этой позиции на протяжении всего диалога. Таким образом, посредством меню удобно отображать возможные варианты данных для ввода, доступных в любое время работы с системой. Если в системе имеется достаточно большое разнообразие вариантов действий, организуется иерархическая структура из соответствующих меню. Дополнительные меню в виде блоков данных "всплывают" на экране в позиции, определяемой текущим положением указателя, либо "выпадают" непосредственно из строки меню верхнего уровня. Эти меню исчезают после выбора варианта.

Меню в виде пиктограмм представляет собой множество объектов выбора, разбросанных по всему экрану; часто объекты выбора содержат графическое представление вариантов работы.

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

Меню - это крайне удобная структура диалога для неподготовленных пользователей. Жесткая очередность открытия и иерархическая вложенность меню могут вызвать раздражение у профессионала, замедлив его работу. Традиционная структура меню не достаточно гибка и не в полной мере согласовывается с методами адаптации диалога (например, опережающий ввод).

3. Диалог на основе командного языка. Структура диалога на основе командного языка столь же распространена, что и структура типа меню. Она очень часто используется в операционных системах. Исторически это первая из реализованных структур диалога.

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

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

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

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

4. Диалог на основе экранных форм. Как структура типа "вопрос-ответ", так и структура типа меню предполагают обработку на каждом шаге диалога единственного ответа. Диалог на основе экранных форм допускает обработку на одном шаге диалога нескольких ответов.

На практике формы используются там, где учет какой-либо деятельности требует ввода стандартного набора данных. Человек работает с формой до тех пор, пока не заполнит ее полностью и не передаст системе. Система может проверять каждый ответ непосредственно при вводе или по окончании заполнения всей формы.

Сообщения об ошибках, выводимые непосредственно после ответа, могут отвлечь внимание, но могут оказать и положительное влияние. В тех случаях, когда информация для ввода выбирается из некоторого целостного документа, проверку лучше отложить до конца заполнения формы, чтобы не прерывать процесс ввода; если же такой целостности нет, то проверку следует выполнять сразу после ввода ответа (после заполнения очередного поля).

Если встретилась какая-либо ошибка, приложение не должно заново выводить пустую форму; выводится форма с предыдущими ответами и допущенными ошибками. Новый "бланк" выдается лишь в случае соответствующего запроса пользователя.

Такую структуру уместно применять там, где источником данных служит существующая входная ("бумажная") форма документа.

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

Проектирование форм интерфейса. Главное окно программы в соответствии с условием задачи должно вызывать основные функции для работы с «Записной книжкой» (рис. 11.20, а). Для выполнения этих операций будем использовать кнопки. Каждая функция будет выполняться в своем окне, чтобы сосредоточить пользователя на конкретной операции.

При выполнении пункта «Создать/открыть книжку» на экране должно появиться окно ввода имени файла (рис. 11.20, б). После ввода имени файла программа будет пытаться открыть файл. Если файл с указанным именем не будет обнаружен, то она создаст файл с таким именем.

 

 

 


Рис. 11.20. Формы интерфейса приложения «Записная книжка»: а — главное окно приложения; б — окно ввода имени файла, хранящего записи; в — окно добавления записей; г — окно поиска записей

При выборе пункта «Записать телефон» на экране должна появляться форма ввода записей (рис. 11.20, в), которая содержит поля ввода и локальное кнопочное меню. Добавление записей происходит при выборе пункта «Добавить». Диаграмма состояний перехода представлена на рис. 11.21.

Записываемая в «книжку» информация может быть не полной, например, может быть известно только имя или только фамилия абонента, тогда пользователь должен пропустить окно ввода формы, нажав клавишу Tab: соответствующее поле записи файла будет пустым. Сигналом для записи данных в файл будем считать нажатие клавиши Enter в поле ввода телефона (см. рис. 11.21). После добавления записей пользователь должен будет выбрать пункт «Выход» и вновь вернуться в главное окно.

При выборе пункта «Найти телефон» на экране должна появляться форма поиска (рис. 11.20, г), которая содержит окна ввода фамилии и имени, окно вывода телефона и локальное кнопочное меню из трех пунктов. Поиск должен осуществляться по вводу фамилии и/или имени. Начало поиска по выбору пункта «Найти». Если запись не найдена, то программа должна выдавать сообщение об отсутствии данных.

Рис. 11.21. Диаграмма переходов состояний окна «Добавление телефонов»

Если необходимо найти несколько записей, то переход к поиску следующей записи осуществляется по выбору пункта «Следующий». После завершения поиска пользователь вновь должен вернуться в главное меню, выбрав пункт «Выход».

Диаграмма переходов состояний интерфейса, отражающая процесс работы пользователя с программой, приведена на рис. 11.22.

Рис. 11.22. Диаграмма переходов состояний интерфейса:

1 — нажатие кнопки «Создание/Открытие файла»; 2 — нажатие кнопки «Добавить телефон»; 3 — нажатие кнопки «Найти телефон»; 4 — нажатие кнопки «Выход»; 5— нажатие кнопок «Выход» локального меню каждого окна

Объектная декомпозиция программы. Будем считать, что каждому элементу интерфейса соответствует интерфейсный объект. Таким образом выделяются объекты «Главное окно», «Ввод имени файла», «Добавление телефонов», «Поиск телефонов».

ADVERTISEMENT

Осталось учесть взаимодействие программы с файлом: открытие, запись информации и ее поиск. Поскольку все операции выполняются с одним и тем же файлом, будем считать, что за выполнение этих действий будет отвечать объект «Файл», который, соответственно, должен обрабатывать сообщения: «Открыть/создать», «Добавить» и «Найти» (рис. 11.23).

Рис. 11.23. Результат объектной декомпозиции приложения

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

Все окна в Delphi проектируются с использованием визуальной технологии, а их классы наследуются от TForm: для реализации объекта «Главное окно» — класс TMainForm, для реализации объекта «Ввод имени файла» — класс TinputForm, для реализации объекта «Добавление телефонов» — класс TAddForm, для реализации объекта «Поиск телефонов» — класс TFindForm. Для реализации объекта «Сообщение об отсутствии данных» класса создавать не будем, поскольку сообщение МОЖНО вывести С ПОМОЩЬЮ функции MessegeDlg.

Для реализации объекта «Файл» будем разрабатывать класс TBase. Этот класс — не интерфейсный, а потому будем наследовать его напрямую от класса тоь j ect — базового класса всех классов Delphi Pascal. На рисунке 11.24 представлена диаграмма классов приложения.

Рис. 11.24. Диаграмма классов приложения «Записная книжка»

Проектирование и реализация класса XBase. Этот класс должен хранить файловую переменную/, через которую будет осуществляться доступ к файлу. Для поиска данных класс будет включать поля исходных данных поиска: p_family — фамилия и р_паше — имя, ключи кь к2, которые устанавливаются в зависимости оттого, заданы или нет фамилия или имя и поля результатов поиска family, name, telefon. Кроме того, класс должен включать метод открытия существующего или создания нового файла Open, метод добавления записей Add, метод поиска первой подходящей записи Find и метод поиска следующих подходящих записей FindNext.

Наибольший интерес представляют функции поиска информации, которые в соответствии с заданием должны обеспечивать поиск по неполным данным. При этом поля «Фамилия» и «Имя» могут быть заданы, а могут быть пропущены, могут совпадать, а могут не совпадать (табл. 11.2).

В пяти случаях результат поиска положителен, т.е. записи считаются удовлетворяющими заданным условиям. Эти случаи можно объединить в одно логическое выражение:

где л — соответствует логическому «и»; v — логическому «или».

Именно это выражение и заложено в метод поиска для определения «подходящих» записей.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-12-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: