Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Разработка приложений в среде Delphi. В 2 частях. Часть 2. Компоненты и их использование

Покупка
Артикул: 638060.01.99
Рассмотрены компоненты, используемые при создании интер- фейса приложений; техника работы с текстовой информацией, кноп- ками и переключателями, а также формами, являющимися централь- ной частью любого приложения; создание главного и контекстного меню; подключение к приложению справочной информации. Книга отличается доступностью изложения с содержит большое количество примеров, предназначенных для быстрого освоения основных мето- дов создания приложений различного уровня сложности. Предпола- гается, что читатель знаком со средой программирования языка Object Pascal Delphi и имеет опыт разработки проектов. Для студентов вузов, обучающихся по специальности 230105 - «Программное обеспечение вычислительной техники и автомати- зированных систем», а также для широкого круга читателей, же- лающих приобрести первичные навыки программирования с ис- пользованием среды разработки Delphi 7.
Соколова, Ю. С. Разработка приложений в среде Delphi. В 2 частях. Часть 2. Компоненты и их использование / Соколова Ю.С., Жулева С.Ю. - Москва :Гор. линия-Телеком, 2013. - 142 с.: ISBN 978-5-9912-0188-9. - Текст : электронный. - URL: https://znanium.com/catalog/product/561251 (дата обращения: 19.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
УДК 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;