Разработка приложений в среде Delphi. В 2 частях. Часть 2. Компоненты и их использование
Покупка
Тематика:
Программирование в среде Delphi
Издательство:
Горячая линия-Телеком
Год издания: 2013
Кол-во страниц: 142
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-9912-0188-9
Артикул: 638060.01.99
Рассмотрены компоненты, используемые при создании интер-
фейса приложений; техника работы с текстовой информацией, кноп-
ками и переключателями, а также формами, являющимися централь-
ной частью любого приложения; создание главного и контекстного
меню; подключение к приложению справочной информации. Книга
отличается доступностью изложения с содержит большое количество
примеров, предназначенных для быстрого освоения основных мето-
дов создания приложений различного уровня сложности. Предпола-
гается, что читатель знаком со средой программирования языка
Object Pascal Delphi и имеет опыт разработки проектов.
Для студентов вузов, обучающихся по специальности 230105 -
«Программное обеспечение вычислительной техники и автомати-
зированных систем», а также для широкого круга читателей, же-
лающих приобрести первичные навыки программирования с ис-
пользованием среды разработки Delphi 7.
Тематика:
ББК:
УДК:
ОКСО:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
УДК 681.3.06 ББК 32.97 С59 Р е ц е н з е н т ы : зав. кафедрой «Информационные технологии в экономике» РГАУ им. П.А. Костычева, доктор экон. наук, профессор И.Г. Шашкова; доктор техн. наук, профессор РГУ им. С.А. Есенина В. Н. Ручкин Соколова Ю. С., Жулева С. Ю. С59 Разработка приложений в среде Delphi. В 2 частях. Часть 2. Компоненты и их использование: Учебное пособие для вузов. – 2-е изд., стереотип. – М.: Горячая линия–Телеком, 2013. – 142 с.: ил. ISBN 978-5-9912-0188-9. Рассмотрены компоненты, используемые при создании интерфейса приложений; техника работы с текстовой информацией, кнопками и переключателями, а также формами, являющимися центральной частью любого приложения; создание главного и контекстного меню; подключение к приложению справочной информации. Книга отличается доступностью изложения с содержит большое количество примеров, предназначенных для быстрого освоения основных методов создания приложений различного уровня сложности. Предполагается, что читатель знаком со средой программирования языка Object Pascal Delphi и имеет опыт разработки проектов. Для студентов вузов, обучающихся по специальности 230105 – «Программное обеспечение вычислительной техники и автоматизированных систем», а также для широкого круга читателей, желающих приобрести первичные навыки программирования с использованием среды разработки Delphi 7. ББК 32.97 Адрес издательства в Интернет WWW.TECHBOOK.RU Учебное издание Соколова Юлия Сергеевна, Жулева Светлана Юрьевна Разработка приложений в среде Delphi Компоненты и их использование Учебное пособие Компьютерная верстка Ю. С. Соколовой Обложка художника В. Г. Ситникова Подписано в печать 20.02.2011. Печать офсетная. Формат 60×88/16. Уч. изд. л. 8,875. Тираж 500 экз. (2-й завод 100 экз.) ISBN 978-5-9912-0189-6 ISBN 978-5-9912-0188-9 (Часть 1) © Ю. С. Соколова, С. Ю. Жулева, 2012 © Издательство «Горячая линия–Телеком», 2012
ВВЕДЕНИЕ Учебное пособие является логическим продолжением книги «Раз работка приложений в среде Delphi. Общие приемы программирования». Delphi соединяет визуальные и объектно-ориентированные принципы программирования со средой разработки, давая в итоге разработчику архитектуру многократно используемых компонентов. Это и позволяет ему создавать разного рода приложения Windows. В книге детально рассмотрена работа с компонентами, создание приложений от простейших до сложных, работающих с табличной, списочной, разного рода текстовой информацией, и создание пользовательского меню. Все это не только демонстрирует возможности среды разработки и назначение базовых компонентов, но и раскрывает тонкости технологии программирования в среде Delphi. Важным вопросом, отраженным в пособии, является организация справочной системы, где показано как среда Delphi дает возможность связаться со справочной системой, которую обслуживает операционная система Windows. Также рассмотрена обработка ошибок с помощью механизма исключительных ситуаций. Особенностью книги является наличие вариантов заданий к каж дой теме, апробированных в учебном процессе Рязанского государственного радиотехнического университета.
ГЛАВА 1. ОБМЕН ДАННЫМИ МЕЖДУ ПОЛЬЗОВАТЕЛЕМ И ПРИЛОЖЕНИЕМ 1.1. Общие характеристики редакторов символьной информации Редакторы символьной информации (к которым относятся компо ненты Edit, MaskEdit, SpinEdit, Меmо, RichEdit и др.) позволяют с помощью клавиатуры вводить символьную информацию разнообразного назначения. Все они поддерживают следующие операции по работе с текстом: перемещение по тексту с использованием клавиш управления курсором, удаление символов клавишами <Backspace> и <Delete>, выделение текста, операции с буфером обмена (копирование, удаление, вставку фрагментов текста) и т.д. Большинство редакторов символьной информации являются потомками класса TCustomEdit, в котором определены характеристики (табл. 1.1), используемые в том или ином сочетании в различных редакторах текстов. Таблица 1.1. Общие характеристики редакторов текста Свойство/ метод Описание Общие свойства редакторов символьной информации AutoSelect Свойство логического типа, определяющее, будет ли текст автоматически выделяться при активизации редактора (в момент получения компонентом фокуса ввода). Если имеет значение true, текст будет выделяться AutoSize Свойство логического типа, определяющее, будет ли автоматически изменяться высота редактора (при значении, равном true) в соответствии с размером шрифта BorderStyle Свойство, определяющее вид границы редактора: bsSingle – одинарная граница, bsNone – нет границы CharCase Свойство, определяет регистр символов, которые будут отображаться в поле редактирования ecLowerCase – строчные буквы; ecNormal – без преобразования; ecUpperCase – прописные буквы Ctl3D Свойство логического типа, определяющее, объемное изображение компонента: значение true определяет объемное изображение , false – не объемное Font Свойство применяется для изменения шрифта, используемого при записи текста
Глава 1. Обмен данными между пользователем и приложением 5 Продолжение табл. 1.1 HideSelection Свойство логического типа, определяющее, остается ли выделенный текст таковым после того, как редактор перестанет быть активным (если имеет значение true, то выделение снимается) MaxLength Свойство целого типа, определяющее максимальное число символов, которое можно поместить в редактор. Если значение равно нулю (по умолчанию), ограничений на число символов нет PasswordChar Свойство типа Char, определяющее назначение строки ввода: обычный ввод или ввод пароля. В этом свойстве задается символ, который будет заменять все реально набранные символы в тексте, если редактор используется для задания пароля. Если свойство имеет значение символа с кодом 0 (#0 – используется по умолчанию), вводимые символы не преобразуются, * – введенные символы отображаются *; 0 – введенные символы отображаются нулями Modified Свойство логического типа, определяющее, изменился ли текст с момента создания редактора или последнего момента, когда свойство Modified имело значение false, Если свойство имеет значение true, текст изменился ReadOnly Свойство логического типа, определяющее, можно ли изменять текст редактора. Если свойство имеет значение true, изменять текст нельзя. По умолчанию – false SelLength Свойство целого типа, определяющее длину выделенного текста в символах SelStart Свойство целого типа, определяющее номер первого выделенного символа. Нумерация начинается с нуля. Если текст не выделен, свойство указывает положение курсора в тексте SelText Свойство типа string, содержащее выделенный в редакторе текст, который можно в программе при необходимости отредактировать Общие методы, выполняющие функции редактирования Clear Процедура, удаляющая весь текст, помещенный в редактор ClearSelection Процедура, удаляющая выделенный фрагмент текста CopyToClipboard Процедура, копирующая в буфер Clipboard выделенный фрагмент текста
Разработка приложений в среде Delphi 6 Окончание табл. 1.1 CutToClipboard Процедура, удаляющая из текста выделенный фрагмент и помещающая его в буфер Clipboard PasteFromClipboard Процедура, копирующая текст из буфера Clipboard в то место текста редактора, где расположен курсор SelectAll Процедура, выделяющая весь текст редактора У всех редакторов, за исключением RichEdit, имеется контекст ное меню, содержащие следующие команды: - Undo – отмена последних изменений в тексте; - Cut – вырезать выделенный фрагмент и поместить его в буфер; - Сору – скопировать выделенный фрагмент в буфер; - Paste – поместить фрагмент из буфера в текст, в место располо жения курсора; - Delete – удалить выделенный фрагмент текста; - SelectAll – выделить весь текст. Отметим также событие OnChange, возникающее всякий раз, ко гда изменяется текст (содержимое) редактора. 1.2. Однострочные редакторы символьной информации 1.2.1. Строка редактирования Edit Компонент Edit (вкладка Standard) представляет собой одно строчный текстовый редактор (поле редактирования), который используется для ввода, вывода и редактирования строк. Данный компонент является прямым потомком класса TCustomEdit, поэтому обладает свойствами и методами, рассмотренными ранее в табл. 1.1. Свойство Text является ключевым для компонента, оно содержит отображаемую компонентом строку. Его значение, установленное в инспекторе объектов, будет выведено в компоненте после запуска программы, а данные, введенные в него в процессе работы, обрабатываются Delphi с помощью процедур и функций преобразования (см. ниже). Строки могут быть достаточно длинные. Однако этот компонент не распознает символов конца строки и не может быть использован для работы с несколькими строками. Компонент поддерживает следующие операции по работе с текстом: перемещение по строке с использованием клавиш управления курсором, удаление символов клавишами <Backspace> и <Delete>, операции с буфером обмена. У компонента Edit отсутствует реакция на управляющие клави ши <Enter> и <Esc>. При необходимости программист должен сам кодировать действия, связанные с нажатием клавиши <Enter>. Чаше всего нажатие клавиши <Enter> является признаком окончания ввода ин
Глава 1. Обмен данными между пользователем и приложением 7 формации в поле редактора и необходимости перехода к другому элементу управления, то есть передачи ему фокуса ввода. Рассмотрим пример передачи фокуса управления из разных полей редактирования двумя способами: с использованием свойства ActiveControl формы и с помощью метода SetFocus: пусть информация последовательно вводится в три поля, являющиеся компонентами Edit1, Edit2 и Edit3. При окончании ввода в первое или второе поля по нажатию клавиши <Enter> автоматически активизируем очередное поле редактирования. Из третьего поля фокус передадим кнопке Button1. Данная задача реализуется следующими процедурами: //Обработчик нажатия клавиши <Enter> в поле Edit1 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Form1.ActiveControl:=Edit2; end; //Обработчик нажатия клавиши <Enter> в поле Edit2 procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Edit3.SetFocus; end; //Обработчик нажатия клавиши <Enter> в поле Edit3 procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Button1.SetFocus; end; Обработчики событий нажатия клавиш, например обработчик со бытия OnKeyPress, можно использовать для проверки информации, вводимой в поле редактирования. Так в следующем обработчике реализованы возможности: 1) ограничен набор вводимых символов: в редактор Edit1 можно ввести только действительные числа как положительные, так и отрицательные; 2) в качестве разделителя целой и дробной частей устанавливается символ, определенный в настройках операционной системы; 3) запрещен ввод более одного разделителя в поле редактора;
Разработка приложений в среде Delphi 8 4) знак минус можно ввести только в начале числа, причем только в случае, если его еще нет в поле редактора; 5) в случае неверного ввода символа подается звуковой сигнал. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case Key of '0'..'9',#8: ; //разрешен ввод цифр и нажатие Backspase '.',',': //нажат разделитель целой и дробной части begin if Key<>DecimalSeparator then //заменим разделитель на установленный в ОС Key:=DecimalSeparator; if Pos(DecimalSeparator, Edit1.Text)<>0 then //если разделитель уже имеется в поле Edit1 begin Key:=#0; //запрет ввода Beep; //подача звукового сигнала end; end; '-': if (Edit1.SelStart<>0) or (Pos('-', Edit1.Text)<>0) then //минус нажат не в начале или знак "-" имеется begin Key:=#0; //запрет ввода Beep; //подача звукового сигнала end; else //нажатие прочих символов begin Key:=#0; //запрет ввода Beep; //подача звукового сигнала end; end; end; Замечание. Глобальная переменная DecimalSeparator опреде ляет, какой символ допустим в текущей настройке Windows в качестве разделителя целой и дробной частей. Разделитель разрядов целой и дробной частей установлен в настройках ОС Windows, как правило, по умолчанию это «,». Для изменения можно воспользоваться командой меню Пуск/Настройка/Панель управления/Язык и региональные стандарты, далее вкладка Региональные параметры, кнопка Настройка, поле Разделитель целой и дробной частей. Если необходимо организовать проверку корректности ввода чи словых данных сразу в нескольких компонентах Edit1, Edit2, …, EditN, можно составить отдельную процедуру, выполняющую проверку для компонента типа TEdit, а в программе обращаться к ней из
Глава 1. Обмен данными между пользователем и приложением 9 обработчиков OnKeyPress полей редактирования. Программа, реализующая указанные действия приведена в листинге 1.1. Листинг 1.1. Проверка ввода действительных чисел одной процедурой unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //Проверка корректного ввода символа в компонент типа TEdit procedure Input(Sender: TEdit; var Key: Char); begin case Key of '0'..'9',#8: ; //разрешен ввод цифр и нажатие Backspase '.',','://нажат разделитель целой и дробной частей числа begin if Key<>DecimalSeparator then //заменим разделитель на установленный в ОС Key:=DecimalSeparator; if Pos(DecimalSeparator, Sender.Text)<>0 then //если разделитель уже имеется Key:=#0 //запрет ввода второго разделителя end; '-': if (Sender.SelStart<>0) or (Pos('-', Sender.Text)<>0) then //минус нажат не в начале или знак "-" имеется Key:=#0; //запрет ввода else //нажатие прочих символов Key:=#0 //запрет ввода end;
Разработка приложений в среде Delphi 10 end; //Обработка нажатия клавиши в компоненте Edit1 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin Edit2.SetFocus; Edit2.SelectAll end else Input(Edit1, Key); end; //Обработка нажатия клавиши в компоненте Edit2 procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin Edit3.SetFocus; Edit3.SelectAll end else Input(Edit2, Key); end; //Обработка нажатия клавиши в компоненте Edit3 procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then Button1.SetFocus else Input(Edit3, Key); end; end. Для проверки введенного в редактор текста можно использовать событие OnExit, возникающее при потере элементом фокуса ввода: procedure TForm1.Edit1Exit(Sender: TObject); begin if StrToInt(Edit1.Text)>999 then begin //если ввод не верный формируем сообщение MessageDlg('Повторите ввод', mtError, [mbOK], 0); Edit1.SetFocus; //установка фокуса в Edit1 Edit1.SelectAll; //выделение текста в Edit1 end; end;