Читать книгу: «Программирование на Delphi 7»

Шрифт:

ЛЕКЦИЯ № 1

1. ВВЕДЕНИЕ В ВИЗУАЛЬНЫЙ ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК “DELPHI”

Язык программирования «Делфи» является языком программирования высокого уровня, предназначается для создания 32-х битных высокоскоростных приложений (программ ) под операционную среду Windows. Язык программирования «Делфи» произошел от языка Borland Pascal 7.0 with Objects 7.0 и Turbo Pascal 7.0 for Windows. Языки программирования бывают следующие:


Язык программированияНе визуальныйВизуальный
Низкого уровняAssemblerVisual Assembler
Среднего уровняC++C++ Builder
Высокого уровняBasic, PascalVisual Basic, Delphi

Язык программирования «Делфи» является объектно-ориентированным языком визуального программирования. Визуальное программирование – это высокоскоростной процесс создания программ из готового набора визуальных компонент: кнопок, окон, списков выбора, линий прокруток и др. Процесс визуального программирования заключается в подборе нужных готовых компонент, размещении их на форме, настройки параметров компонент и создании логических связей между ними.

В операционной среде Windows вместо слова “программа” используется его синоним – “приложение”. Приложение Windows состоит из одного или нескольких окон. Каждое окно состоит из формы (“пустого окна”) и компонент на ней.

При визуальном программировании программист, как архитектор, берет пустой “холст” (форму), выбирает из палитры компонент нужные “кирпичики” (компоненты), подгоняет форму каждого кирпичика под нужный замысел через Инспектор объектов, после чего связывает все кирпичики в единое целое с помощью Редактора кода.

Для запуска системы программирования “Делфи” необходимо в Windows нажать кнопку «Пуск» и в появившемся меню выбрать «Borland Developer Studio 2006 | Turbo Delphi». После выполнения данной команды запустится компилятор «Делфи» вместе с визуальной средой разработки приложений. На рис. 1 и рис 2 показано расположение основных элементов среды программирования «Делфи».

Главное окно программы {1} является основным окном «Делфи». При его закрытии работа с «Делфи» прекращается, т.е. закрытие данного окна эквивалентно команде выхода. Окно формы приложения {2} – это графический «холст», на котором программист наносит нужные ему визуальные компоненты. Визуальные компоненты {8} располагаются в так называемой Палитре компонент {7}.

После нанесения на окно формы нужных компонент (из палитры) программист настраивает (конфигурирует) каждый выбранный компонент с помощью окна Инспектора объектов {4}. Окно Инспектора объектов позволяет каждому компоненту установить нужный размер, цвет, местоположение на форме и др.

После конфигурирования визуальных компонент их необходимо связать между собой в единое целое для получения готовой программы. Связывание компонент осуществляется с помощью Окна кода программы {3}. В данном окне пишутся операторы языка «Делфи», заимствованные с языка Pascal. После связывания компонент программа готова к компиляции и выполнению.

Для запуска готовой программы, вызова справки помощи, выхода из «Делфи» и др. служит Основное меню «Делфи» {5}. Наиболее часто используемые опции Основного меню продублированы кнопками быстрого доступа {6}. Нажатие на какую-либо кнопку быстрого доступа эквивалентно выбору соответствующего пункта Основного меню.

Любая программа на Делфи сохраняется на жестком диске компьютера в виде многих файлов. Для разных программ имена файлов могут совпасть, что приведет к их разрушению. Поэтому для каждой программы «Делфи» необходимо создавать свой каталог и в нем ее сохранять после завершения работы с «Делфи».

рис. 1

Обозначения:

1 – главное окно

2 – окно формы приложения (программы)

3 – окно кода программы

4 – окно инспектора объектов

5 – основное меню «Делфи»

6 – пиктографические кнопки быстрого к опциям основного меню

7 – палитра компонент

8 – визуальные компоненты

рис. 2

2. ПРИМЕР ПРОСТЕЙШЕЙ ПРОГРАММЫ В «ДЕЛФИ»

Рассмотрим в качестве примера задачу решения квадратного уравнения. Для этого на форму нужно поместить пять компонент типа «Edit», два компонента «Label» и одну кнопку «Button». Процедура для кнопки будет иметь следующее содержание:

procedure TForm1.Button1Click(Sender: TObject);

 var a,b,c,d,x1,x2: real; // Описание внутренних переменных

begin // Начало процедуры

try // Начало защищенного блока

  a:=strtofloat(Edit1.text); // Считываем данное «a»из визуального компонента «Edit1»

  b:=strtofloat(Edit2.text); // Считываем данное «b» из визуального компонента «Edit2»

  c:=strtofloat(Edit3.text); // Считываем данное «c» из визуального компонента «Edit3»

  d:=b*b-4*a*c; // Находим дискриминант

  x1:=(-b+sqrt(d))/(2*a); // Находим первый корень

  x2:=(-b-sqrt(d))/(2*a); // Находим второй корень

  Label1.caption:=floattostr(x1); // Загружаем «x1» в визуальный компонент «Label1»

  Label2.caption:=floattostr(x2); // Загружаем «x2» в визуальный компонент «Label2»

except // Начало секции обработки ошибок защищенного блока

  showmessage('Ошибка! Нет решения.'); // Выдача окна-сообщения на экран

end; // Конец защищенного блока

end; // Конец процедуры «Button1Click»

ЛЕКЦИЯ № 2

1. ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ “DELPHI”

Основное меню языка программирования «Делфи» предназначается для интерактивного создания, отладки и сохранения программ. Опции основного меню располагаются в основной горизонтальной части меню и в вспомогательных выпадающих подменю. Наиболее частые используемые опции меню продублированы кнопками быстрого доступа.

В языке программирования «Делфи» создаваемые приложения называются «проектами», т.о. слова «программа», «приложение» и «проект» можно считать синонимами.

Приложение «Делфи» состоит из файла проекта (с расширением «DPR») и подключаемых к файлу проекта модулей (с расширением «PAS»). Файл проекта служит для связывания модулей в единое целое и их активизации. Каждый модуль является либо обычным модулем, как и в языке PASCAL, либо модулем-формой со специальной структурой. Модуль-форма со специальной структурой использует файл с расширением «DFM» и является программной реализацией формы (окна) приложения. В служебном файле с расширением «DFM» хранится перечень компонент формы с их характеристиками и параметрами (положение на форме, размеры, цвет и др.), а в основном файле с расширением «PAS» хранятся процедуры-обработчики и функции данного окна (процедуры обработки нажатия на кнопки окна, процедуры закрытия окна и т.д.). При создании, например, приложения с двумя окнами будут получены 6 файлов: “Project1.dpr, Project1.res, Unit1.pas, Unit1.dfm, Unit2.pas, Unit2.dfm”.

Для корректного сохранения приложения его необходимо записывать в отдельный каталог диска, должно соблюдаться правило: “каждому приложению – свой каталог”.

2. ОСНОВНЫЕ ОПЦИИ DELPHI

FILE – опции работы с файлами

New Application – создание нового проекта (программы);

New Form – создание новой формы (окна);

Open – открытие формы или модуля;

Open Project – открытие проекта;

Reopen – открытие раннее открывавшегося приложения;

Save – сохранение формы или модуля на диске;

Save As – сохранение формы или модуля под другим именем;

Save Project As – сохранение проекта под новым именем;

Save All – сохранение всех редактируемых файлов проекта;

Close-закрыть текущее окно;

Close All – закрыть все редактируемые окна проекта;

Exit – выход из программы «Делфи»;

EDIT – опции редактирования

Undo – отмена последнего изменения по удалению, вставки и т.п.;

Redo – отмена команды «Undo»;

Cut – удаление выделенного текста или компонента в буфер;

Copy – копирование в буфер выделенного текста или компонента;

Paste – вставка из быфера текста или компонента;

Delete – удаление выделенного текста или компонента;

 SEARCH – опции поиска

Find – поиск заданного фрагмента текста;

Replace – поиск заданного фрагмента текста с заменой;

Search Again – продолжение поиска или поиска с заменой

VIEW – опции просмотра

Object Inspector (клавиша F11) – показывает окно Инспектора объектов на экране;

Toggle Form /Unit (клавиша F12) – переключает активность из окна формы в окно кода программы и обратно;

Units – показывает окно модулей проекта;

Forms – показывает окно форм проекта;

PROJECT – опции управления проектом

Add to Project – добавляет файл к проекту;

Remove From-Project – удаляет файл из проекта;

View Source – показывает окно кода проекта;

Complete Project (клавиша Ctrl + F9, проверка ошибок в программе) – компилирует измененные модули проекта и создает EXE-файл;

Build Project – компилирует все модули проекта и создает EXE-файл;

RUN – опции компиляции и запуска программ

Run (клавиша F9) – компилирует измененные модули проекта, создает EXE-файл и запускает приложение на выполнение;

HELP – опции вызова помощи и справочных данных

Contends (клавиша F1) – вызов справочной службы «Делфи»;

3. ОТЛАДКА ПРОГАММЫ DELPHI

Для отладки программы на «Делфи» необходимо проделать следующее:

Установить точку остановки. Для этого нужно щелкнуть слева от текста в окне кода программы на первом отлаживаемом операторе. Появится красная точка и полоска, указывающая на установку точки остановки. Снятие точки остановки происходит аналогичным образом.

Запустить программу, например нажав клавишу клавиатуры «F9» и подождать, пока она остановиться на точке остановки.

Нажатие клавиши клавиатуры «F8» вызовет выполнение одного следующего оператора программы без захода в подпрограммы, а нажатие на клавишу «F7» вызовет выполнение одного следующего оператора с заходом в подпрограммы, если они есть.

Нажатие клавиш «F8» или «F7» нужно производить столько раз, пока программа не перейдет на нужный оператор (об этом можно судить по специальному синему курсору трассировки с зеленой стрелочкой).

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

После просмотра значений переменных нужно вновь нажать на кнопку запуска «F9» для обычного продолжения хода выполнения программы.

4. МЕТОДЫ, СОБЫТИЯ И МЕТОДЫ В DELPHI

Каждый компонент в «Делфи» имеет свои свойства, события и методы. Свойства компонента определяют положение компонента на экране, его цвет, размеры и др. Свойства характеризуют все параметры компонента, их можно задавать и смотреть через Инспектор Объектов, а также через код программы. Через свойства программа узнает, что ввел пользователь в компонент, в какое место экрана переместил окно и др.

Переменная := Имя_компонента . Имя_Свойства ;

S:=Edit1.text; k:=strtoint(Edit1.text);

Имя_компонента . Имя_Свойства := Переменная_или_константа ;

Edit1.text:=inttostr(k); Form1.Caption:=’Delphi’;

События компонента – это его реакция на различные воздействия пользователя или какую-либо программную ситуацию. Наиболее распространенные события у компонент – это событие щелчка левой кнопки мыши по компоненту, событие двойного щелчка мышью по компоненту, событие перемещения указателя мыши над компонентом, событие ввода данных с клавиатуры в компонент, событие появления компонента на экране, событие изменения размеров у компонента и др.

Каждое событие компонента обрабатывается специальной процедурой, называемой процедурой -обработчиком события. Процедуры обработчики создаются через Инспектор Объектов (для привязки пустой процедуры – обработчика к конкретному событию) и Инспектора Кода (в котором программист вписывает нужные команды в пустую процедуру – обработчик). Написание процедур – обработчиков событий является основной частью создания программного продукта на «Делфи». Другую часть времени программист тратит на создание интерфейса программы, ее доработку и тестирование.

Методы компонента – это команды, которые имеет данный компонент. Методы бывают двух типов: методы-процедуры и методы-функции. Через методы программист «просит» компоненты сделать то или иное действие с самим собой. Например, у формы (окна) можно попросить закрыться или открыться, переместится по экрану. У компонента «TMemo» (текстового редактора) – можно попросить сбросить введенный пользователем в него текст на диск, или попросить очистку окна редактирования. Методы вызываются из обработчиков событий как обычные команды, например «begin memo1.Clear; end;» – «просим» компонент «Memo1» очистить окно ввода.

Имя_компонента . Имя_Метода_Процедуры (возможные параметры) ;

Form1.Show; Form1.Close; Edit2.SetFocus;

Переменная := Имя_компонента . Имя_Метода_Функции (возможные параметры) ;

f:=Edit2. CanFocus; if f=false then Edit2.SetFocus;

Для привязки к компоненту обработчика какого-либо события необходимо выделить его мышью, в Инспекторе Объектов перейти во вкладку «Events/События», выбрать нужное событие и дважды щелкнуть мышью в пустую ячейку напротив него. В появившейся процедуре необходимо написать код обработчика данного события.

Для установки одновременно какого-либо свойства у нескольких компонент необходимо выделить их мышью в охватывающий четырехугольник, после чего в Инспекторе Объектов задать нужное значение нужному общему свойству.

Для точного расположение компонента по центру на форме можно вызвать для него вспомогательное меню правой кнопкой мыши и выбрать пункт «Align». Для настройки правильной работы клавиши «Tab» (обхода фокуса ввода) выберете пункт «TabOrder» во вспомогательном меню.

Фокус ввода – это специальный графический курсор, показывающий, в какой компонент будут вводиться данные с клавиатуры, а также показывающий, какой компонент будет активизирован при нажатии клавиши «Enter» или клавиши «Пробел».

ЛЕКЦИЯ № 3

1. ЭЛЕМЕНТЫ ЯЗЫКА, СТРУКТУРА ПРОГРАММЫ И МОДУЛЕЙ

Программа на языке «Делфи», как ранее было отмечено, состоит из файла проекта (файла с расширением «DPR») и одного или нескольких модулей (файлы с расширением «PAS»). Файл проекта создается и модифицируется «Делфи» автоматически, и вручную изменять его нельзя. Чтобы увидеть файл проекта нужно вызвать опцию основного меню «PROJECT | VIEW SOURCE». Рассмотрим подробно содержимое примерного файла проекта.

Рис. 3.1. Структура файла проекта

Обозначения:

1 – зарезервированное слово

2 – комментарии

3 – директивы компилятора

4 – имя программы (проекта)

5 – имя подключаемого модуля

6 – имя файла, в котором находится подключаемый модуль

7 – операторы проекта

8 – команда инициализации проекта (загрузки программы в операционную среду Windows, настройка внутренних системных переменных и др.)

9 – команда создания на экране окна (формы) с именем «FORM1»

10 – передача управления проекту

Любой модуль в языке «Делфи» имеет структуру, аналогичную структуре модулей в языке PASCAL. Рассмотрим общую структуру модулей «Делфи».

Рис. 3.2. Общая структура модуля

Обозначения:

1 – имя модуля

2 – зарезервированное слово

3 – секция интерфейсных объявлений, в которой описываются программные элементы (типы данных переменные, процедуры и функции), которые будут «видимы» другим программным модулям и проектам, использующих данный модуль

4 – секция реализации, в которой непосредственно находятся тексты процедур и функций модуля

Рассмотрим модуль «Делфи», описывающий форму (окно) с одной кнопкой.

Рис. 3.3. Структура модуля-окна «Делфи»

Обозначения:

1 – имя модуля

2 – имена используемых в данном модуле других модулей

3 – тип «Tform1» является потомком пустого Windows-окна типа «TForm». Тип «Tform1» дополняет родительский тип «TForm» кнопкой с именем «Buttom1» и одной процедурой «Button1Click» по обработке нажатия на данную кнопку

4 – перечень компонент окна (объектов, переменных, процедур и функций)

5 – переменные, «видимые» только в данном типе «Tform1» (окне «Form1»), и не видные в других модулях (окнах), использующих данный модуль

6 – переменные, «видимые» и в типе «Tform1» (окне «Form1»), и в других модулях (окнах), использующих данный модуль

7 – описание переменной-объекта «Form1» типа «Tform1», объявленного в разделе «Type»

8 – подключение ресурсного файла с данными о компонентах окна «Form1» (положение компонент на экране, их размер, цвет и др.)

9 – текст-реализация раннее описанной процедуры

Элементы программы – это неделимые части программы, а именно зарезервированные слова, идентификаторы, типы, константы, переменные, метки, подпрограммы (процедуры и функции) и комментарии. В языке «Делфи» все элементы программ совместимы с языком PASCAL сверху – вниз, т.о. все типы данных, операторы и операции, имеющиеся в PASCALе, доступны и в «Делфи».

ЛЕКЦИЯ № 4

1. ОСНОВНЫЕ ТИПЫ ДАННЫХ В «ДЕЛФИ»

Любые данные в «Делфи», как и в языке PASCAL, характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь данное, а также множество применимых к нему операций. Рассмотрим целые типы данных «DELPHI».


ТипДиапазон значенийФизический формат
Byte (B)0 .. 255 1 байт, без знака
Word (W)0 .. 65 535 2 байт, без знака
Integer (I)-2 147 483 648 .. 2 147 483 647 4 байт, со знаком
Cardinal 0 .. 2 1474836474 байт, без знака
Shortint (S)-128 .. 1271 байт, со знаком
Smallint -32 768 .. 32 767 2 байт, со знаком
Longint (L)-2 147 483 648 .. 2 147 483 647 4 байт, со знаком
LongWord 0 .. 4 294 967 2954 байт, без знака
Int64-9E18 .. 9E188 байт, со знаком

Табл. 1. Целые типы

Для целых типов применимы следующие стандартные процедуры и функции.


ОперацияОписание
Функции
Abs (X)Модуль числа X
Chr (B)Возвращает символ по его коду B
Hi (W)Возвращает старший байт аргумента W
Lo (W)Возвращает младший байт аргумента W
Odd (L)Возвращает «TRUE», если аргумент W нечетный
Random (W)Возвращает целое случайное число от 0 до W-1
Sqr (X)Возвращает квадрат аргумента W
Sqrt (X)Возвращает квадратный корень аргумента W
Х Div YВозвращает целую часть частного деления Х на Y Х
Х Mod YВозвращает остаток частного деления Х на Y
Процедуры
RandomizeИнициализирует генератор случайных чисел
Swap (W)Меняет местами байты в слове W
Dec (X)Уменьшает значение переменной X на единицу
Inc (X)Увеличивает значение переменной X на единицу
Примечание: X-любой из целых типов, B-байт и т.д.

Табл. 2. Процедуры и функции для целых типов

Рассмотрим на примере перечисляемые типы.

Type TMonth=(Jan, Feb, Mar);

Var Month: tMonth;

Begin

      If Month=Feb then label1. Caption: =’февраль’;

      If Rred (Feb)=Jan then showmessage (‘Перед февралем идет январь, и это правильно.’);

     If Succ (Feb)=Mar then showmessage (‘После февраля идет март, и это верно!’);

End;

Type TMonth=(Jan, Feb, Mar);

Var month: tMonth; c: byte;

Begin

    For month := Jan to Mar do showmessage(inttostr(byte(month)));

    For month := Jan to Mar do showmessage(inttostr(ord(month)));

    For c := byte(Jan) to byte(Mar) do showmessage(inttostr(c));

End;

Рассмотрим на примере логические и символьные типы.

Var L: Boolean; { Описываем логический тип }

       C: Char; { Описываем символьный тип }

Begin

       L: = true; C: =’ %‘;

       If chr(C)>12 then C:=’$’;

       C:=chr(ord(C));

       L:=true;

       If not L then exit;

End;

5. Рассмотрим на примере ограниченный тип.

Var date: 1..31; digit:’0’..’9’;

        Month: 1..12;

Var c: byte; s: char;

Begin

   For c: =Low(date) to High(date) do showmessage(inttostr(c));

   For s: =Low(digit) to High(digit) do showmessage(s);

End;

Рассмотрим вещественные типы и стандартные функции для них.


ТипРанг значенийКол-во значащих цифрРазмер в байтах
Real5.0 x 10^–324 .. 1.7 x 10^30815–168
Single1.5 x 10^–45 .. 3.4 x 10^387–84
Real482.9 x 10^–39 .. 1.7 x 10^3811–126
Double5.0 x 10^–324 .. 1.7 x 10^30815–168
Extended3.6 x 10^–4951 .. 1.1 x 10^493219–2010
Comp–2^63+1 .. 2^63 –1 (только целые)19–208
Currency–922337203685477.5808 .. 922337203685477.5807 (четыре знака п.з.)19–208

Табл. 3. Вещественные типы


ФункцияВозвращаемое значение
Abs (x) Абсолютная величина х
Cos (х)Косинус х (х выражается в радианах, а не в градусах)
Sin(x) Синус х
Frac(x)Дробная часть х (откидывается запитая и цифры перед ней)
Int (х)Целая часть х. Несмотря на название, возвращает действительное значение (с плавающей запятой), т.е. просто устанавливает нуль в дробной части
Тrunc (х)Целая часть х. В отличие от Int, возвращающей действительное значение, Trunc возвращает целое значение
Ехр (х) Экспоненциальная функция от х
Ln (х) Натуральный логарифм от х
АгсТаn (х) Арктангенс х
Pi Число Пи (3.1416…)
Round (х) Ближайшее к х целое значение. Возвращает значение целого типа
Sqr(x)Квадрат х, т.е. X*X
Sqrt (х)Квадратный корень от х

Табл. 4. Функции действительных типов

6. Рассмотрим строковые типы.

Var

        Sss: String[150]; // Короткая строка до 150 символов (максимум 255 символов)

        SsMax: ShortString ; // Короткая строка до 255 символов

        Str: String; // Длинная строка неограниченной длины

Begin

  Sss := ‘строка символов’;

  Sss [6] := ‘и’; // получится ‘строки символов’;

  SsMax := ‘12345’;

  Str:=Sss;

  If length (Str) > 3 then Str:= Str + SsMax;

End;


ФункцияОписание
Процедуры
Delete (s, pos, len)Удаляет максимум len символов из строки s, начиная с позиции pos
Insert (sourse, tar-get, pos)Вставляет строку source в строковую переменную target, начиная с позиции pos
SetLength (s, newlen)Задает новую динамическую длину newlen строковой переменной s
Str (x, s)Преобразует численное значение х в строковую переменную s
Val (s, v, code)Преобразует строку s в соответствующее численное представление v


Функции
Concat (sl, s2, s3)Возвращает последовательное соединение строк. Эквивалентно оператору sl+s2+s3
Copy (s, pos, len)Возвращает подстроку длиной максимум len символов, начинающуюся в позиции pos строки s
Length (s)Возвращает динамическую длину строки
Pos (substring, s)Возвращает место первого вхождения подстроки substring в строку s
StringOfChar (c,k)Возвращает строку из символа “c” с длиной в “k” символов
StrToInt (s)Преобразует строку s в соответствующее целочисленное значение
StrToFloat (s)Преобразует строку s в соответствующее вещественное значение
IntToStr (x)Преобразует целочисленное значение х в строковую переменную
FloatToStr (x)Преобразует вещественное значение х в строковую переменную
AnsiUpperCase (s)Преобразует все буквы строки s в заглавные
AnsiLowerCase (s)Преобразует все буквы строки s в строчные

Табл. 5. Процедуры и функции строковых типов

ЛЕКЦИЯ № 5

1. ОСНОВНЫЕ СВОЙСТВА КОМПОНЕНТ (положение, размеры, оформление, курсор)

Все стандартные компоненты «DELPHI» имеют некоторые общие свойства. Рассмотрим их в следующей таблице.


СвойствоНазначение
NameИмя компонента (подобно описанию переменных в языке Pascal)
LeftПоложение координаты X верхнего левого угла
TopПоложение координаты Y верхнего левого угла
WidthШирина компонента
HeightВысота компонента
CursorВид курсора (форма рисунка) мыши над компонентом
VisibleВидимость компонента. Если равно False, то компонент невиден на форме (экране)
EnabledДоступность компонента. Если равно “False”, то компонент нельзя выбрать мышью или ввести в него данные с клавиатуры
ColorЦвет компонента (фона)
Caption (text)Текст на компоненте (его значение)
FontФонт (цвет, размер, начертание) текста на компоненте
Font.ColorЦвет текста в компоненте
AligmentВид выравнивания текста на компоненте (влево, вправо, по центру)
ReadOnlyЗапрещение изменения текста (если равно “False”) компонента во время выполнения программы
TagЦелочисленная переменная для свободного использования
HintЗначение текста-ярлычка компонента
ShowHintРазрешение (если равно “True”) показа на экране ярлычка компонента
PopupMenuПривязка вспомогательного меню, вызываемого нажатием правой кнопки мыши на компоненте

2. РЕАКЦИИ НА СОБЫТИЯ ОТ МЫШИ И КЛАВИАТУРЫ (основные события)


Событие Назначение
OnClickФакт простого щелчка левой кнопкой мыши по компоненту
OnDblClickФакт двойного щелчка левой кнопкой мыши по компоненту
OnChangeФакт изменения данных (текстовых) в компоненте
OnMouseDownФакт нажатия на левую кнопку мыши
OnMouseUpФакт отжатия левой кнопки мыши
OnMouseMoveФакт перемещения курсора мыши над компонентом
OnKeyDownФакт нажатия на какую-либо клавишу клавиатуры при фокусе на компоненте
OnKeyUpФакт отжатия на какую-либо клавишу клавиатуры при фокусе на компоненте
OnKeyPressФакт нажатия на какой-либо алфавитно-цифровой символ
OnEnterФакт установки фокуса ввода на компоненте
OnExitФакт выхода фокуса ввода из компонента

3. НАИБОЛЕЕ ЧАСТО ИСПОЛЬЗУЕМЫЕ МЕТОДЫ КОМПОНЕНТ


МетодНазначение
Процедуры
CreateСоздает компонент в памяти компьютера (обычно это делает сам «Делфи»)
DestroyУничтожает компонент из памяти компьютера (обычно это делает сам «Делфи»)
ShowПоказывает компонент на экране
ShowModalПоказывает компонент на экране в модальном режиме (поверх всех окон)
Hide / CloseПрячет (закрывает) компонент с экрана
SetFocusУстанавливает фокус ввода на данный компонент (например, “Edit1.SetFocus”)
RefreshОбновляет компонент на экране (его внешний вид или содержимое)
Функции
CanFocusВыдает «True», если компонент может иметь фокус ввода (т.е. если он не заблокирован)
FocusedВыдает «True», если компонент имеет фокус ввода



4. ОСНОВНЫЕ КОМПОНЕНТЫ СТРАНИЦЫ «STANDARD» (стандартные)

Стандартные компоненты Delphi наиболее часто используются в написании программ под операционную систему «Winows». Рассмотрим основные из них.

Курсор – это не компонент, а кнопка отмены выбора какого-либо компонента. На данную кнопку можно нажать для отмены выбора компонента из палитры.

TMainMenu позволяет создавать главное меню в программе. Создание меню включает три шага: (1) помещение TMainMenu на форму, (2) вызов Дизайнера Меню через свойство Items в Инспекторе Объектов, (3) определение пунктов меню в Дизайнере Меню. Основные свойства опций меню при определении пунктов:

Caption – текст опции меню, например «&Файл» или «-» (для создания горизонтальной линии)

Checked – если равно «True», то напротив опции, слева, появляется галочка

Default – если равно «True», то опция выделяется жирным цветом

Break – позволяет создавать многоколоночное выпадающее меню

ShortCut – позволяет назначить быструю клавишу (типа “Ctrl+Q”) для вызова данной опции


Создание в меню дополнительных подменю, а также вставка и удаление опций производится через вспомогательное меню, вызываемое правой кнопкой мыши над нужной опцией.

TPopupMenu позволяет создавать всплывающие меню, вызываемые по щелчку правой кнопки мыши на компоненте-хозяине. У всех видимых объектов имеется свойство PopupMenu, где и указывается нужный (ранее созданный) компонент типа TPopupMenu. Создается компонент PopupMenu аналогично главному меню и имеет те же свойства и события.

TLabel служит для отображения строки текста (метки) на экране. Основные свойства (не считая ранее описанных общих свойств) следующие:

AutoSize – если «True», то высота и ширина метки подбирается автоматически, по размеру текста в ней

Transparent – если «True», то собственный цвет фона метки игнорируется, становится прозрачным

WordWrap – если «True», то текст надписи может быть перемещен на следующую строку в надписи, т.е. разрешение многострочной надписи

LayOut – установка выравнивание текста надписи во вертикали (вверху, внизу, по центру)

Label1.caption:=’Привет’; Label1.caption:=’x1=’+inttostr(x1)+’ x2=’+inttostr(x2);

TEdit – простейший однострочный текстовый редактор. Данный компонент используется для ввода и вывода однострочных числовых и символьных данных. Основные свойства следующие:

MaxLength – число, определяющее максимальное количество символов, которое можно ввести в компонент

Text – в данном свойстве хранится текст вводимого текста

AutoSelect – автоматическое выделение текста в компоненте при получении фокуса ввода

BorderStyle – позволяет включать и отключать рамку у компонента

CharCase – включает автоматическое преобразование вводимых букв к верхнему регистру, к нижнему, или отключает данную возможность

Ctl3D – если “False”, то выключается объемный вид рамки компонента (рамка становится плоской)

{!!!} При вводе или изменении данных в компоненте у него возникает событие «OnChange»

Edit1.text:=’Нет решения’; Edit1.text:=formatfloat (‘### ##0.00’,k);

TMemo – простейший многострочный текстовый редактор, напоминающий компонент TEdit. С помощью данного компонента можно вводить и выводить большой многострочный текст, причем TMemo умеет автоматически переносить слова в больших предложениях, умеет сохранять и считывать информацию из файлов и буфера обмена. Основные свойства следующие:

Lines – в данном свойстве хранится весь текст, отображаемый на экране и вводимый в компонент

ScroolBars – определяет, какие линии прокрутки должны быть видимы у компонента (вертикальная, горизонтальная, обе, никакие)

Memo1.clear; // Очистка текста в компоненте

Memo1.Lines.Add(‘Ответ:’); // Добавление в конец компонента текста

Memo1.Lines.Add(’x1=’+inttostr(x1));

Tbutton – программная кнопка. Данная кнопка позволяет выполнить какие-либо действия при ее нажатии во время выполнения программы. Основные свойства следующие:

Cancel – если «True», то нажатие на клавишу «Esc» эквивалентно обыкновенному нажатию на кнопку щелчком мыши

Default – если «True», то нажатие на клавишу «Enter» эквивалентно обыкновенному нажатию на кнопку щелчком мыши

TCheckBox отображает строку текста рядом с маленьким окошком. В окошке можно ставить и убирать «галочку», отметку, которая означает, что что-то выбрано или не выбрано. Например, если напротив окошка находится надпись «Вы имеете детей?», то установка «галочки» означает положительный ответ. «Галочка» устанавливается с помощью щелчка левой кнопки мыши или клавиши «пробел» на клавиатуре. Основные свойства rкомпонента следующие:

Checked – если равно «True», то опция выбрана (стоит галочка)

If Checkbox1.Checked=true then edit1.text:=’Женат’ else edit1.text:=’Не женат’;

TRadioButton отображает строку текста рядом с маленьким окошком. В окошке можно поставить отметку в виде «точки», которая означает, что что-то выбрано, или не выбрано. Компонент TRadioButton не используется в одиночку, а всегда входит в какую-либо группу из подобных компонент. Все компоненты TRadioButton работают в группе согласовано, а именно таким образом, что установить «точку» можно только в одном из них. При выборе нового компонента из группы «точка» перемещается из ранее выбранного компонента в новый. Основные свойства компонента следующие:

Checked – если равно «True», то опция выбрана (стоит галочка)

If RadioButton.Checked=true then showmessage(‘Ответ правильный’);

TListBox – прокручиваемый список. Данный список представляет собой небольшое окошко с перечнем значений в виде вертикального столбика. В качестве значений могут быть имена файлов, фамилии сотрудников и т.п. Основные свойства компонента следующие:

Items [..] – в данном свойстве задается текст перечня списка

ItemIndex – данное свойство показывает (или устанавливает) номер выбранной строки у компонента. Отсчет ведется с верха и нуля

Sorted – если равно “True”, то строки списка сортируются по алфавиту

Columns – задает количество столбцов в списке (по умолчанию один столбец)

{!!!} При выборе данных в компоненте у него возникает событие «OnClick»

with listbox1 do begin

case itemindex of

–1: s:=’данные не выбраны’;

0: s:=’да’;

1: s:=’нет’;

else s:=’нет данных’;

end;

edit1.text:=s;

end;

TComboBox – это гибрид из компонента TListBox и компонента TEdit. Данный компонент представляет собой однострочный редактор, в который можно ввести данные, как с клавиатуры, так и из списка значений, вызываемого небольшой кнопкой в правой части компонента. После выбора значения из списка его можно отредактировать или выбрать новое. Основные свойства компонента следующие:

Items [..] – в данном свойстве задается текст перечня списка

ItemIndex – данное свойство показывает (или устанавливает) номер выбранной строки у компонента. Отсчет ведется с верха и нуля

Sorted – если равно “True”, то строки списка сортируются по алфавиту

Columns – задает количество столбцов в списке (по умолчанию один столбец)

{!!!} При выборе данных в компоненте у него возникает событие «OnChange»

{!} Пример как в «ListBox»

TScrollbar – полоса прокрутки. Данный компонент предназначен для визуального изменения значения числовой величины, а также для прокручивания изображения (текста) в окнах программы. Для изменения значения необходимо щелкать мышью на левую пиктограммку или правую на кнопке компонента Tscrollbar. Основные свойства компонента следующие:

Min – максимальное значение величины

Max – минимальное значение величины

Position – текущее установленное (выбранное) значение величины

SmallChange – шаг наращивания величины при ее изменении с помощью стрелок клавиатуры


LargeChange – шаг наращивания величины при ее изменении с помощью клавиш «PgUp» и «PgDn»

ScrollBar1.Min:=-10; ScrollBar1.Max:=100; ScrollBar1.Position:=12; k:= ScrollBar1.Position;

TGroupBox – обрамляющая рамка с надписью в верхнем левом углу. Данный компонент предназначен для визуальной группировки компонент внутри себя и обычно служит для внешнего оформления программы.

TRadioGroup – компонент, аналогичный TGroupBox, и используется не только для целей дизайна, но и для объединения компонент TRadioButton в единую функциональную группу. Основные свойства компонента следующие:

Items [..] – в данном свойстве задается текст перечня элементов типа «TradioButton»

ItemIndex – данное свойство показывает (или устанавливает) номер выбранной строки у компонента. Отсчет ведется с верха и нуля

Columns – задает количество столбцов в списке (по умолчанию один столбец)

{!} Пример как в «ListBox»

TPanel – обрамляющая рамка («плоскость») с надписью в центре. Данный компонент аналогичен компоненту TGroupBox, и отличается от него выпуклым и объемным видом. Основные свойства компонента следующие:

Bevellnner и BevelOuter – задают вид рамки (выпуклая, вогнутая, прозрачная)

BevelWitdh –размер толщины рамки

{!} Если у панели выключить видимость (Panel1.vsible:=false), то все компоненты, расположенные на ней, также станут невидимыми. При включении видимости (Panel1.vsible:=true) они вновь появятся на экране.


Если Вам нужна дополнительная информация по какому-либо компоненту, то выберите его на Палитре Компонент и нажмите клавишу F1 – появится Справочник с полным описанием всех свойств, событий и методов данного объекта.

ЛЕКЦИЯ № 6

1. ОСНОВНЫЕ КОМПОНЕНТЫ СТРАНИЦЫ «ADDITIONAL» (дополнительные)

Страница «Additional» служит основным дополнением к странице «Standard». В данной вкладке размещены компоненты, позволяющие создавать более красивый пользовательский интерфейс программы, а также некоторые системные компоненты.

Список компонент:

TBitBtn – кнопка, подобная TButton, но на ней можно разместить, помимо надписи, еще и картинку (glyph). TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующий вид и надпись.

Kind – выбор предопределенного рисунка и надписи на кнопке («No», «Ok», «Help» и др.)

Glyph – выбор собственной картинки для кнопки

LayOut – выбор типа взаимного расположения рисунка и текста на кнопке (рисунок слева – текст справа, рисунок сверху – текст снизу и др.)

TSpeedButton – так называемая «кнопка быстрого доступа». Компонент TSpeedButton может иметь и надпись, и рисунок, а также режим «втопленности» и прозрачности «flat», при котором кнопка становится видимой только в момент наведения на нее указателя мыши.

GroupIndex – задание условного номера (целого числа) для объединения компонент TSpeedButton в единую функциональную группу. Если свойство равно нулю, то кнопка считается независимой и не входящей в какую-либо группу

Down – если “True”, то кнопка оказывается визуально нажатой, т.е. «втопленной». Данный режим работает, если кнопка входит в какую-либо функциональную группу (определяемую свойством «GroupIndex»)

Flat – включает (если «True») «эффект дружеского приветствия» кнопки

Glyph – выбор собственной картинки для кнопки

Transparent – включает (если «True») «прозрачность» фона кнопки

TMaskEdit - аналог TEdit, но с возможностью форматированного ввода. Формат определяется в свойстве EditMask. В редакторе свойств для EditMask есть заготовки некоторых форматов: даты, валюты и т.п. Спец. символы для маски можно посмотреть в Helpe.

EditMask – значение шаблона (маски) для ввода данных (например, “!999;1;_” – для ввода целого числа из одного до трех цифр, “!#999.99;1;0” – для ввода вещественного числа типа «-123.45»)

EditText – значение введенных данных, приведенных к заданному шаблону (маске)

IsMasked – если “True”, до маска была заданна (свойство только для чтения)

{!!!} При вводе данных в компонент у него возникает событие «OnChange»

TStringGrid - служит для представления текстовых данных в виде таблицы. Доступ к каждому элементу таблицы происходит через свойство Cells. Данный компонент является визуальным аналогом многомерного массива в языке Pascal

ColCount – количество колонок в таблице (отсчет с 1)

RowCount – количество строк в таблице (отсчет с 1)

FixedRows – количество титульных (зафиксированных ) верхних строк в таблице (отсчет с 1)

FixedCols – количество титульных (зафиксированных ) левых столбцов в таблице (отсчет с 1)

LeftCol – номер первого отображаемого столбца таблицы, не считая фиксированных (отсчет с 1)

TopRow – номер первой отображаемой строки таблицы, не считая фиксированных (отсчет с 1)

Col – номер столбца, на котором находится фокус ввода (где редактировали данные или щелкнули мышкой)

Row – номер строки, на которой находится фокус ввода (где редактировали данные или щелкнули мышкой)

Cells [столбец , строка] – обращение к ячейки таблицы с заданным столбцом и строкой. Значение ячеек таблицы – всегда текстовые (типа «string»)

Options / goEditing – если «True», то в таблицу можно вводить и редактировать данные, иначе только просмотр значений

k:=0;

For i:=0 to StringGrid1.ColCount-1 do

   For j:=0 to StringGrid1.RowCount-1 do begin

     k:=k+strtoint(StringGrid1.Cells[i,j]); StringGrid1.Cells[i,j]:=’Ok!’;

   End;

TImage - отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу.

Picture – задает имя файла с рисунком

AutoSize – автоматическое изменение размера компонента под размер рисунка

Stretch – если “True”, то рисунок масштабируется к размерам компонента

Transparent – включает (если «True») «прозрачность» фона рисунка

Center – расположение рисунка по центру компонента (актуально для случая, когда рисунок меньше размера компонента)

TShape - служит для отображения простейших графических объектов на форме: окружность, квадрат и т.п.

Shape – тип фигуры

Pen – установка типа линии фигуры (цвета, формы, ширины и др.)

Brush – установка типа закраски фигуры (цвета, вида штриховки и др.)

TBevel – элемент для рельефного оформления интерфейса, создания вертикальных и горизонтальных линий

Shape – тип фигуры (четырехугольник, вертикальная линия, горизонтальная и др.)

Style – установка стиля рельефа (выгнутый, вогнутый)

TStaticText – позволяет создавать надпись, подобно компоненту Tlabel, но с красивым эффектом «втопленности». Данный компонент обычно применяется для отображения статического однострочного текста.

BorderStyle – определяет вид рамки у компонента

Caption – текст в компоненте

TCheckListBox – компонент, аналогичный TRadioGroup, используемый для объединения компонент TCheckBox в единую функциональную группу. Основные свойства компонента следующие:

Items [..] – в данном свойстве задается текст перечня элементов типа «TradioButton»

Checked [номер_строки_списка]– данное свойство показывает, установлена ли галочка у данного элемента списка или нет. Отсчет ведется с верха и нуля

Sorted – если равно “True”, то строки списка сортируются по алфавиту

Columns – задает количество столбцов в списке (по умолчанию один столбец)

with checklistbox1 do begin

for i:=0 to items.colcount-1 do

    if Checked[i]=true then showmessage(Items[i]);

end;

2. КОМПОНЕНТЫ СТРАНИЦЫ «DIALOGS»

На странице Dialogs представлены компоненты для вызова стандартных диалогов Windows. Объекты, представленные на данной странице, невидимы во время выполнения программы, вызов диалогов происходит только программно, например: if OpenDialog1 .Execute then Image1 .Picture.LoadFromFile(OpenDialog1 .FileName);

Диалоги Windows в порядке появления на странице Dialogs: OpenDialog - выбрать (открыть) файл; SaveDialog -сохранить файл; OpenPictureDialog - выбрать графический файл (с предварительным просмотром); SavePictureDialog - сохранить графический файл; FontDialog - настроить (установить) шрифт; ColorDialog -выбор цвета; PrintDialog –диалог печати данных; PrinterSetupDialog - настройка принтера; FindDialog - поиск строки текста; ReplaceDialog - поиск строки текстас заменой.

Рис. 1. Вкладка «Диалоги» Палитры Компонент

3. Пример вызова диалога приведен ниже.

procedure TForm1.Button1Click(Sender: TObject);

var F: Textfile;

begin

  OpenDialog1.Title := 'Удаление файла';

   if OpenDialog1.Execute then begin

        if FileExists(OpenDialog1.FileName) then

            if MessageDlg('Вы хотите удалить файл ' + ExtractFileName(OpenDialog1.FileName) + ' ?'),

              mtConfirmation, [mbYes, mbNo], 0) = mrYes then DeleteFile (OpenDialog1.FileName);

   end;

end;

4. Основные свойства диалогов:

InitialDir- начальная директория просмотра при открытии диалога

Title – заголовок диалога, например: ‘Delete File'

FileName – имя выбранного файла с полным маршрутом к нему, например: 'c:\lib\f1.dat'

DefaultExt – расширение по умолчанию, если не указано расширение, например: 'txt'

Filter – фильтры отображения файлов, например: ‘Text files (*.txt) | *.txt | All files (*.*) | *.*’

FilterIndex – номер фильтра отображения по умолчанию (отсчет с 1)

5. Основной метод всех диалогов, «EXECUTE», вызывает диалог на экран и возвращает «TRUE», если файл был выбран, или «FALSE» – если нет (выбрали кнопку «Отмена» или нажали «ESC»).

procedure TForm1.Button1Click(Sender: TObject);

var F: TextFile; S: string;

begin

  OpenDialog1.Title := 'Распечатка файла';

  if OpenDialog1.Execute then begin

    AssignFile(F, OpenDialog1.FileName);

    Reset(F); Readln(F, S); Edit1.Text := S;

    CloseFile(F);

  end;

end;

6. Пример использования диалога выбора шрифта:

if FontDialog1.Execute then Form1.Font := FontDialog1.Font;

7. Пример использования диалога выбора цвета:

if ColorDialog1.Execute then Form1.Font.Color := ColorDialog1.Color;

8. Пример использования диалога печати:

uses …, printers;

procedure TForm1.Button1Click (Sender: TObject);

begin

  showmessage(‘Печать формы на принтере’);

   if PrintDialog.Execute1 then begin

      with Printer do begin

          BeginDoc;

          form1.PaintTo(printer.Handle,0,0); NewPage;

         EndDoc;

      end;

    end;

end;

9. Пример использования диалога поиска текста в компоненте «RichEdit»:

Для кнопки запуска поиска нужно написать следующий обработчик:

procedure TForm1.Button1Click(Sender: TObject);

begin

  FindDialog1.Position:=Point(RichEdit1.Left + RichEdit1.Width div 2, RichEdit1.Top);

  FindDialog1.Execute;

end;

Для метода «OnFind» компонента «FindDialog» нужно написать следующий обработчик:

procedure TForm1.FindDialog1Find(Sender: TObject);

var k: LongInt;

begin

    k := Richedit1.FindText(FindDialog1.FindText, 0, Length(Text), [stMatchCase]);

    if k<>-1 then begin

      Richedit1.SetFocus; Richedit1.SelStart:=k; Richedit1.SelLength:=Length(FindDialog1.FindText);

  end;

end;

10. Пример печати текстовой информации из мемо-поля на принтере:

procedure TForm1.Button1Click(Sender: TObject);

var f: system.TextFile; i: longint;

begin

  assignPrn(f); Rewrite(f);

  writeln(f,’Print this text’);

  printer.canvas.font:=memo1.font;

  for i:=0 to memo1.lines.count-1 do

    Writeln(f, memo1.lines[i]);

  System.CloseFile(f);

end;

3. РАЗРАБОТКА ОКНА С НЕСКОЛЬКИМИ ИНТЕРФЕЙСНЫМИ ЗОНАМИ И РАСШИРЕННЫМ ИНТЕРФЕЙСОМ

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

Рис. 2. Форма с несколькими зонами и компонентами

В рассматриваемой задачи имеется три зоны: зона выбора пункта из компонента-дерева (верхняя левая), зона информации (верхняя правая) и зона управления (внизу). Мышью можно менять размеры «зона выбора – зона информации» и «зоны выбора и информации – зона управления».

Разработка примера происходит в три приема:

создание на форме зон из панелей и полос разделения

установка на зоны нужных компонент

написание процедур обработки компонент

3.1. Создание на форме зон

Для создания окна с несколькими областями, с изменяющимися размерами, нужно использовать компоненты «Panel» (вкладка «Standard»), «Splitter» (вкладка «Additional») и Инспектор объектов для их связывания. Рассмотрим алгоритм создания окна с тремя областями (см. рис.3):

наносим на пустую форму компонент «Panel1»;

устанавливаем у компонента «Panel1» выравнивание по правому краю (через Инспектор объектов): Panel1.Align:=alRight;

наносим на пустую часть формы слева компонент «Splitter1»;

устанавливаем у компонента «Splitter1» выравнивание по правому краю: Splitter1.Align:=alRight;

наносим на левую (пустую) часть формы компонент «Panel2»;

устанавливаем у компонента «Panel2» выравнивание по нижнему краю: Panel2.Align:=alBottom;

наносим на пустую часть формы слева компонент «Splitter2»;

устанавливаем у компонента «Splitter2» выравнивание по нижнему краю: Splitter2.Align: =alBottom;

наносим на левую верхнюю (пустую) часть формы компонент «Panel3»;

устанавливаем у компонента «Panel3» выравнивание по всему объему:Panel3.Align: =alClient.

Рис. 3. Форма с несколькими областями

3.2. Установка на зоны нужных компонент

После создания формы с несколькими зонами наносят на каждую панель компоненты и устанавливают у них свойство «Align» в значение «alClient» (выравнивание по всей области). На «Panel1» нанесем компонент «Memo1», на «Panel3» компонент-дерево «TreeView1» (вкладка «Win32»), на «Panel2» семь кнопок и компонент статусной строки «StatusBar1» (вкладка «Win32»).

Компонент-дерево «TreeView1» содержит в свойстве «Items» набор узлов и под узлов дерева. Содержимое дерева может задаваться через Инспектор объектов (и свойство «Items»), загружаться из файла или генерироваться программно.

Компонент статусной строки «StatusBar1» содержит «Panels» набор секций статусной строки. По-умолчанию в этом компоненте нет секций, поэтому их нужно создавать либо программно, либо через Инспектор объектов и свойство «Panels». В данном примере нужно сделать через Инспектор объектов три секции статусной строки.

3.3. Процедуры многозонной программы

  private

    { Private declarations }

    td: TTime; nf: string;

…

procedure TForm1.FormCreate(Sender: TObject);

{ Создание формы }

begin

  Form1.Position:=poScreenCenter;

  TreeView1.ReadOnly:=true; Memo1.ReadOnly:=true;

  Memo1.Clear;

  td:=now; nf:=ExtractFilePath(Application.ExeName)+'tree.txt';

  button7.Click;

end;

procedure TForm1.Button7Click(Sender: TObject);

{ Создаем программно дерево }

var tr, tr2: TTreeNode;

begin

  with TreeView1.Items do begin

    Clear; memo1.Clear;

    tr:=Add(nil, 'Принтеры');

      AddChild(tr,'матричные');

      tr2:=AddChild(tr,'струйные');

        AddChild(tr2,'цветные');

        AddChild(tr2,'черно-белые');

        AddChild(tr2,'фото-принтер');

    tr:=Add(nil, 'Мониторы');

      AddChild(tr,'LCD');

      AddChild(tr,'аналоговые с ЭЛТ');

   TreeView1.FullExpand;

  end;

end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

{ Обработка выбора пункта в дереве }

var k: integer;

begin

  { Проверяем, выбран ли пункт, или это раскрытие/скрытие узлов дерева }

    if (htOnItem in TreeView1.GetHitTestInfoAt(X,Y)) then begin

    { Очищаем дерево }

    memo1.Clear;

    k:=TreeView1.Selections[0].AbsoluteIndex+1;

    memo1.Lines.Add('Выбран пункт № '+inttostr(k));

    memo1.Lines.Add('Содержимое пункта: '+TreeView1.Selections[0].Text);

  end;

end;

procedure TForm1.Button1Click(Sender: TObject);

{ Сохранение дерева в файл }

begin

  TreeView1.SaveToFile(nf);

end;

procedure TForm1.Button2Click(Sender: TObject);

{ Чтение дерева из файла }

begin

  TreeView1.LoadFromFile(nf);

  { Раскрываем все узлы дерева }

  TreeView1.FullExpand;

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Сворачиваем все узлы дерева }

begin

  TreeView1.FullCollapse;

end;

procedure TForm1.Button4Click(Sender: TObject);

{ Раскрываем все узлы дерева }

begin

  TreeView1.FullExpand;

end;

procedure TForm1.Button6Click(Sender: TObject);

{ Очищаем дерево }

begin

  TreeView1.Items.Clear; memo1.Clear;

end;

procedure TForm1.Button5Click(Sender: TObject);

{ Закрытие программы }

begin

  close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

{ Процедура таймера }

begin

  StatusBar1.Panels[0].Text:='Вы работаете с программой: '+timetostr(now-td);

  StatusBar1.Panels[1].Text:='Время: '+timetostr(now);

  StatusBar1.Panels[2].Text:='Дата: '+datetostr(now);

end;

4. РАСШИРЕННЫЕ СРЕДСТВА ДЛЯ СОЗДАНИЯ ИНТЕРФЕЙСА ПРОГРАММЫ «WIN32»

1)  ImageList – контейнер с картинками формата «bmp»

Height – высота картинок

Width – ширина картинок

2) CoolBar – контейнер плавающих панелей

Bands – набор плавающих панелей

Bitmap – фоновый рисунок контейнера

BandBorderStyle – вкл/выкл разграничительных линий между панелями

3) ToolBar – инструментальная панель с кнопками и компонентами

ButtonHeight – высота кнопок

ButtonWidth – ширина кнопок

ShowCaptions – вкл/выкл показывать надписи на кнопках

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

HotImages – ссылка на компонент с набором картинок ImageList для наведения на кнопку

DisabledImages – ссылка на компонент с набором картинок ImageList для отображения неактивных кнопок

 List – вкл/выкл режима, при котором надпись на кнопке и картинка располагаются в одной строке

ToolButton – кнопка в инструментальная панели ToolBar. Создается через контекстное меню ToolBar «New Button» и «New Separator»

ImageIndex – номер картинки на кнопки из ImageList

Style – обычная кнопка (tbsButton), кнопка с выпадающим списком (tbsDropDown), кнопка с залипанием (tbsCheck), сепаратор (tbsDivider)

Width – ширина кнопки (для сепаратора)

Dropdownmenu – ссылка на выпадающее меню кнопки Popupmenu

4) StatusBar – статусная строка

Panels – набор панелей

Text – текст панели

Width – ширина панели

Aligment – выравнивание текста по горизонтали

«Additional»

1) ButtonGroup – контейнер с кнопками

ButtonHeight – высота кнопок

ButtonWidth – ширина кнопок

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

Items – набор кнопок

Caption – надпись на кнопке

ImageIndex – номер картинки кнопки

ButtonOptions

gboFullSize – кнопки располагаются в столбик вертикально

gboShowCaptions – показывать надписи на кнопках

Событие «ButtonClicked» передает в свою процедуру номер «Index» нажатой кнопки

2) CategoryButtons – контейнер с вкладками кнопок

ButtonHeight – высота кнопок

ButtonWidth – ширина кнопок

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

ButtonOptions – опции вкладок (категорий)

boFullSize – кнопки располагаются в полную ширину компонента (true)

boShowCaptions – показывать надписи на кнопках (true)

boVerticalCategoryCaptions – вкладки располагаются вертикально (false)

boBoldCaptions – надписи вкладок жирным цветом

boUsePlusMinus – использование «+» и «-» для раскрытия вкладок

Categories – Категории (вкладки)

Caption – название вкладки

Collapsed – вкладка закрыта (false)

Items – кнопки вкладки

Caption – надпись на кнопке

ImageIndex – номер картинки кнопки

Button.Category.Index – номер выбранной вкладки

Button.Index – номер выбранной кнопки в текущей вкладке

Событие «ButtonClicked» передает в свою процедуру номер «Index» нажатой кнопки

    with CategoryButtons1 do begin

      SelectedItem:=Categories[0].Items[0];

      CategoryButtons1ButtonClicked(Sender, SelectedItem);

    end;

3) ActionManager – менеджер акций (пунктов меню)

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

Двойной щелчок мыши по компоненту раскрывает редактор акций. В нем правой кнопкой мыши выбираем пункт «New Action». Свойства акции:

Caption – название подпункта меню («Открыть»)

Category – название пункта (основного раздела) меню («Файл»)

ImageIndex – – номер картинки акции

ActionToolBar – панель акций. На данную панель из ActionManager наносятся акции (кнопки), аналог ToolBar.

ActionMainMenuBar – меню акций. В данное меню из ActionManager наносятся акции (пункты меню), аналог MainMenu.

ЛЕКЦИЯ № 7


1. КОМПОНЕНТЫ СТРАНИЦЫ «WIN32»

1) RichEdit – аналог компонента «MEMO» с возможностью отображения текста с несколькими разными шрифтами и поиском фрагмента текста

2) TrackBar – ползунок "научного" вида для отображения числовых данных

 Frequency – шаг проставления меток шкалы на компоненте

 Мах – максимальное значение

 Min – минимальное значение

Position – текущее значение

Orientation – вид расположения на экране (вертикальный, горизонтальный)

3) ProgressBar – компонент для отображения процессинга

Мах – максимальное значение

Min – минимальное значение

Position – текущее значение

Orientation – вид расположения на экране (вертикальный, горизонтальный)

Smooth- если «False», то шкала закраски дискретная, иначе – сплошная заливка

4) Animate – компонент для отображения видео файлов “AVI” – формата

Active – включение движения в анимации

CommonAVI – выбор одной из стандартных анимаций (анимация поиска файла, копирования и др.)

FileName – указание имени файла анимации (используется для внешних анимаций, для стандартных анимаций свойство не используется)

Repetitions – количество повторов показа анимации (если «О» – то показ пока «Active – True»)

5) DateTimePicker – компонент-календарь для ввода и отображения дат

DateFormat – вид даты в компоненте (вид месяца: прописью или числом)

Kind – вид календаря (для отображения даты или времени)

Time – выбранное время

Date – выбранная дата

DateTime – выбранная дата с временем

MaxDate – максимальное значение даты для выбора и отображения

MinDate -минимальное значение деты для выбора и отображения

6) PageControl – компонент для создания в них вложенных страниц (вкладок-панелей)

ActivePageIndex – номер активной (видимой) вкладки (отсчет с нуля)

PageCount – количество созданных вкладок в компоненте (отсчет с единицы)

OnChanging – событие возникает перед изменением текущей вкладки компонента

OnShow – событие возникает при выборе вкладки компонента

OnHide – событие возникает после смены выбора вкладки

2. КОМПОНЕНТЫ СТРАНИЦЫ «SYSTEM»

1) Timer – таймер, для вызова какой-либо процедуры через заданный промежуток времени

Enabled – включение/выключение таймера

Interval – время в миллисекундах, через которое будет вызываться событие «OnTimer»

 OnTimer – событие, которое вызывается таймером каждый раз через время «Interval»

2) MediaPlayer – компонент для воспроизведения видео и звуковых файлов

FileName – указание имени видео или звукового файла

DeviceType – вид проигрываемого файла (видео, аудио)

Display – указывается компонент, на котором будет выводиться видео

Open – метод открытая устройства отображения видео или аудио (вызывается перед «PLAY»)

Play – метод запуска видео или аудио (вызывается после «OPEN»)

Stop- метод остановки видео или аудио (вызывается после «PLAY»)

3. КОМПОНЕНТЫ СТРАНИЦЫ «SAMPLES»

Gauge – компонент для отображения числовой величины в рисунке с процентами

Мах – максимальное значение

Min – минимальное значение

Progress – текущее значение

Kind – вид диаграммы (круговая диаграмма, вертикальный столбик, горизонтальный столбик и др.)

BackColor – цвет не закрашенной части компонента

ForeColor – цвет закрашенной части

ShowText – если "TRUE", то текстовое значение в процентах будет отображаться в компоненте, иначе нет

SpinEdit – аналог компонента «EDIT» для ввода цифр с возможность инкремента/декремента величины

MaxValue – максимальное значение

MinValue – минимальное значение

MaxLength – максимальное количество цифр (длина строки)

Increment – шаг наращивания величины

Value – текущее значение

ЛЕКЦИЯ № 8

1. РАБОТА С ГРАФИКОЙ В DELPHI

Рассмотрим задачу, когда нужно на форме программно создать изображение, показанное на рис.1. Для этого необходимо на форму поместить компонент «PaintBox1» из вкладки «System» и написать для него процедуру на событие «OnPaint» (событие программной прорисовки компонента).

Рис. 1.

procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

with PaintBox1.Canvas do begin // Работа с канвой компонента «PaintBox1»

  Pen.Style := psSolid; // Тип линии: сплошная линия(psDash: пунктирная линия)

  Pen.Width := 4; // Ширина линии (точки)

  Pen.Color := clRed; // Цвет линии

   Brush.Color := clBlue; // Цвет закраски

   Brush.Style := bsSolid; // Стиль закраски "сеткой" (bsDiagCross: "сеткой")

   Ellipse(0, 0, PaintBox1.Width, PaintBox1.Height); // Закрашенный элипс

  // Закрашенный четырехугольник

  // Цвет линии задается в "Pen.Color", цвет заливки задается в "Brush.Color",

  Rectangle(25,25,140,140);

  FrameRect(rect(10,10,20,20)); // Не закрашенный четырехугольник, цвет задается в "Brush.Color"

  Pixels[0,0]:=clAqua; // Рисование точки

  MoveTo(1,1); // Перемещение на нужную точку

  LineTo(PaintBox1.Width,PaintBox1.Height); // Рисование линии

  // Вывод текста

  Font.Color:=clLime; // Цвет шрифта

  Font.Size := 20; // Размер шрифта

  Font.Style := [] + [fsBold]; // Стиль шрифта

  Brush.Style := bsClear; // Прозрачный фон текста

  TextOut(50,40,'Hi!'); // Вывод текста

   Brush.Color := clAqua; // Укажем цвет закраски

   // Закраска области (x,y, цвет который стирать)

   FloodFill(50,70, Pixels[50,70], fsSurface);

end;

end;

2. СОЗДАНИЕ ИНТЕРАКТИВНОГО ГРАФИЧЕСКОГО ИНТЕРФЕЙСА НА БАЗЕ КОМПОНЕНТА «STRINGGRID»

Установки «StringGrid1»:

    ColCount = 60; RowCount = 50; DefaultColWidth = 5; DefaultRowHeight = 5

    FixedCols = 0; FixedRows = 0; Options -> goRangSelection -> False

unit Unit1;

interface

. . . . . . .

var Form1: TForm1;

const

  fp_down=tobject(1); fp_up=tobject(0); fp_color=clred;

  x_min=0; x_max=10; y_min=-1; y_max=1; step=0.1;

implementation

{$R *.dfm}

function TForm1.GetColFromX(x_min, x_max, x: real; col_count: integer): integer;

{ Вычисление номера колонки по координате X }

var c: integer;

begin

  try c:=col_count-round((x-x_min)*(col_count-1)/(x_max-x_min)+1);

  except c:=0; end;

  if c<0 then c:=0; if c>col_count then c:=col_count;

  GetColFromX:=c;

end;

function TForm1.GetRowFromY(y_min, y_max, y: real; row_count: integer): integer;

{ Вычисление номера строки по координате Y }

var r: integer;

begin

  try r:=row_count-round((y-y_min)*(row_count-1)/(y_max-y_min)+1);

  except r:=0; end;

  if r<0 then r:=0; if r>row_count then r:=row_count;

  GetRowFromY:=r;

end;

procedure TForm1.Button1Click(Sender: TObject);

{ Очистка ячеек }

var i,j: integer;

begin

  with StringGrid1 do begin

    for i:=0 to colcount-1 do for j:=0 to rowcount-1 do begin

        Objects[i,j]:=fp_up;

      end;

  end;

end;

procedure TForm1.Button2Click(Sender: TObject);

{ Построение синусоиды }

var c,r: integer; x: real;

begin

  button1.Click;

  with StringGrid1 do begin x:=0;

    while x<=10 do begin try

      c:=GetColFromX(x_min, x_max, x, stringgrid1.colcount);

      r:=GetRowFromY(y_min, y_max, sin(x), stringgrid1.rowcount);

      except r:=0; end;

      Objects[c,r]:=fp_down;

      x:=x+step;

      end;

  end;

end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject;

  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

{ Нанесение/стирание кружка }

var C, R: Longint; t: TRect;

begin

  with StringGrid1 do begin

    MouseToCell(X, Y, C, R);

    if Objects[c,r]=fp_down then Objects[c,r]:=fp_up else Objects[c,r]:=fp_down;

  end;

end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

  Rect: TRect; State: TGridDrawState);

{ Механизм ручной прорисовки ячеек StringGrid }

var t: TRect;

begin

  with StringGrid1 do begin

     t:=StringGrid1.CellRect(ACol, ARow);

    if Objects[ACol, ARow]<>fp_down then begin

      canvas.Pen.Color:=clWhite; canvas.Rectangle(t);

    end else begin

      canvas.Brush.Color:=fp_color; canvas.Pen.Color:=fp_color;

      canvas.Ellipse(t);

    end;

  end;

end;

procedure TForm1.FormCreate(Sender: TObject);

{ Инициализация программы }

begin

  label1.Caption:=formatfloat('##0.00',y_max); label2.Caption:=formatfloat('##0.00',y_min);

  label3.Caption:=formatfloat('##0.00',x_min); label4.Caption:=formatfloat('##0.00',x_max);

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Выход из программы }

begin

  close;

end;

end.

3. РАБОТА С «TCHART»

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

Рассмотрим на простейшем примере работу с компонентом «TChart». Поместите компонент на форму, щелкните по нему мышью двойным щелчком. В появившемся меню выберите вкладку «Series» и нажмите на ней кнопку «Add» дважды, чтобы создать две пустые серии. При нажатии на кнопку «Add» нужно будет указать вид графика для создаваемой серии (линейный, круговой и т.д.). Все остальные настройки будут производиться программным путем. Cодержимое процедур-обработчиков программы приведено ниже.

procedure TForm1.Button1Click(Sender: TObject);

{ Загрузить серию 1 из мемо – компонента }

var n: integer;

begin

  for n:=0 to memo1.lines.count-1 do

      { Добавляем в первую серию число с наклейкой к нему и данным цветом }

      Chart1.series[0].add(strtofloat(memo1.lines[n]), inttostr(n),clBlue);

end;

procedure TForm1.Button2Click(Sender: TObject);

{ Загрузить синусоиду в серию 2 }

var n: integer;

begin

  for n:=0 to 10 do Chart1.series[1].add(sin(n),inttostr(n)+’!’,clRed);

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Очистка графиков (серий) }

begin

  Chart1.series[0].clear; Chart1.series[1].clear;

end;

procedure TForm1.Chart1ClickSeries(Sender: TCustomChart; Series: TChartSeries;

                 ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

{ Щелчок мыши по серии }

begin

  ShowMessage(' Выбрали серию: '+Series.Title+'; точку N: '+

     inttostr(valueindex+1)+' со значением Y= '+floattostr(Series.YValues.Value[valueindex]));

end;

procedure TForm1.FormActivate(Sender: TObject);

{ Настройка компонента }

begin

  Chart1.title.text.clear; Chart1.title.text.add('Пример'); Chart1.title.text.add('двух графиков');

  Chart1.series[0].title:='Серия-1'; Chart1.series[1].title:='Серия-2';

  Chart1.series[0].SeriesColor:=clBlue; Chart1.series[1].SeriesColor:=clRed;

  Chart1.cursor:=crCross; { Вид курсора над графиками в виде прицела }

end;

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

{ Перемещение мыши над графиком }

begin

  StatusBar1.Panels[0].Text := 'x='+floattostr(x)+ ' y='+floattostr(y);

  StatusBar1.Panels[1].Text := 'x='+floattostr( chart1.series[0].XScreenToValue(x))+

    ' y='+floattostr(chart1.series[0].YScreenToValue(y));

end;

Данный компонент имеет очень много возможностей и настроек, которые можно узнать из справочной системы «Delphi».

4. ПРОСТЕЙШАЯ РАБОТА СО ЗВУКОМ

procedure TForm1.Button1Click(Sender: TObject);

var k,i,j:integer;

begin

k:=strtoint(edit1.Text);

for k := 0 to k-1 do begin

Windows.Beep(10000,500);// verhnee podcherkuivanie

  for I := 0 to 50 do Windows.Beep((184*i)+800,10); // /

  for j := 50 downto 0 do Windows.Beep((184*j)+800,10); // \

  sleep(500); // Niznee podcherkivanie

  for I := 0 to 50 do Windows.Beep((184*i)+800,10) ;

  Windows.Beep(10000,500);

  Windows.Beep(10000,500);

  Windows.Beep(10000,500);

end;

ЛЕКЦИЯ № 9

1. РАБОТА С ФАЙЛАМИ И ТИПИЗИРОВАННЫМИ ДАННЫМИ


Описание файловой переменной
var f: textfile;Переменная для работы с текстовым файлом
var f: file of tPers;Переменная для работы с типизированным файлом
var f: file of integer;Переменная для работы с типизированным файлом
Открытие и закрытие файла
AssignFile(f,'d:\1.txt');Связь файловой переменной с файлом на диске
append(f);Открываем файл на добавление в конец
reset(f);Открываем существующий файл на чтение (для типизированных файлов – и на запись)
rewrite(f);Создаем файл на запись
CloseFile(f);Закрытие файла
Запись и чтение в файл
write(f,t);Вывод типизированных данных в файл
writeln(f,'Привет!');Вывод текстовых данных в файл
read(f,t);Читаем типизированное данное из файла
readln(f,s);Читаем текстовую строку из файла
Перемещение на нужную запись в файле
seek(f,2);Переход на нужную запись (с нуля)
while not eof(f) doПока не конец файла – цикл
k:=FilePos(f);Чтение текущей позиции в файле
k:=FileSize(f);Чтение размера файла в байтах

1. Запись текстовых данных в файл

procedure TForm6.Button1Click(Sender: TObject);

// Запись текстовых данных в файл

var f: textfile; // Переменная для работы с текстовым файлом

begin

  AssignFile(f,'d:\1.txt'); // Связь файловой переменной с файлом на диске

  rewrite(f); // Открываем файл на запись с очисткой

// append(f); // Открываем файл на добавление в конец

  writeln(f,'Привет!'); // Вывод данных в файл

  writeln(f,'Создаем новый файл на диске.');

  CloseFile(f); // Закрываем файл

end;

2. Чтение текстовых данных из файла

procedure TForm6.Button2Click(Sender: TObject);

// Чтение данных из файла

var f: textfile; // Переменная для работы с текстовым файлом

    s: string;

begin

  memo1.Clear; // Очистка мемо-поля

  AssignFile(f,'d:\1.txt'); // Связь файловой переменной с файлом на диске

  reset(f); // Открываем файл на чтение

  while not eof(f) do begin // Пока не конец файла – цикл

    readln(f,s); // Читаем текстовую строку из файла

    memo1.Lines.add(s); // Заносим считанную строку в мемо-поле

  end;

  CloseFile(f); // Закрываем файл

end;

3. Запись типизированных данных в файл

type // Описание типа-записи

  tPers = record

    fam: string[50];

    name: string [50];

    year: integer;

    height: real;

  end;

var f: file of tPers; // Переменная для работы с типизированным файлом

    t: tpers; s: string;

. . .

procedure TForm6.Button3Click(Sender: TObject);

// Запись типизированных данных в файл

begin

  // Задаем переменную-запись

  t.fam:='Петров'; t.name:='Василий'; t.year:=18; t.height:=58.2;

AssignFile(f,'d:\1.dat'); // Связь файловой переменной с файлом на диске

  // можно так:

     rewrite(f); // Создаем файл заново

// или так:

// reset(f); // Открываем существ. типизированный файл на чтение и запись

// seek(f,strtoint(edit1.Text)); // Перемещаемся на любую нужную запись

  write(f,t); // Сохраняем запись в текущей позиции в файле

  CloseFile(f); // Закрываем файл

end;

4. Чтение типизированных данных из файла

procedure TForm6.Button4Click(Sender: TObject);

// Чтение типизированных данных из файла

begin

  // Задаем переменную-запись

  memo1.Clear; // Очистка мемо-поля

  AssignFile(f,'d:\1.dat'); // Связь файловой переменной с файлом на диске

  reset(f); // Открываем файл на чтение

  while not eof(f) do begin // Пока не конец файла – цикл

    read(f,t); // Читаем запись из файла

    // Заносим считанные данные в мемо-поле

    memo1.Lines.add(t.fam);

    memo1.Lines.add(t.name);

    memo1.Lines.add(inttostr(t.year));

    memo1.Lines.add(floattostr(t.height));

  end;

  CloseFile(f); // Закрываем файл

end;

5. Чтение записи из типизированного файла

procedure TForm6.Button5Click(Sender: TObject);

// Чтение записи из типизированного файла с данными

begin

  // Задаем переменную-запись

  memo1.Clear; // Очистка мемо-поля

  try

  AssignFile(f,'d:\1.dat'); // Связь файловой переменной с файлом на диске

  reset(f); // Открываем файл на чтение

  try

   // Пример с чтением конкретной записи

    seek(f,strtoint(edit1.text)); // Переход на нужную запись (с нуля)

    read(f,t); // Читаем запись из файла

    memo1.Lines.add(t.fam); // Заносим считанную строку записи в мемо-поле

  except

    showmessage('Нет такой записи!');

  end;

  CloseFile(f); // Закрываем файл

  except

    showmessage('Нет доступа к файлу!');

  end;

end;

Возрастное ограничение:
12+
Дата выхода на Литрес:
11 июня 2021
Дата написания:
2012
Объем:
84 стр. 57 иллюстраций
Правообладатель:
Автор
Формат скачивания:

Похожие книги