10229

Ввод-вывод данных в Delphi

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа № 6 Вводвывод данных в Delphi. Цель работы: изучить наиболее часто используемые для организации вводавывода компоненты Edit MaskEdit Label Memo RichEdit StatusBar и встроенные диалоговые окна. Т.к. в предыдущих лабораторных работах уже было знакомство с некоторы

Русский

2013-03-24

73.5 KB

144 чел.

Лабораторная работа № 6

Ввод-вывод данных в Delphi.

Цель работы: изучить наиболее часто используемые для организации ввода-вывода компоненты (Edit, MaskEdit, Label, Memo, RichEdit, StatusBar) и встроенные диалоговые окна.

Т.к. в предыдущих лабораторных работах уже было знакомство с некоторыми компонентами, информация о них приводится в сокращенном виде.

TEdit

Компоненты класса TEdit (поля редактирования) предназначены для ввода числовой и текстовой информации.

Перечислим основные свойства компонента.

Свойство     Определяет 

Name         -     Имя объекта.

Text           -     Текст, находящийся в поле ввода - редактирования.

Left          -      Расстояние от левой границы поля до левой границы формы.

Top           -      Расстояние от верхней границы поля до верхней границы формы.

Height       -     Высота поля.

Width        -     Ширина поля.

Font          -     Шрифт, используемый для отображения вводимого текста.

ParentFont -     Признак наследования свойств шрифта родительской формы.

Если значение свойства ParentFont равно False то свойство Font этого объекта не наследует значение свойства Font "родителя". Это дает возможность установить свойства шрифта объекта иные, чем у формы.

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

Свойство    Происходит 

OnClick            -    При щелчке кнопкой мыши.

OnDblClick       -    При двойном щелчке кнопкой мыши.

OnEnter            -    Перед тем как элемент управления получает фокус.

OnError             -    Когда элемент контроля обнаруживает ошибку и не может вернуть информацию об ошибке вызывающей программе.

OnExit              -    Непосредственно перед тем как элемент управления теряет фокус.

OnKeyDown     -    При нажатии клавиши. События OnKeyDown и OnKeyPress - это чередующиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша (в этот момент происходит событие OnKeyUp).

OnKeyPress      -    Когда пользователь нажимает клавишу, которая генерирует печатаемый символ. Не происходит при нажатии клавиш Tab, Enter и клавиш перемещения курсора.

OnKeyUp         -   При отпускании нажатой клавиши.

OnMouseDown -   При нажатии кнопки мыши.

OnMouseMove -   При перемещении мыши.

OnMouseUp      -   При отпускании кнопки мыши.

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

Приведем пример процедуры обработки события OnKeyPress фильтрующей символы, вводимые в компонент Edit.

Procedure TForm1.Edit1.KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

'0'..'9', chr(8):;

',': if pos(',',Edit1.Text)<>0 then Key:=#0;

'-': if length(Edit1.Text)<>0 then Key:=#0;

'.': begin 

MessageDlg('Для отделения дробной части числа'+#13+'от целой используйте запятую', mtInformation, [mbOk], 0);

Key:=#0;

end

else Key:=#0

end;

end;

Процедура проверяет: если нажата цифровая клавиша, то в поле редактирования появляется символ; если нажата клавиша (BackSpace), то последний введенный символ стирается; если запятая, то процедура проверяет, есть ли в поле редактирования запятая и если есть, то появление второй запятой блокируется; если нажат (-), то минус появляется только в случае, если в поле редактирования нет ни одной цифры.

TMaskEdit

Ввод числовых данных можно осуществлять через компонент MaskEdit. Раскройте диалоговое окно свойства MaskEdit. Это свойство указывает маску компонента, т.е. определяет, какие символы и в какой последовательности может набирать пользователь в окне ввода. Например, для целых чисел введите в строке Input Mask #999999999;1; Теперь компонент будет автоматически контролировать ввод пользователя и отвергать любые символы, кроме знаков '+' или '-' в первой позиции (элемент маски '#') и цифр (элементы '9'). В окне 'Character for Blanks' укажите символ заполнителя - пробел.

Преобразовывать введенный текст MaskEdit1.Text в числовую информацию можно по нажатии клавиши Enter (символ #13). Для этого обработаем событие OnKeyPress компонента MaskEdit.

procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);

begin

If Trim(MaskEdit1.Text)='' then Exit;

If Key = #13 then X:= StrToInt (Trim(MaskEdit1.Text))

end;

Функция Trim(S) возвращает строку аргумент без обрамляющих ее пробелов;

StrToInt(S) преобразует строку  символов S в целое число.

FloatToStr(S) преобразует строку  символов S в вещественное число.

TLabel

Текст, находящийся на форме, называют меткой. Перечислим некоторые свойства компонента.

Свойство        Определяет

Caption      -     Текстовая информация, надпись на компоненте

AutoSize   -    Автоматически устанавливает размеры метки в зависимости от количества символов текста метки и шрифта.

TMemo

Если надо ввести символьный массив, то вместо компонента Edit удобнее использовать компонент Memo, который позволяет вводить несколько строк текста.

Перечислим основные свойства компонента.

Свойство       Определяет 

Name     -        Имя объекта.

Lines     -        Текст, находящийся в строках поля Memo. Обращение к какому либо элементу массива строк задается: Memo1.Lines[i]. Строки Memo нумеруются с нуля.

Lines.Count -  Количество строк, введенных в поле Memo.

Text     -         Текст, находящийся в поле ввода - редактирования.

TRichEdit

Компонент TRichEdit представляет собой многострочное окно редактирования текстов в обогащенном формате .rtf, позволяющее производить выбор цвета, шрифта, поиск текста и т.д. В этом основное отличие TRichEdit от более простого компонента TMemo, в котором атрибуты форматирования одинаковы для всего текста.

При желании изменить атрибуты вновь вводимого фрагмента текста вы можете задать свойство SelAttributes. Это свойство типа TTextAttributes, которое в свою очередь имеет подсвойства: Color (цвет), Name (имя шрифта), Size (размер), Style (стиль) и ряд других. Например, если приложение имеет компонент RichEdit, диалог выбора шрифта TFontDialog FontDialog1, следующий код позволит пользователю менять атрибуты текста:

if FontDialog1.Execute then

with RichEdit1.SelAttributes do begin

  Color:=FontDialog1.Font.Color;

  Name:=FontDialog1.Font.Name;

  Size:=FontDialog1.Font.Size;

  Style:=FontDialog1.Font.Style;

 end;

RichEdit1.SetFocus;

В приведенном коде присваивается поочередно значение каждого свойства. Но этот текст можно кардинально сократить, воспользовавшись тем, что объекты SelAttributes и Font совместимы по типу. Поэтому можно присвоить сразу все свойства одного объекта другому:
  if FontDialog1.Execute then

    RichEdit1.SelAttributes.Assign(FontDialog1.Font);

 RichEdit1.SetFocus;

В компоненте имеется также свойство DefAttributes, содержащее атрибуты по умолчанию. Эти атрибуты действуют до того момента, когда изменяются атрибуты в свойстве SelAttributes. Но значения атрибутов в DefAttributes сохраняются и в любой момент эти значения могут быть методом Assign присвоены атрибутам свойства SelAttributes, чтобы вернуться к прежнему стилю.

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

Alignment   Определяет выравнивание текста

FirstIndent   Число пикселей отступа красной строки

Numbering   Управляет вставкой маркеров, как в списках

LeftIndent   Отступ в пикселях от левого поля

RightIndent  Отступ в пикселях от правого поля

TabCount      Количество позиций табуляции

Tab      Значения позиций табуляции в пикселях

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

RichEdit1.Paragraph.Alignment:=taLeftJustify; // Влево

RichEdit1.Paragraph.Alignment:=taCenter;   // По центру 

RichEdit1.Paragraph.Alignment:=taRightJustify;// Вправо

Следующий оператор приведет к тому, что текущий абзац будет отображаться как список, т.е. с маркерами:

RichEdit1.Paragraph.Numbering:=nsBullet;

Уничтожение списка в текущем абзаце осуществляется оператором

RichEdit1.Paragraph.Numbering:=nsNone;

TStatusBar

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

Свойство SimplePanel компонента TStatusBar определяет, включает ли полоса состояния одну или множество панелей. Если SimplePanel = true, то вся полоса состояния представляет собой единственную панель, текст которой задается свойством SimpleText. Если же SimplePanel = false, то полоса состояния является набором панелей, задаваемых свойством Panels. В этом случае свойство SizeGrip определяет, может ли пользователь изменять размеры панелей в процессе выполнения приложения.

Каждая панель полосы состояния является объектом типа TStatusPanels. Свойства панелей вы можете задавать специальным редактором наборов, который можно вызвать тремя способами: из Инспектора Объектов кнопкой с многоточием около свойства Panels, двойным щелчком на компоненте TStatusBar или из контекстного меню, выбрав команду Panels Editor. В окне редактора вы можете перемещаться по панелям, добавлять новые или уничтожать существующие. При перемещении по панелям в окне Инспектора Объектов вы будете видеть их свойства.

Основное свойство каждой панели - Text, в который заносится отображаемый в панели текст. Другое существенное свойство панели - Width (ширина). Свойство Style определяет стиль панели: psText - текстовая, psOwnerDraw - предназначена для изображений на канве.

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

StatusBar1.Panels[0].Text := 'текст 1';

или

StatusBar1.Panels.Items[0].Text := 'текст 1';

Количество панелей полосы состояния можно определит из подсвойства Count свойства Panels. Например, следующий оператор очищает тексты всех панелей:

for i:= 0 to StatusBar1.Panels.Count -1 do  

StatusBar1.Panels[i].Text := '';

Свойство AutoHint, установленное в true, обеспечивает автоматическое отображение в первой панели полосы состояния вторых частей подсказок (свойства Hint) тех компонентов, над которыми перемещается курсор мыши. Причем отображение происходит независимо от значения свойства ShowHint этих компонентов. Конечно, панель должна быть текстовой (Style = psText).

Свойство SizeGrip определяет наличие в нижнем правом углу полосы состояния захвата, позволяющего пользователю изменять размер полосы. Если при этом полоса выровнена по нижнему краю формы (Align = alBottom), то одновременно будет изменяться и размер окна приложения.

Встроенные диалоговые окна ввода-вывода текста

1. ShowMessage(const Msg : WideString) отображает простое окно сообщения с кнопкой OK. Заголовок окна совпадает с именем выполняемого файла приложения.

ShowMessage('Работа приложения успешно завершена.');

ShowMessage('Задано ' + IntToStr(N1) + ' параметров из ' + IntToStr(N2)); // N1 и N2 - целые переменные содержат соответствующие числа,

//которые переводятся в строки функцией IntToStr.

2. ShowMessageFmt(const Msg:WideString; Params:array of const) отображает окно сообщения с кнопкой OK. Параметр Msg задает строку описания формата, а параметр Params задает массив параметров, форматируемых строкой Msg. Заголовок окна совпадает с именем выполняемого файла приложения.

ShowMessageFmt('Задано %d параметров из %d ', [N1, N2]);

3. ShowMessagePos (const Msg: WideString; X, Y: Integer), во всем аналогичная функции ShowMessage, отображает окно в заданном месте экрана.

4. MessageDlg(const Msg: WideString; AType: TMsgDlgType;AButtons: TMsgDlgButtons; HelpCtx: Longint) отображает диалоговое окно и ожидает ответа пользователя. Сообщение в окне задается параметром функции Msg. Вид отображаемого окна задается параметром AType. Возможные значения этого параметра:

mtWarning -  Окно замечаний, содержащее желтый восклицательный знак.

mtError  -  Окно ошибок, содержащее красный стоп-сигнал.

mtInformation - Информационное окно, содержащее голубой символ "i".

mtConfirmation - Окно подтверждения, содержащее зеленый вопросительный знак.

mtCustom  - Заказное окно без рисунка. Заголовок соответствует имени выполняемого файла приложения.

Параметр AButtons определяет, какие кнопки будут присутствовать в окне. Тип TMsgDlgBtns параметра AButtons является множеством, которое включает различные кнопки. Возможные значения видов кнопок:

mbYes  - Кнопка с надписью 'Yes'

mbNo  - Кнопка с надписью 'No'

mbOK  - Кнопка с надписью 'OK'

mbCancel  - Кнопка с надписью 'Cancel'

mbHelp - Кнопка с надписью 'Help'

mbAbort  - Кнопка с надписью 'Abort'

mbRetry  -  Кнопка с надписью 'Retry'

mbIgnore - Кнопка с надписью 'Ignore'

mbAll  -  Кнопка с надписью 'All'

Список необходимых кнопок заключается в квадратные скобки [ ], поскольку параметр AButtons является множеством. Если внутри скобок список отсутствует, в окне не будет ни одной кнопки и пользователю придется закрывать окно системными кнопками Windows.

Кроме множества значений, соответствующих отдельным кнопкам, в Delphi определены три константы, соответствующие часто используемым сочетаниям кнопок:

Значение                  Описание

mbYesNoCancel  Включает в окно кнопки Yes, No и Cancel

mbOkCancel Включает в окно кнопки OK и Cancel

mbAbortRetryIgnore Включает в окно кнопки Abort, Retry и Ignore

Эти константы являются предопределенными множествами. Поэтому при их использовании их не надо заключать в квадратные скобки [ ].

Параметр HelpCtx определяет экран контекстной справки, соответствующий данному диалоговому окну. Этот экран справки будет появляться при нажатии пользователем клавиши F1. Если вы справку не планируете, при вызове MessageDlg надо задать нулевое значение параметра HelpCtx. Подробнее о контекстной справке см. в описании свойства HelpContext.

Функция MessageDlg возвращает значение, соответствующее выбранной пользователем кнопке. Возможные возвращаемые значения:

mrNone,  mrAbort,    mrYes,  mrOk,  mrRetry,  mrNo,  mrCancel,  mrIgnore,   mrAll.

Примеры:

1. Заключительный диалог при окончании работы приложения.

if MessageDlg('Действительно хотите закончить приложение?',

   mtConfirmation, [mbYes, mbNo], 0) = mrYes then

 begin

       MessageDlg('Работа приложение закончена', mtInformation,

              [mbOk], 0);

   Close;

 end;

2.  Сообщение об ошибке и замечание.

on Exception do

 begin

  MessageDlg('Произошла ошибка.', mtError,

           [mbOk], 0);

     MessageDlg('Будьте внимательнее.', mtWarning,

           [mbOk], 0);

 end;

5. MessageDlgPos (const Msg: WideString; AType: TMsgDlgType;AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer), во всем аналогичная функции MessageDlg, отображает окно в заданном месте экрана.

6.  API-функции MessageBox и MessageBoxEx также предназначены для вывода информации. Для начального обучения достаточно сложны в применении и будут рассмотрены позднее.

7. function InputBox(const ACaption, APrompt, ADefault: string): string отображает входное диалоговое окно, которое позволяет вводить в строку. ACaption - заголовок диалогового окна, APrompt – текст-приглашение, который подсказывает что вводить в окно, ADefault - строка, которая появляется в окне редактирования по умолчанию. Если выбирается кнопку Cancel, InputBox возвращает эту встроенную строку. Если потребитель выбирает кнопку OK, InputBox возвращает строку в окне редактирования. Если приложению нужно знать что выбрал пользователь (OK или Отмена), используйте взамен функцию function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;

Задания на разработку

1. Создайте программу для решения квадратного уравнения. Ввод и вывод данных оформите через компонент TEdit. Результат сравните с примером (\Example1).

2. Разработайте программу для контроля веса. Оптимальный вес (кг) вычисляется по формуле: Рост (см)-100.

3. Создайте текстовый редактор, позволяющий работать с форматом rtf и задавать выlеленному участку текста цвет, размер, шрифт, стиль и производить выравнивание текста. Количество символов в тексте выведите в компоненте StatusBar (\Example2).

4. Создайте приложение, демонстрирующее все вам известные встроенные диалоговые окна с возможностью выбора всех параметров (\Example3).

Контрольные вопросы

  1.  Чем отличается компонент TMaskEdit от TEdit?
  2.  Как оформляется ввод специализированной информации (целые, вещественные числа, четные, простые числа, выборочные символы) в компоненты ввода-вывода?
  3.  В чем отличие компонента TRichEdit от TMemo?
  4.  Для каких целей используется полоса состояния TStatusBar?
  5.  Какие замены  вы могли бы предложить компоненту TStatusBar?
  6.  Приведите примеры использования встроенных диалоговых окон.


 

А также другие работы, которые могут Вас заинтересовать

39214. НАУЧНОЕ ЗНАНИЕ КАК СИСТЕМА 45.18 KB
  Философия и методология научного познания Тема 3 Лекция 4 НАУЧНОЕ ЗНАНИЕ КАК СИСТЕМА Формы знаний: научное и вненаучное знание Наука как социокультурный феномен Роль практики в научном знании ФОРМЫ ЗНАНИЙ: НАУЧНОЕ И ВНЕНАУЧНОЕ ЗНАНИЕ Познание не ограничено сферой науки знание в той или иной своей форме существует и за пределами науки. Появление научного знания не отменило и не упразднило не сделало бесполезными другие формы знания. Каждой форме общественного сознания: науке философии мифологии политике религии и т. ...
39215. НАУЧНОЕ ЗНАНИЕ КАК СИСТЕМА 54.4 KB
  Философия и методология научного познания Тема 3 Лекция 5 НАУЧНОЕ ЗНАНИЕ КАК СИСТЕМА Структура научного знания Классификация наук и периодизация истории науки СТРУКТУРА НАУЧНОГО ЗНАНИЯ Наука это форма духовной деятельности людей направленная на производство знаний о природе обществе и о самом познании имеющая непосредственной целью постижение истины и открытие объективных законов на основе обобщения реальных фактов в их взаимосвязи для того чтобы предвидеть тенденции развития действительности и способствовать ее изменению....
39216. Социально-гуманитарное познание 95.5 KB
  1 Герменевтика представляет собой направление в философии занимающееся проблемой теории и практики понимания текста. Герменевтический подход позволяет исследовать процесс понимания текста. Философские основы герменевтики позволяют изучить проблему понимания текста как на теоретическом так и на практическом уровне. С позиций герменевтики процесс понимания текста выглядит следующим образом.
39217. ФИЛОСОФИЯ НАУКИ КАК ОБЛАСТЬ ЗНАНИЯ 31.83 KB
  ФИЛОСОФИЯ НАУКИ КАК ОБЛАСТЬ ЗНАНИЯ Соотношение философии и науки Понятийный аппарат философии Статус научности философии Вопрос 1. Соотношение философии и науки Существует многолетний спор философии и науки о том в чем больше нуждается общество в философии или науке и какова их действительная взаимосвязь Является ли философия наукой всех наук т. стоять над частными дисциплинами или она должна быть одной из частных наук в ряду прочих На этот вопрос можно ответить прояснив соотношение философии и науки: Специальные...
39218. ФИЛОСОФИЯ НАУКИ КАК НАПРАВЛЕНИЕ СОВРЕМЕННОЙ ФИЛОСОФИИ 51.16 KB
  ФИЛОСОФИЯ НАУКИ КАК ОБЛАСТЬ ЗНАНИЯ ЛЕКЦИЯ 2.ФИЛОСОФИЯ НАУКИ КАК НАПРАВЛЕНИЕ СОВРЕМЕННОЙ ФИЛОСОФИИ 2.ПРЕДМЕТНАЯ СФЕРА ФИЛОСОФИИ НАУКИ КАК ДИСЦИПЛИНЫ ВОПРОС 1. ФИЛОСОФИЯ НАУКИ КАК НАПРАВЛЕНИЕ СОВРЕМЕННОЙ ФИЛОСОФИИ Непосредственной предшественницей философии науки является гносеология XVII XVIII вв.
39219. Динамика науки как процесс порождения нового знания 131 KB
  Философия и методология научного познания Тема 2 Лекция 3 Динамика науки как процесс порождения нового знания Сущность и движущие силы развития научного знания. Концепция исторической динамики науки Т. Этот процесс можно рассматривать как движение от мифа к логосу от логоса к преднауке от преднауки к науке от классической науки к неклассической и далее к постнеклассической и т. В философии науки вопрос о сущности и движущих силах развития научного знания сводится к следующим аспектам: Сущность динамики науки это просто...
39220. ЭКОНОМИКА СТРОИТЕЛЬСТВА 668.5 KB
  Все они используют одни и те же методические документы по составлению смет и нормативные базы ЭСН84 ЕРЕР84 СниР91 ЕРС99 ГЭСН2001 ТЕР2001 и др. Затраты труда рабочих и машинистов на единицу определяются по сборникам ГЭСН2001. ГЭСН отражают среднеотраслевые затраты на эксплуатацию строительных машин и механизмов в зависимости от видов работ. 2004 N п п Виды строительных и монтажных работ Нормативы накладных расходов в к фонду оплаты труда рабочих строителей и механизаторов Область применения номера сборников ГЭСН ГЭСНм...
39221. Социология права 16.28 KB
  Социология права (юридическая социология) – отрасль общей социологии (наряду с такими ее отраслями, как социология культуры, социология политики, социология религии и т. д.)