Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование delphi.doc
Скачиваний:
806
Добавлен:
09.02.2015
Размер:
2.97 Mб
Скачать

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

MessageDlg(Сообщение, Тип, Кнопки, КонтекстСправки)

где

Сообщение – выводимое сообщение;

Тип – тип сообщения. Сообщение может быть информационным, предупреждающим или сообщением об ошибке;

Кнопки – список, определяющий число и вид кнопок;

КонтекстСправки – определяет номер экранной справки; так как экранная справка не используется, то необходимо установить значение 0.

Константы, определяющие тип окна сообщения и вид кнопок, перечислены в таблице.

Тип сообщения

Константа

Сообщения

Значок

MtWarning

Внимание

MtError

Ошибка

MtInformation

Информация

mtConfirmation

Запрос подтверждения

MtCustom

Пользовательское окно

Вид кнопок

Константа

Обозначение

Код возврата

MbYes

Да

mrYes

MbNo

Нет

mrNo

MbOk

Ok

mrOk

MbCancel

Отмена

mrCancel

MbHelp

Помощь

mrHelp

MbAbort

Прекращение

mrAbort

MbRetry

Повтор

mrRetry

MbIgnore

Игнорировать

mrIgnory

MbAll

Все

mrAll

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

Пример

Пусть необходимо выдать диалоговое окно запроса с тремя кнопками «Yes», «No» и «Cancel» и проанализировать, какая кнопка была «нажата».

W := MessageDlg(‘Какую кнопку нажать?’, mtConfirmation,

[mbYes, mbNo, mbCancel]);

Case W of

mrYes : {действие, связанное с «нажатием» на кнопку Yes};

mrNo : {действие, связанное с «нажатием» на кнопку No};

mrcancel : {действие, связанное с «нажатием» на кнопку Cancel};

end;

6.2. Создание программы «Редактор текста»

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

Окно программы представлено на рис. 6.1.

Процесс создания программы происходит по следующему алгоритму:

  1. Запустить Delphi.

  2. Сохранить проект («work6.dpr», «main.pas»).

  3. Настроить вид экрана:

  • для отображения быстрой справки – подсказки видимых элементов окна –необходимо установить свойство формы ShowHint (показывать подсказку) в значение true. Все элементы, размещенные в окне, автоматически будут иметь свойство ShowHint в значении true;

  • в качестве дизайна окна использовать «главное меню» и панель «горячих клавиш». Поместить панель на форму и настроить ее свойства:

  • поместить панель (элемент Panel, вкладка Standard, значок );

  • изменить заголовок на ‘’  Caption;

  • изменить высоту панели так, чтобы она была чуть больше кнопок, которые будут в неё вставлены (Height = 40);

  • настроить панель, чтобы она всегда находилась вверху окна, независимо от его размера  Align установить в значение alTop – вверху;

  • поместить на экран «горячие кнопки» (SpeedButton, Additional,). Такие кнопки обычно не имеют заголовка, а несут функциональную информацию по картинке и контекстной справке. Поместить 3 такие кнопки: «Выход», «Открыть файл», «Сохранить файл»:

  • назвать кнопки (Name) соответственно SBQuit, SBOpen и SBSave;

  • выбрать картинки для кнопок в соответствии с назначением кнопок (картинки можно взять из папки кнопок в папке общих программ Borland или в папке Delphi (папка «Images\Buttons»))Glyph; можно выбрать следующие картинки: FileOpen для открытия файла, FileSave для закрытия файла, DoorShot для выхода из программы;

  • назначить подсказки для кнопок: для кнопки SBQuit – «Выход из программы»; для SBOpen «Открыть файл»; для SBSave «Сохранить файл»  Hint;

  • создать главное меню:

  • поместить главное меню на форму (MainMenu, Standard,);

  • этот значок запускает программу-мастера построения меню – щелкнуть на значке для запуска мастера;

  • построить иерархическое меню. Для этого в поле ввода набрать название пункта меню («Файл») (Caption), затем сместиться в подменю и ввести названия «Открыть» и «Сохранить», затем поставить разделитель пунктов – при вводе названия поставить «-» (минус);

  • для каждого пункта меню назначить «горячую клавишу», т. е. ту комбинацию клавиш, при нажатии на которую этот пункт меню будет активизироваться (свойство ShortCut). Назначить такие комбинации (выбрать из списка): для пункта «Открыть» – <Ctrl><O>; «Сохранить» – <Ctrl><S>; «Выход» – <Ctrl><Q>;

  • для открытия файла поместить стандартный диалог открытия файлов:

  • поместить объект открыть файл (Dialogs, OpenDialogs,);

  • дать ему имя ODText (Name);

  • настроить заголовок окна на «Открытие текстового файла» (Title);

  • назначить имя папки, из которой будут открываться файлы по умолчанию, дав ему имя «.» - текущая папка (папка программы) (InitialDir);

  • настроить фильтр файлов, которые будут открываться (Filter). Это свойство запустит мастера – слева в окне описание групп файлов (Filter Name), справа – шаблон группы (Filter). Изменить описание на «Текстовые файлы», а шаблон на «*.txt»;

  • для сохранения файлов необходимо:

  • поместить на форму элемент диалог сохранения (SaveDialog, Dialogs,);

  • настроить имя на SDText (Name);

  • остальные свойства настроить как и у объекта OpenDialog;

  • для переключения между режимами чтения файла (посимвольное чтение или чтение сразу всего файла) необходимо:

  • поместить на панель объект независимая метка (CheckBox, Standard,);

  • настроить имя на CBChar ( Name);

  • заголовок изменить на «Посимвольно» ( Caption);

  • кнопка активна (выполняется чтение посимвольно) ( Checked установить в true);

  • для вывода текста необходимо:

  • на форму поместить элемент примечаний (Memo, Standard,);

  • настроить имя на MText ( Name);

  • изменить свойство ScrollBars на ssBoth для добавления в поле вывода текста скроллеров – обеспечение перемещения по тексту, если текст окажется больше окна вывода;

  • очистить окно текста. Выбрать свойство Lines и удалить строку MText;

  • расположить поле вывода текста на всё доступное пространство формы. Для этого изменить свойство Align на alClient;

  • форма настроена!

  1. Приступить к программированию событий:

  • запрограммировать выход из программы на кнопку SBQuit (Событие onClick, команда – Close);

  • запрограммировать открытие файла на кнопку SBOpen (Событие onClick), добавив следующий текст:

  • добавить в разделе переменных процедуры следующие переменные: F – переменная типа текстовый файл для связки с файлом на диске; C – считываемый символ – переменная типа символ и W – переменная типа целое число для записи текста в поле MText, так как этот объект не позволяет добавлять строку посимвольно:

var

F : TextFile;

C : Char;

W : Word;

  • технология считывания следующая:

  • открыть диалог открытия файлов;

  • получить имя открываемого файла из этого диалога;

  • открыть файл;

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

  • при чтении сразу всего файла считать текст,

иначе: пока не конец файла добавить в поле вывода текста пустую строку; пока не конец строки считать символ и добавить его к пустой строке;

  • текст, реализующий этот алгоритм:

If ODText.Execute then //Если в диалоге выбран файл

begin

MText.Clear; //Очистить поле вывода

AssignFile(F,ODText.FileName); //Связать файл с F

{$I-} //Отключить проверку

reset(F); //Открыть файл

{$I+} //Включить проверку

If IOResult = 0 then //Файл открыт удачно

begin

Form1.Caption := ODText.FileName;

{В заголовке окна отобразить имя открытого файла}

W := 0; //Счетчик строк

If CBChar.Checked then //Если посимвольный ввод

begin

while Not EOF(F) do //Пока не конец файла

begin

MText.Lines.Add(''); //Добавить пустую строку

While Not EOLn(F) do //Пока не конец строки

begin

read(F,C); //Считать очередной символ

MText.Lines[W]:=MText.Lines[W]+C;

{Добавить к пустой строке считанный символ}

end;

Inc(W); //Увеличить счетчик строк

readln(F);

{Перейти к считыванию новой строки}

end;

end

else //Файл считывается сразу

begin

MText.Lines.LoadFromFile(ODText.FileName);

{Считать файл}

end;

CloseFile(F); //Закрыть файл

end

else //Файл не открыть

ShowMessage('Ошибка открытия файла '+ODText.FileName);

{Выдать сообщение об ошибке}

end; //Конец работы с файлом

В программе виден способ заполнения элемента MText текстом: текст представляет собой массив строк (свойство Lines) и либо загружается сразу из указанного файла (строка MText.Lines.LoadFromFile(ODText.FileName);), либо происходит обращение по индексу к нужной строке и заполнение её (строка MText.Lines[W]:=MText.Lines[W]+C; – к строке с индексом W добавить считанный символ C, учитывая, что нумерация строк начинается с 0);

  • запрограммировать сохранение введенного или отредактированного файла на диске кнопкой SBSave (Событие onClick):

  • ввести следующий текст:

If SDText.Execute then

{Если выбрано сохранение файла}

begin

Mtext.Lines.SaveToFile(SDText.FileName); //Сохранить файл

Form1.Caption := SDText.FileName;

{Изменить заголовок окна на имя сохранённого файла}

end;

  1. Для улучшения программы можно выполнить следующее:

  1. ввести индикатор изменения текста в поле ввода – как только текст изменен, отобразить индикатор изменения;

  2. при сохранении файла проверять, нет ли уже файла с таким именем и выдавать запрос на перезапись.

Например, п 5а можно выполнить так:

  • на форму (на панель) добавить элемент метка (Label, Standard,). Изменить его свойства:

  • имя изменить на LModify (Name);

  • заголовок – на «Текст изменён» (Caption);

  • видимость (если текст не изменён, то и индикатор изменения не показывать) установить в значение false (Visible);

  • запрограммировать событие onKeyPress элемента MText, выполняемое при нажатие клавиш, и ввести текст:

LModify.Visible := true;

  • при сохранении текста (событие onClick кнопки SBSave) после строки «{изменить заголовок окна на имя сохранённого файла}» добавить строку изменения состояния индикатора:

LModify.Visible := false;

  1. При желании п. 5б запрограммировать самостоятельно. (Рекомендация. Попытаться открыть файл с введенным именем и если это удаётся (файл существует!), то требуется вывести запрос на перезапись).

  2. Программа готова – запуск <F9>.