10229

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

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

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

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

Русский

2013-03-24

73.5 KB

122 чел.

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


 

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

21388. ПРАВО СОБСТВЕННОСТИ И ДРУГИЕ ВЕЩНЫЕ ПРАВА 23.75 KB
  наиболее крупные структурные подразделения отдельной отрасли права Это совокупность ГП норм регулирующих отношения собственности Содержание этих норм направленных на регулирование отношений собственности все цело определяются специфическими особенностями Частные имущественные отношения собственности отличаются от других ЧИО ПОНЯТИЕ ОТНОШЕНИЙ СОБСТВЕННОСТИ Собственность как экономическая категория Большинство экономистов и юристов давно поняли что собственность это не вещь и не отношение к вещи а это отношения которые складываются между...
21389. Другие вещные права 21.76 KB
  Вещное право предоставляет управмочнному лицу юр возможность удовлетворять свои потребости за счёт непосредственного взаимодейтсвия с вещью. Вещное право это право не на какуюто вещь право на поведение других. Для удовлетворения потребностей человек нуждается в вещах но зачем ему право если у него есть вещь а это объясняется следующим что удовлетворенияе потребностей в обещстве и любое вещное право и нужно чтобы обеспечить такое повдееие со строны окружающ с при котором можно было бы бесперпятсвенно удовлторять свои потребности за...
21390. ОСНОВАНИЕ ВОЗНИКНОВЕНИЕ И ПРЕКРАЩЕНИЕ ВЕЩНЫХ И ДРУГИХ ПРАВ 23.58 KB
  право собственности т. такой критерий не работает Мы опираемся на критерий воли собственника ПЕРВОНАЧАЛЬНЫЕ СПОСОБЫ Производство изготовление создание вещей: статья 218 ГК: лицо создавшее вещь для себя с соблюдением требования закона становится собственником этой вещи при этом для движимой вещи право собственности в момент ее создания а для недвижимости статья 219 ГК: право собственности на здания сооружения и другое вновь созданное имущество подлежащее гос регистрации возникает с момента такой регистрации Спецификация: изготовление...
21391. ГРАЖДАНСКОЕ ПРАВО КАК ОТРАСЛЬ ПРАВА 26.5 KB
  надо выявить те свойства которые входят в предмет одной отрасли гражданского права Легальное определение статья 2 ГК РФ: перечень наиболее типычных общественных отношений входящих в ГП: отношения собственности обязательственные отношения результаты по поводу интеллектуальной деятельности; предмет ГП входят имущественные и личные неимущественные отношения основанные на равенстве автономии воли и имущественной самостоятельности их участников Определяются внешние признаки В научном определении включаются сущностные признаки т. все обществеенные...
21392. ПРИНЦИПЫ ГРАЖДАНСКОГО ПРАВА 19.19 KB
  их применение все цело зависит от усмотрения участников ГО статья 617; императивных норм гораздо меньше один из недостатков что их еще достаточно много что явно не оправданно статья 807договор займа реальный договор Пункт 1 статья 9 субъекты ГП по своему усмотрению осуществляют принадлежащие им субъективные права в плановой экономике не редко субъекты осуществляли свои права по указанию другихсвобода усмотрения при осуществлении ими своих субъективных прав не безгранична и существует статья 10 пределы осуществления гражданских прав...
21393. СИСТЕМА ГП 28.57 KB
  общие нормы не повторяются в отдельных институтах ГП Особенная часть ГП состоит из подразделений правовые нормы которых рассчитаны на регулирование только одного вида оо входящих в предмет ГП Наиболее крупными подразделениями особенной части являются подотрасли Содержащиеся в подотраслях нормы ГП предназначены для регулирования только одного вида оо состоящих предмет ГП: Право собственности и другие вещные права Право на результаты интеллектуальной деятельности человека которые предназначены для отношений связанные с результатом...
21394. ДЕЙСТВИЕ ГЗ 22.07 KB
  опубликован в течение 7 дней после его подписания президентом официальным опубликованием считается первая публикации закона либо в рос газете либо в собрании законодательства Рф либо парламентской РФ Вступает в силу по истечении 10 дней после дня официального опубликования если самим законом не установлен иной порядок вступления его в силу Вступление в силу подзаконных нпа Указ президента РФ О порядке опубликования и вступления в силу актов президента правительства рф и нормативных актов федеральных органов исполнительной власти от 17.1997...
21395. ГРАЖДАНСКОЕ ПРАВОТНОШЕНИЕ 24.99 KB
  на сознание и волю Гпр оо только потому и возможно что содержание оо составляет поведение участников этих оо Поэтому урегулировать оо входящие в предмет ГП модно только одним способом путем регулирования поведения субъектов ГП в рамках существующих м у ними оо В качестве таких регуляторов выступают субъективные права и обязанности которыми наделяются участники регулируемых оо Субъективное право это мера возможного поведения управомоченного лица ГПотн Объективное право это мера должного поведения В ГП поведение определяется в соответствии с...
21396. СУБЪЕКТЫ ГП 27.62 KB
  некоторые граждане в силу малолетнего возраста или по состоянию здоровья не могут это делать то признается недееспособным до 14 лет не обладают дееспособностью Право и дееспособности это юр качества и свойства которыми субъектов ГП наделяет государство и только оно может лишить или ограничить Отказ субъекта от право ил дееспособности недействителен Статья 22: сделки направленные на ограничение право и дееспособности не действительны в СССР не хватало рабочей силы тогда выдавали квартиру но обычно ее меняли сразу на ленинградскую тогда брали...