10229

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

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

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

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

Русский

2013-03-24

73.5 KB

141 чел.

Лабораторная работа № 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.  Приведите примеры использования встроенных диалоговых окон.


 

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

34512. Высокое Возрождение в Италии. Общая характеристика искусства Высокого Возрождения. Творчество Леонардо да Винчи, Рафаэля Санти, Микельанджело Буанаротти 17.58 KB
  Творчество Леонардо да Винчи Рафаэля Санти Микельанджело Буанаротти. Флорентийскоримские мастера Леонардо да Винчи 1452 1519 ученик Верроккьо универсальный гений. Непродуктивность Леонардоживописца неспособность довести вещь до конца следствия опережающей работы интеллекта. Леонардо в Милане 1482 1499.
34513. Позднее Возрождение в Венеции. Творчество Тициана, Тинторетто, Веронезе 16.52 KB
  1509 Дрезден Картинная галерея âТри философаâ ок. âЛюбовь небесная и земнаяâ 1514 Рим галерея Боргезе. Импозантность и демонстрация жизненного амплуа модели в портретах Федериго II Гонзага 1529 Мадрид Прадо и Ипполито Медичи 1533 Флоренция галерея Питти. Работы среднего периода: âВведение во храмâ 1534 1538 Венеция Академия âВенера Урбинскаяâ 1538 Флоренция Уффици âДанаяâ 1544 1546 Неаполь галерея Каподимонте.
34514. Северное Возрождение. Искусство Нидерландов. Ян ван Эйк. Рогир ван дер Вейден. Гуто ван дер Гус. Мир И. Босха. Питер Брейгель Старший 19.04 KB
  Ян ван Эйк. Рогир ван дер Вейден. Гуто ван дер Гус. и Яна около 1390 1441 ван Эйков законченного Яном ван Эйком в 1432 г.
34515. Философско-эстетические взгляды А. Мердок. Конфликт искусства и жизни в романах писательницы 15.66 KB
  Конфликт искусства и жизни в романах писательницы Ее философскопсихол. Чаще всего ее романы связаны с событиями частной семейной жизни. По ее мнению роман должен повествовать о сложной нравственности жизни человека о загадочности человеческого индивидуальности о том что человек это необыкновенная ценность она выступила против романа мифа романапритчи и связала роман с философией. В романе 70х : Человек случайности Черный принц Священная и земная любовь на первый план выдвигается философская проблема случайности в жизни...
34516. Игра в сюжетном развитии и повествовательной организации произведений Д. Фаулза 19.88 KB
  До конца 1960х вышли в свет два романа писателя Волхв и роман Женщина французского лейтенанта. При этом Фаулз достигает эффекта максимального присутствия предлагая в конце романа читателю сделать выбор вместе с его героем уподобиться осторожному обывателю или рискнуть обрести свое я в извечном конфликте долга и чувства. деконструирует сам тип викторианского романа. Но задача Фаулза не в том чтобы занять читателя интеллектуальной игрой по разгадке аллюзий а в деконструировании или деконструкции согласно терминологии...
34517. Творчество У. Эко и постмодернизм 18.02 KB
  Эко и постмодернизм. Много сделал Экоученый для осмысления таких явлений как постмодернизм и массовая культура. Постмодернизм согласно Эко не столько явление имеющее строго фиксированные хронологические рамки а скорее определенное духовное состояние особого рода игра участие в которой возможно и в том случае если участник не воспринимает постмодернистскую иронию интерпретируя предложенный текст сугубо серьезно. По мнению Эко высокая и массовая эстетики в постмодернизме сближаются.
34518. Тема строительства нового общества в литературе ГДР 19.54 KB
  Эти предпосылки были полностью реализованы на территории будущей ГДР. Образование ГДР было закономерным итогом антифашистскодемократического переворота ответом прогрессивных сил немецкого народа на раскол Германии западными державами и западногерманской реакцией. С возникновением ГДР в ней наряду с укреплением антифашистскодемократического порядка начался процесс создания основ социализма.
34519. Духовно-нравственная проблематика и ее художетсвенное воплощение в произведениях писателей ГДР 17.54 KB
  1900; роман Мёртвые остаются молодыми 1949 повесть Человек и его имя 1952 Л. Бределя 190164; романыСыновья 1949 Внуки 1953 Г. Мархвицы 18901965; роман Возвращение Кумяков 1952 в поэзии Э. 1912; роман Чудодей 1957 Б.
34520. Тема неопределенного прошлого в произведениях западногерманских писателей (Г. Белль, Г. Грасс) 22.83 KB
  Грасс Генрих Бёлль 19171985 Входил в Группа 47 объединение писателей не желавш.Тематика: Тема Бунтарства в романе описана в образе причастности к фашистскому движению причастие буйвола большинство окружения Генриха Фемеля прильнули к этим течениям он оставался равнодушным однако еще в юным дал обет не принимать их сторону. А помощница Генриха напротив хотела сбежать от опостылевшей ей правильности и вежливости хозяина. Тема порядка: Фемель был как часы как слаженный механизм он делал все с немецкой дотошностью и...