- •Введение
- •1Алгоритм. Разработка алгоритмов. Блок-схемы
- •3Операторы языка Delphi
- •3.1Оператор присваивания
- •3.2Оператор ввода-вывода
- •3.3Составные операторы
- •3.4Условный оператор
- •3.7Цикл с параметром (счетчик)
- •3.8Массивы
- •3.5Цикл с предусловием
- •3.6 Цикл с постусловием
- •3.9Строки
- •3.10Записи
- •3.11Множества
- •4Отладчик программы Debugger
- •5Среда Delphi
- •6Создание интерфейса приложения
- •7Подпрограммы
- •7.1Процедуры
- •7.2Функции
- •7.3Параметры и аргументы
- •8Особенности объектно-ориентированного программирования
- •9Работа с кнопкой
- •10Работа с текстом
- •10.1Работа с надписью
- •10.2Функции преобразования числа в строку и строки в число
- •10.3Работа в однострочном редакторе (Edit, LabeledEdit)
- •10.4Работа с многострочным редактором Memo
- •11Диалоги, сообщения
- •11.1Процедура ShowMessage
- •11.2Процедура MessageDlg
- •11.3Процедура InputBox
- •11.4Процедура InputQuery
- •11.5Стандартные диалоги
- •12Работа с компонентом StringGrid
- •13Построение графика функции
- •14Файлы
- •15Работа со списками и переключателями
- •15.1 Компонент ChekBox
- •15.2Компонент RadioButton
- •16Исключительные ситуации
- •17Работа с несколькими модулями
- •18Работа с формой
- •Содержание
- •Список использованных источников
10.4Работа с многострочным редактором Memo
Компонент Memo находится на странице Standart Палитры компонентов. Для доступа ко всем строкам компонента Memo служит свойство Text типа String. Для доступа к отдельным строкам компонента используется свойство Lines типа TStrings. Это специальный класс, который создан для работы со списками, имеет набор свойств и методов, некоторые из которых будут рассмотрены при работе с Memo. Нумерация строк начинается с нуля. Для того, чтобы изменить содержимое конкретной строки, нужно обратиться к ней по номеру:
Form1.Memo1.Lines[10]:='Меняем содержимое 11 строки сверху';
Чтобы добавить строку, используют метод Add(const S:String):
Form1.Memo1.Lines.Add('добавляем строку в конец текста');
Также строки можно стереть, использовав метод Clear:
Form1.Memo1.Lines.Clear;
Содержимое компонента можно загружать и сохранять в файл. Для этого используют следующие процедуры:
LoadFromFile(const FileName:String) – загрузить из файла, SaveToFile(const FileName: String) – сохранить в файл.
Для того, чтобы удобно просматривать информацию, используют полосы прокрутки (свойство ScrollBar), которое может принимать следующие значения:
ssNone – нет полос прокрутки (по умолчанию);
ssHorizontal – только горизонтальная полоса прокрутки;
ssVertical - только вертикальная полоса прокрутки;
ssBoth – обе полосы прокрутки.
Для выравнивания текста в Memo используют свойство Alignment, которое может принимать следующие значения:
taLeftJustify – выравнивание по левой границе (по умолчанию);
taCenter – выравнивание по ширине;
taRightJustify – выравнивание по правой границе.
По умолчанию свойство lines компонента Memo имеет значение Memo1. Это значение можно очистить или ввести нужные значения на этапе конструирования через Инспектор объектов. Для этого выберите свойство lines (рисунок 16), нажмите на «точки» справа. В результате откроется окно редактирование строк, в котором удалите ненужный текст или введите необходимый и нажмите кнопку Ok.
Рисунок 16 - Работа со свойством Lines
Пример работы с Memo представлен в главе «Диалоги».
11Диалоги, сообщения
11.1Процедура ShowMessage
Для организации диалога с пользователем можно использовать стандартные сообщения. Самый простой способ – применить сообщение ShowMessage(const Msg:String), где вместо константы Msg программист пишет сообщение пользователю. В результате выполнения данной команды на экране пользователь увидит окно, показанное на рисунке 17.
Рисунок 17 - Результат выполнения команды ShowMessage('Привет!')
11.2Процедура MessageDlg
Также можно использовать стандартные сообщения типа MessageDlg, которые бывают следующих типов :
информационный (mtInformation);
вопросительный (mtConfirmation);
сообщение об ошибке (mtError);
сообщение типа «Внимание» (mtWarning),
специальный диалог (mtCustom).
Общий вид диалогового сообщения выглядит следующим образом:
MessageDlg(const Msg:String, DlgType:TmsgDlgType, Buttons: TmsgDlgBtn, HelpCtx: Integer): Integer;
Const – текстовое сообщение, которое будет напечатано в диалоговом окне;
DlgType – тип диалога (описаны выше);
Buttons – множество кнопок, которое будет на форме диалога.
Обычно, для всех типов, кроме mtConfirmation и mtCustom, используется логически единственное множество [mbOk] (пользователь может только согласиться с текстом сообщения). Для остальных типов можно выбрать следующие кнопки: (mbYes, mbNo, mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbNoToAll,mbYesToAll, mbHelp), также возможно использовать вместо множественного типа следующие константы:
mbYesNo = [mbYes, mbNo];
mbYesNoCancel = [mbYes, mbNo, mbCancel];
mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];
mbOKCancel = [mbOK, mbCancel];
mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
mbAbortIgnore = [mbAbort, mbIgnore].
HelpCtx – указывается, если есть, тема справки, обычно этот параметр равен нулю.
Например, для сообщений, показанных на рисунке 18, применены следующие функции:
MessageDlg('Ошибка!',mtError,[mbOk],0);
MessageDlg('Внимание!',mtWarning,[mbOk],0);
MessageDlg('Информационнный текст', mtInformation, [mbOk], 0);
MessageDlg('От пользователя требуется выбор'+#13+
'В конце сообщения обычно ставят знак вопроса
"?"',mtConfirmation,[mbYes, mbNo,mbCancel],0);
MessageDlg('Диалог Custom', mtCustom, mbAbortRetryIgnore, 0);
Рисунок 18 - Результаты выполнения команды MessageDlg
При нажатии пользователем любой кнопки, кроме Help, функция MessageDlg возвращает программе результат типа Integer, с помощью которого можно управлять дальнейшими действиями. Чтобы не запоминать все числа, соответствующие каждой кнопке, ввели тип данных TModalResult, который может принимать следующие значения: mrNone, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo, mrAll, соответствующие нажатию кнопки с подобным типом (см. также работа с формой).
Пример 11. Рассмотрим часть программы, для которой необходимо ввести два числа и важно, чтобы одно было строго больше другого (например, ввод диапазона для расчета значений функции). Для решения данной задачи нам понадобится форма, на которой расположены два редактора и две кнопки (рисунок 19).
Рисунок 19 - Внешний вид формы
Для формы и кнопки написали следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
Mr:TModalResult;
a,b:real;
begin
a:=StrToFloat(Form1.Edit1.Text);
b:=StrToFloat(Form1.Edit2.Text);
if a>=b then
begin
Mr:=MessageDlg('Данные введены неверно.
Ввести заново?',mtConfirmation,
[mbYes, mbNo,mbCancel],0);
if Mr=mrYes then
Form1.FormShow(Sender);
exit;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
if Form1.Edit1.CanFocus then
Form1.Edit1.SetFocus;
end;
Теперь, при запуске программы, если пользователь ввел первое число меньше второго, появится диалоговое окно (рисунок 20). Если пользователь нажал на кнопку «Yes», то неверно введенные данные будут стерты (передается управление методу формы onShow), и пользователь сможет ввести данные заново, если пользователь выбрал другие кнопки, то программа просто «выйдет» из текущей процедуры.
Рисунок 20 - Результаты выполнения программы
