Среда программирования Delphi
Введение в Оbject Pascal. Операторы языка, массивы, процедуры и функции, учебные программы. Программирование алгоритмов с использованием функций и процедур. Создание модуля и подключение его к проекту. Программирование алгоритмов с использованием файлов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | учебное пособие |
Язык | русский |
Дата добавления | 29.11.2010 |
Размер файла | 149,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ЮЖНО-КАЗАХСТАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
им. М. АУЕЗОВА
Институт «Информационных технологий автоматизации и энергетики»
Кафедра «Вычислительной техники и программного обеспечения»
УЧЕБНОЕ ПОСОБИЕ
По дисциплине «Среда программирования Delphi»
Специальность 050704-«Вычислительная техника и программное обеспечение»
УДК 076.3
Составители : Ермаханбетов М.Б. Мусабекова Л.М
Шымкент: Южно-Казахстанский Государственный Университет им. М.Ауезова, 2007г.
Шымкент 2007г.
Учебное пособие составлено на основании типовой программы по дисциплине «Среда программирования Delphi» для студентов специальности 050704-«Вычислительная техника и программное обеспечение» Разработанной УМО по естественнонаучным гуманитарным университетским специальностям.
Утверждено на заседании кафедры «ВТиПО»
Протокол № 1 от «26»_____08___2007г.
Заведующий кафедрой _____________________Ахметова С
Данное учебное пособие предназначено для студентов изучающих дисциплину «Среда программирования Delphi» и родственные ей дисциплины, а также для всех, желающих ознакомиться с основами построения прикладных систем, основанных на представлении и обработке знаний, и является специальной технической дисциплиной для студентов специальности 050704 вычислительная техника и программное обеспечение.
Рецензенты: д.т.н. профессор Ескендиров Ш.З., к.т.н. доцент Амиров Р.А.. Работа подготовлена на кафедре вычислительной техники и программного обеспечения ЮКГУ им М. Ауезова, 2007г.
Утверждено на методическом совете Института информационных технологий автоматизации и энергетики ЮКГУ им М.О Ауезова .
протокол № «___» _____ ___________2007г
Председатель _______________ Бурибеков А
© ЮКГУ им М.О Ауезова .
Введение
Важной вехой в развитии Объектно-ориентированного программирования явилось создание и широкое распространение языка Delphi Этот язык, сохранив средства ставшего общепризнанным стандартом для написания системных и прикладных программ языка (процедурно-ориентированный язык), ввел в практику программирования возможности нового технологи-ческого подхода к разработке программного обеспе-чения, получившего название “объектно-ориентиро-ванное программирование”. Внедрение в практику программирования объектно-ориентированной парадигмы дает развитие новых областей вычислительной техники , значительное повышение уровня технологичности создаваемых программных средств, сокращение затрат на разработку и сопровождение программ, их повторное использование, вовлечение в процесс расширения интеллектуальных возможностей ЭВМ. Объектный подход информационного моделирования предметных областей все более успешно применяется в качестве основы для структуризации их информационных отражений и, в частности , баз знаний.
Delphi,С++ - это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Указанные преимущества С++ обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование С++ в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на С++, сравнимы по скорости с программами, написанными на языке ассемблера.
программа интерфейс информация
Оглавление
Лабораторная работа №1
Введение в Оbject Pascal
Типы
Операторы языка
Массивы
Процедуры и функции
Учебные программы
Пример
Задание
Лабораторная работа №2
Интерфейс
Пример MDI-приложения: Текстовый редактор.
Задание
Лабораторная работа №3
Программирование алгоритмов с использованием функций и процедур
Создание модулей. Создание библиотек.
Пример создания приложения
Размещение компонентов на форме
Создание модуля и подключения его к проекту
Текст модуля UnFuncProc
Текст модуля UnModul
Создание библиотек DLL
Задание
Лабораторная работа №4
Программирование алгоритмов с использованием файлов
Пример создания приложения
Размещения компонентов на форме
Создание процедур обработки событий
Работа с приложением
Задание
Лабораторная работа №5
Использование базы данных в Delphi:
Создание таблиц базы данных, просмотр базы
данных в виде таблицы, создание запросов
Пример создания БД, формы и запросов.
Задание
Лабораторная работа №6
Создание классов и компонентов
Создание классов
Создание компонентов
Задание
1. Типы
Первоначально типы как раз и предназначались для того, чтобы программист явно указывал компилятору, какого размера память нужна ему в программе и что он собирается делать с этой памятью. Практика применения типов показала их высокую эффективность для защиты программы от случайных ошибок, так что практически все современные языки программирования в той или иной степени реализуют механизм типов. В Object Pascal значение типов возросло в еще большей степени, т. к. с их помощью определяются классы - основной инструмент программиста.
1.1 Строковый и символьный типы
Свое знакомство с типами мы начнем со строкового типа String. Этот тип определяет участок памяти переменной длины, каждый байт которого содержит один символ. Для символов в Object Pascal используется тип Char, таким образом, String - это цепочка следующих друг за другом символов Char. Каждый символ в String пронумерован, причем первый символ имеет номер 1. Программист может обращаться к любому символу строки, указывая его порядковый номер в квадратных скобках сразу за именем переменной:
var // Начало раздела описания переменных
S: String;
// Объявление переменной строкового типа
begin
// Начало раздела исполняемых операторов
S := 'Строка символов';
// Переменная S содержит
// значение ”Строка символов”
S[6] := 'и'; // Теперь переменная содержит значение
// ”Строки символов”
end;
Программист обязан объявить любой вводимый им идентификатор. Идентификатор S неизвестен Delphi - он введен нами для переменной строкового типа. После его объявления в разделе переменных Delphi выделит для него начальную область памяти минимальной длины и будет контролировать использование этого идентификатора в разделе исполняемых операторов. Над строковым типом определена операция сцепления (+):
S := 'Object'+' Pascal';// S содержит “Object Pascal”
Кроме того, строки можно сравнивать с помощью таких операций отношения:
Операция |
Смысл |
|
= |
Равно |
|
<> |
Не равно |
|
> |
Больше |
|
>= |
Больше или равно |
|
< |
Меньше |
|
<= |
Меньше или равно |
1.2 Целые типы
Целые типы используются для хранения и преобразования целых чисел. В Object Pascal предусмотрено несколько целочисленных типов, отличающихся диапазоном возможных значений. В этой главе мы будем использовать тип integer, занимающий в памяти 4 смежных байта и предназначенный для хранения целых чисел в диапазоне от -2 147 483 648 до +2 147 483 6478. Более полные сведения о целых типах вы найдете в гл. 7.
Над целыми числами определены следующие математические операции:
+ |
сложение |
|
- |
вычитание |
|
* |
умножение |
|
div |
деление с отбрасыванием остатка |
|
mod |
получение остатка от деления |
Как и к строкам, к целым числам применимы операции сравнения.
2. Операторы языка
2.1 Составной оператор
Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin ... end. Составные операторы - важный инструмент Object Pascal, дающий возможность писать программы по современной технологии структурного программирования (без операторов перехода goto).
2.2 Условный оператор
Структура условного оператора имеет следующий вид:
if <условие> then <оператор1> else <оператор2>;
Условными называются выражения, имеющие одно из двух возможных значений: истина или ложь. Такие выражения чаще всего получаются при сравнении переменных с помощью операций отношения =, <>, >, >=, <, <=. Сложные логические выражения составляются с использованием логических операций and (логическое И), or (логическое ИЛИ) и not (логическое НЕ). Например:
if (а > b) and (b <> 0) then ...
2.3 Операторы повторений
В языке Object Pascal имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ.
Счетный оператор цикла FOR имеет такую структуру:
for <параметр цикла> := <нач_знач> to <кон знач> do <оператор>;
Оператор цикла WHILE с предпроверкой условия:
while <условие> do <оператор>;
Оператор цикла REPEAT... UNTIL с постпроверкой условия:
repeat <тело цикла> Until <условие>;
2.4 Оператор выбора
Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора - выражение любого порядкового типа (из уже рассмотренных к порядковым относятся integer, char и логический и т. д.).
Структура оператора выбора такова:
case <ключ_выбора> of <список_выбора> [else <операторы>] end;
3. Массивы
В Object Pascal могут использоваться также объекты, содержащие множество однотипных элементов. Это массивы - формальное объединение нескольких однотипных объектов (чисел, символов, строк и т. п.), рассматриваемое как единое целое. К необходимости применения массивов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин. При описании массива необходимо указать общее количество входящих в массив элементов и тип этих элементов. Например:
var
а : array [1..10] of Real;
b : array [0..50] of Char;
с : array [-3..4] of String;
Доступ к каждому элементу массива в программе осуществляется с помощью индекса - целого числа, служащего своеобразным именем элемента в массиве. При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:
var
a: array [1..10] of Integer;
b: array [0..40] of Char;
c: array [-2..2] of Boolean;
k: Integer;
begin
b[17] := 'F';
c[-2] := a[1] > 2;
for k := 1 to 10 do a[k] := 0;
end;
В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном.
4. Процедуры и функции
При создание крупных программ в сотни, тысячи и десятки тысяч строк, писать такие программы как нечто единое целое, без расчленения на относительно самостоятельные фрагменты, т. е. без структурирования, просто невозможно. Языки, в которых предусмотрены такие механизмы, называются процедурно-ориентированными. Процедурой в Object Pascal называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени в тексте программы приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры (рис. 1.8). Для обмена информацией между основной программой и процедурой используется один или несколько параметров вызова. Процедуры могут иметь и другой механизм обмена данными с вызывающей программой, так что параметры вызова могут и не использоваться. Если они есть, то они перечисляются в круглых скобках за именем процедуры и вместе с ним образуют оператор вызова процедуры. Функция отличается от процедуры тем, что результат ее работы возвращается в виде значения этой функции, и, следовательно, вызов функции может использоваться наряду с другими операндами в выражениях.
Рис. 1.8. Взаимодействие вызывающей программы и процедуры
С примерами процедур и функций мы уже сталкивались - это стандартные процедуры Exit, ShowMessage, функции StrToInt, FioatToStr, Random, математические функции и др. Стандартными они называются потому, что созданы одновременно с системой Delphi и являются ее неотъемлемой частью. В Delphi имеется много стандартных процедур и функций. Наличие богатой библиотеки таких программных заготовок существенно облегчает разработку прикладных программ. Однако в большинстве случаев некоторые специфичные для данной прикладной программы действия не находят прямых аналогов в библиотеках Delphi, и тогда программисту приходится разрабатывать свои, нестандартные процедуры и функции. Нестандартную подпрограмму необходимо описать, чтобы компилятор смог установить связь между оператором вызова и теми действиями, которые предусмотрены в подпрограмме. Описание подпрограммы помещается в разделе описаний (до начала исполняемых операторов).
УЧЕБНЫЕ ПРОГРАММЫ
1. Учебная программа COPY.TXT
Создадим программу, в которой текст из строки ввода edinput будет копироваться без изменений в метку lboutput и редактор mmoutput. Дважды щелкните по кнопке bbRun в окне формы, чтобы Delphi автоматически подготовила для вас заголовок обработчика события, и отредактируйте его следующим образом:
procedure TfmExample.bbRunClick(Sender: TObject);
begin
lbOutput.Caption := edInput.Text;
// Повторяем текст в метке
mmOutput.Lines.Add(edInput.Text);
// и в многострочном редакторе
edInput.Text := '';
// Очищаем строку ввода
edInput.SetFocus;
// Передаем ей фокус ввода
end;
Нажмите F9 для прогона программы, сохраните модуль под именем CopyTxtU.pas, а проект в целом - под именем copyTxt.dpr,
Попробуйте самостоятельно создать обработчик события опАс-tivate для формы fmExampie и в нем установить фокус ввода для строки edinput. (Подсказка: раскройте список выбора в верхней части окна Инспектора объектов, выберите в нем компонент fmExampie и дважды щелкните по правой колонке свойства OnActivate на странице Events этого окна.)
2. Учебная программа INTMULT
В описываемой ниже программе пользователь вводит два целых числа, а программа вычисляет и показывает их произведение. В этой программе мы также познакомимся с преобразованием типов
Удалите из формы редактор edinput (щелкните по нему мышкой и нажмите клавишу Delete) и поместите на его место компонент MaskEdit (страница Additional). Дайте ему прежнее имя edinput (свойство Name) и раскройте диалоговое окно свойства EditMask . Это свойство указывает маску компонента, т. е. определяет, какие символы и в какой последовательности может набирать пользователь в окне ввода.
В строке Input Mask введите
#99999999;1;
В окошке Character for Blanks вместо умалчиваемого символа-заполнителя “_” укажите пробел и закройте окно кнопкой ок. Сформированная нами маска заставит компонент автоматически контролировать ввод пользователя и отвергать любые символы, кроме знаков + или - в первой позиции (элемент маски “#”) и цифр (элементы “9”). Дважды щелкните по кнопке bbResuit и введите такой код для обработчика события OnClick этой кнопки:
procedure TfniExample.bbResultClick( Sender: TObject) ;
// Обработка ввода 2-го операнда
begin // Преобразуем текст из edinput в целое число:
Y := StrToInt(Trim(edinput.Text));
// Сообщаем в Memo о вводе 2-го операнда:
mmOutput.Lines.Add('2-й операнд:'+edInput.Text);
// Вычисляем и показываем результат:
mmOutput.Lines.Add('Результат: '+ IntToStr(X)+' * '+IntToStr(Y)+' = '+IntToStr(X*Y));
edinput.Text := ''; // Очищаем ввод
edinput. SetFocus;
// и возвращаем ему фокус
IbOutput.Caption := 'Введите 1-й операнд';
bbResuit.Hide;
// Прячем кнопку bbResuit
bbRun.Show;
// и показываем bbRun
end;
Для ввода обработчика события onciick кнопки bbRun нужно сначала с помощью списка выбора в верхней части окна Инспектора объектов отыскать и выбрать компонент bbRun (напомню, он полностью закрыт кнопкой bbResuit), затем дважды щелкнуть в правом столбце строки onciick на странице Events и ввести такой код:
procedure TfmExample.bbRunClick(Sender: TObject);
// Обработка ввода 1-го операнда
begin
// Преобразуем текст из edinput в целое число
Х := StrToInt(Trim(edinput.Text));
// Сообщаем в Memo о вводе 1-го операнда
mmOutput.Lines.Add('1-й операнд: '+edInput.Text);
edinput.Text := ''; // Очищаем ввод
edInput.SetFocus;// и возвращаем ему фокус
IbOutput.Caption := 'Введите 2-й операнд:';
bbResult.Show; // Показываем кнопку bbResult
bbRun.Hide; // и прячем bbRun
end;
Осталось передать фокус ввода компоненту edinput в момент старта программы и определить переменные х и y для хранения операндов. Разыщите в самом начале окна кода программы описание класса TfmExample и отредактируйте его следующим образом:
private
{ Private declarations } X,Y: Integer;.
Затем с помощью списка выбора в окне Инспектора объектов выберите форму fmExampie и после двойного щелчка на строке опАсtivate страницы Events введите такой обработчик события:
procedure TfmExample.FormActivate(Sender: TObject);
// Подготовка к началу работы
begin
edInput.SetFocus; // Передаем фокус ввода редактору edinput
IbOutput.Caption := 'Введите 1-й операнд:';
end;
3. Учебная программа INTTEST
Игра “Угадай число”: программа случайным образом выбирает целое число в диапазоне 0... 1000 и запоминает его. Пользователь пытается угадать его и вводит свое число. Сравнив ввод с запомненным числом, программа сообщает - больше, меньше или равно введенное число запомненному. Ввод продолжается до угадывания, после чего программа предлагает сыграть еще раз.
Поскольку пользователь вводит только числа, изменим форму fmExample: как и в предыдущей программе intmult вместо компонента edinput типа TEdit поместим на форму одноименный компонент типа TMaskEdit и в его свойство
EditMask поместите строку:
0999;1;
В секцию private описания класса fmExampie поместите объявление целочисленного поля х:
private
{ Private declarations }
X: Integer;
Для обработчика события OnActivate формы fmExampie Напишите такой код:
procedure TfmExample.FormActivate(Sender: TObject);
begin
X := Random (1001) ; // Загадываем случайное число
edinput.SetFocus; // Передаем строке edinput фокус ввода
Caption := 'Угадай целое число в диапазоне О...1000';
IbOutput.Caption :== 'Введите число:';
end;
Поместите в обработчик события onciick кнопки bbRun такой код:
procedure TfmExample.bbRunClick(Sender: TObject);
var
Y: Integer;
begin
if edinput.Text = '' then
Exit; // Если нет входного текста, прекращаем работу
// Преобразуем ввод в число:
Y := StrToInt(Trim(edInput.Text));
edinput.Text := ''; // Очищаем ввод
edinput.SetFocus; // Устанавливаем фокус ввода
{ Параметр Tag = 0 означает угадывание числа, иначе - ответ на вопрос, будет ли пользователь играть после угадывания }
if Tag = 0 then
if X < Y then // Угадывание числа
mmOutput.Lines.Add('X < '+IntToStr(Y))
else if X > Y then
mmOutput.Lines.Add('X > '+IntToStr (Y))
else // X = Y begin
mmOutput.Lines.Add("X = +IntToStr(Y));
MessageBeep(MB_OK); // Звук для привлечения внимания
IbOutput.Caption :='Вы угадали! Введите 1, если хотите повторить:';
Tag := 1; // Следующий ввод - ответ на вопрос
end;
else // Анализ ответа
if Y = 1 then
begin
X := Random(1001); // Новое число
IbOutput.Caption := 'Введите число:';
Tag := 0; // Следующий ввод - угадывание
edinput.SetFocus
end
else
Close;
end;
4. Учебная программа INTSLJMM
В качестве иллюстрации применения оператора for рассмотрим программу, осуществляющую ввод произвольного целого числа n и вычисление суммы всех целых чисел от 1 до N.
Для нового приложения (опция File | New | Application) создайте такой обработчик bbRunСlick:
procedure TfmExample.bbRunClick(Sender: TObject);
var
i,N,Sum : Integer;
begin
try // Преобразуем ввод с контролем правильности:
N := StrToInt(edInput.Text);
except // Следующие операторы выполняются, если есть ошибка
ShowMessage('Ошибка ввода целого числа');
dinput.SelectAll; // Выделяем неверный ввод
Exit // Завершаем работу обработчика
end;
edInput.Text :=' ';
edinput.SetFocus;
Sum := 0; // Начальное значение Sum
for i := 1 to N
do // Цикл формирования суммы
Sum := Sum+i;
mmOutput.Lines.Add('Сумма всех целых чисел '+'в диапазоне 1...'+IntToStr(N)+' равна '+IntToStr(Sum));
end;
Комментарий к программе
С помощью зарезервированных слов try (попробовать), except (исключение) и end реализуется так называемый защищенный блок. Такими блоками программист может защитить программу от краха при выполнении потенциально опасного участка В отличие от предыдущих программ мы не изменили компонент edinput, поэтому пользователь может ввести в нем произвольный текст. Если этот текст не содержит правильное представление целого числа, попытка выполнить оператор
N := StrToInt(edInput.Text);
в обычной программе привела бы к аварийному завершению программы. Если ошибки нет, все операторы, стоящие за except и до end, пропускаются и обработчик нормально срабатывает. Если обнаружена ошибка, возникает так называемая исключительная ситуация (исключение) и управление автоматически передается оператору, стоящему за except, - начинается обработка исключения.
5. Учебная программа EPSILON
Программа отыскивает так называемое “машинное эпсилон” -такое минимальное, не равное нулю вещественное число, которое после прибавления его к 1,0 еще дает результат, отличный от 1,0. Для хранения и преобразования дробных чисел в Object Pascal предназначены так называемые вещественные типы. В учебной программе используется один из этих типов - Real, занимающий 8 смежных байт и представляющий дробные (вещественные) числа в диапазоне от 10-324 до 10+308 с точностью 15... 16 значащих цифр.
Дело в том, что внутреннее представление типа Real может дать “лишь” приблизительно 1019 возможных комбинаций значащих разрядов в отведенных для него 8 байтах. Конечно же, это очень большое число, но оно несопоставимо с бесконечным множеством вещественных чисел. Аппроксимация бесконечного непрерывного множества вещественных чисел конечным (пусть даже и очень большим) множеством их внутреннего машинного представления, и приводит к появлению “машинного эпсилон”.
Для нового приложения (опция File/New/Application) создайте такой обработчик bbRunСlick:
procedure TfmExample.bbRunClick(Sender: TObject) ;
var
Epsilon: Real;
begin
Epsilon := 1;
while l+Epsilon/2>l do
Epsilon := Epsilon/2;
IbOutput.Caption := 'Машинное эпсилон = '+FloatToStr(Epsilon)
end;
6. Учебная программа CALC
Составим программу, имитирующую работу микрокалькулятора. Программа вводит два операнда и знак математического действия, после чего показывает результат (см. рис. 1.7). Для упрощения ввода операндов и знака поместим на нашу учебную форму еще два компонента. Выберите File | New | Application, переименуйте компонент lbinput в lbinput1. Справа от компонента lbinput1 поместите компонент comboBox (страница Standard), назовите его cbSign (свойство Name). Раскройте диалоговое окно свойства items этого компонента и введите четыре строки со знаками математических действий в такой последовательности: +,-,*,/. И, наконец, справа от cbSign разместите еще один компонент Edit (страница Standard) и назовите его edinput2.
Для обработчика события bbRunciick введите такой текст:
procedure TfmExample.bbRunClick(Sender: TObject);
var
X, Y, Z: Real;
begin
{ Блокируем работу, если не введены операнды и не выбрано действие }
if (edInputl.Text='') or (edlnput2.Text='') or (cbSign.Itemlndex<0) then Exit;
// Проверяем правильность ввода 1-го операнда:
try // Начало защищенного блока
Х := StrToFloat(Trim(edinputi.Text));
except // Обработка ошибки
ShowMessage('Ошибочная запись числа: '+edlnputl.Text);
edinputi.SelectAll;
Exit;
end; // Конец защищенного блока
// Проверяем правильность ввода 2-го операнда:
try // Начало защищенного блока
Y := StrToFloat(Trim(edlnput2.Text));
except // Обработка ошибки
ShowMessage('Ошибочная запись числа: '+edlnput2.Text);
edlnput2.SelectAll ;
Exit;
end;
// Конец защищенного блока
// Все правильно: вычисляем результат
case cbSign.Itemlndex of
0: Z := X + Y;
1: Z := X - Y;
2: Z := X * Y;
3: try
Z := X / Y; except
Z := l.le+38; // Бесконечность при делении на О
end;
end;
// Показываем результат
IbOutput.Caption := Trim(edinputi.Text)+' '+ cbSign.Items[cbSign.Itemlndex]+' '+ Trim(edlnput2.Text)+' = ';
if Z >= l.le+38 then
IbOutput.Caption := IbOutput.Caption+'бесконечность'
else
IbOutput.Caption := IbOutput.Caption+FloatToStr(Z);
mmOutput.Lines.Add(IbOutput.Caption) ;
// Очищаем ввод edinputi.Text := '';
ed!nput2.Text := ' ';
cbSign.ItemIndex := -1;
end;
Комментарий к программе
Поскольку правильная форма записи вещественного числа гораздо богаче формы записи целого, использовать однострочный редактор с маской для фильтрации вещественных чисел невозможно, поэтому в программе используются обычные редакторы edInput1 и edInput2. В этой ситуации контроль за правильностью записи приходится возлагать на функцию преобразования strToFloat (эта функция преобразует строку в вещественное число). Если функция обнаружит ошибку в записи вещественного числа, она инициирует исключительную ситуацию, которая обычно приводит к аварийному завершению работы программы. Чтобы этого не произошло, используются защищенные блоки. Для выбора операции в программе используется компонент Combовох - раскрывающийся список выбора. Свойство items этого компонента хранит набор строк, которые определяют список выбора. Эти строки пронумерованы начиная с нуля (в нашем случае cbSign.Items[0] = '+', a cbSign. Items [3] = '/'). Номер выбранной строки содержит свойство cbSign.ItemIndex, а если не выбрана ни одна строка, это свойство содержит -1. Программа контролирует выбор за счет условия: cbSign.ItemIndex<0 при проверке операндов, а также в операторе case:
case cbsign.itemindex of
Если вы ввели строки cbSign.items в нужной последовательности, индекс выбранной строки будет соответствовать номеру операции (0 - +, 1- -, 2 - * и 3 - /), и над операндами будет выполнено требуемое действие.
7. Учебная программа AVERAGE
Для иллюстрации приемов работы с массивами составим программу, которая создает массив случайных целых чисел, подсчитывает их среднее арифметическое, а также определяет и выводит на экран минимальное и максимальное из этих чисел.
procedure TfmExample.bbRunClick(Sender: TObject);
const
N = 1000; // Количество элементов массива
MAX_VALUE = 100+1;// Диапазон значений случайных чисел var
m: array [1..N] of Integer; // Массив чисел
i: Integer;// Индекс массива
max,min: Integer; // Максимальное и минимальное число
sum: Real;// Сумма чисел
begin
// Наполняем массив случайными числами:
for i := 1 to N do
m[i] := Random(MAX_VALUE);
// Задаем начальные значения переменных:
sum : = m [ 1 ] ;
max : = m [ 1 ] ;
min := m[1] ;
// Цикл вычисления суммы всех случайных чисел и поиска
// минимального и максимального:
for i := 2 to N do
begin
sum := sum + m[i];
if m[i] < min then
min := m[i]
else if m[i] > max then
max := m[i] end;
// Вычисляем среднее значение и выводим результат:
IbOutput.Caption := 'Мин = '+IntToStr(min)+' Макс = '+ IntToStr(max)+' Среднее = '+FloatToStr(sum/N) ;
end;
Для создания массива используется встроенная функция Random(Max), которая возвращает случайное целое число, равномерно распределенное в диапазоне от 0 до мах-1 (мах - параметр обращения).
8. Учебная программа UPSTRING
Не вдаваясь в дальнейшие подробности, попробуем составить собственную процедуру, чтобы пояснить сказанное. Пусть в этой процедуре преобразуется некоторая символьная строка таким образом, чтобы все строчные буквы заменялись соответствующими прописными. В Object Pascal имеется стандартная функция upcase, которая выполняет аналогичные действия над одиночным символом. Наша процедура (назовем ее upString) будет преобразовывать сразу все символы строки, причем сделаем ее пригодной не только для латинских букв, но и для букв русского алфавита [ В Delphi имеется стандартная функция AnsiUpperCase, реализующая те же действия.].
Разработку программы проведем в два этапа. Сначала сконструируем основную (вызывающую) часть программы. Ее действия очень просты: она должна получить входную строку из компонента edinput, преобразовать ее с помощью процедуры upString в выходную строку и поместить результат в lboutput.Text. Эти действия нетрудно запрограммировать в обработчике bbRunclick:
procedure TfmExample.bbRunClick(Sender: TObject);
procedure UpString(stinp: String; var stOut: String);
{ Эта процедура преобразует все буквы строки stinp в прописные и помещает результат в выходную строку stOut }
begin
stOut:= stinp;
end; // UpString
var
SI, S2: String;
begin
SI := edinput.Text; // Получаем исходную строку
UpString(SI,S2); // Преобразуем ее
lbOutput.Caption := S2; // Выводим результат
edinput.Text := '' ;
edinput.SetFocus ;
end;
В этой программе используется замещение процедуры UpString так называемой “заглушкой”, т. е. процедурой, в которой на самом деле не осуществляется нужных нам действий, а выходная строка просто копирует входную. Заметим, что перед параметром stout, с помощью которого в вызывающую программу возвращается результат преобразования, стоит зарезервированное слово var. Именно таким способом компилятору указываются те параметры, в которых процедура возвращает вызвавшей ее программе результат своей работы.
Приступим к разработке алгоритма процедуры. Для этого учтем, что в соответствии с принятой в Windows кодировкой символов (так называемой ANSI-кодировкой) символы кириллицы (русского алфавита) располагаются сплошным массивом от “А” до “я”, за исключением “ё” и “Ё”, которые предшествуют “А”. Кроме того, символ “я” имеет внутренний код 255, т. е. максимально возможное значение одного байта (для каждого символа строки выделяется по одному байту).
Вот возможный вариант процедуры:
Procedure UpString(stinp: String; var stOut: String);
{ Эта процедура преобразует все буквы строки stinp в прописные и помещает результат в выходную строку stOut }
var
k: Integer;// Параметр цикла
begin
stOut := stinp;
// Цикл побуквенного преобразования
for k := 1 to Length(stOut) {Length - длина строки} do
begin
stOut[k] := UpCase(stOut[k]); // Преобразуем латиницу
if stOut[k] >= 'a' then // Строчная буква кириллицы?
st0ut[k] := // Да: преобразуем ее
Chr(ord('A') + ord(st0ut[k]) - ord('a'));
if stOut[k]='e' then
stOut[k] := 'Ё'; // Преобразуем ё в Ё
end;
end; // UpString
Комментарий к программе
В процедуре вначале с помощью оператора
stOut := stinp;
исходная строка копируется в выходную строку. Затем реализуется циклический перебор всех символов выходной строки для преобразования букв. Для доступа к отдельным символам строки используется замечательное свойство типа данных string, позволяющее рассматривать строку как набор (массив) символов. Первый символ этого набора имеет индекс 1, второй - 2 и т. д. Индекс указывается сразу за именем строки в квадратных скобках. Таким образом, stOut [i] - это г-ный символ строки stOut. Перебор символов реализован в виде счетного цикла от 1 до длины входной строки stOut (эта длина получается с помощью стандартной функции Length), в ходе которого каждый символ сначала преобразуется функцией UpCase (эта функция возвращает прописную латинскую букву для строчной буквы, передаваемой ей в параметре вызова; функция не работает с кириллицей). Затем осуществляется проверка принадлежности буквы к русской строчной (оператор if st0ut[k] >= 'a' then; символ “а” - русская буква) и осуществляется необходимая коррекция ее внутреннего кода. При коррекции используются отмеченные выше свойства непрерывности и монотонности массивов кодов, т. е. за “А” идет “Б”, за “Я” - “а”, за “а” - “б” и т. д. Стандартная функция ord возвращает внутренний код символа, который передается ей в качестве параметра обращения, а функция chr преобразует код в символ. Поскольку буква “ё” стоит особняком, ее преобразование осуществляется отдельным оператором.
Рассмотрим иной способ реализации той же программы - оформим алгоритм преобразования в виде функции:
procedure TfmExample.bbRunClick(Sender: TObject) ;
Function UpString(stinp: String): String;
{ Эта функция преобразует все буквы строки stinp в прописные и помещает результат в выходную строку Result }
var
k: Integer; // Параметр цикла
begin
Result := stinp;
// Цикл побуквенного преобразования
for k := 1 to Length(Result) do
begin
Result[k] := UpCase(Result[k]);// Преобразуем латиницу
if Result[k] >= 'a' then // Строчная буква кириллицы?
Result[k] := // Да: преобразуем ее
Chr(ord('A') + ord(Result[k]) - ord('a'));
if Result[k]='e' then
Result[k] := 'Ё'; // Преобразуем ё в Ё
end;
end; // UpString
begin
{ В следующем операторе исходная строка edinput. Text преобразуется и помещается в выходную строку IbOutput.Caption: }
IbOutput.Caption := UpString(edinput.Text);
edinput.Text := '';
edinput.SetFocus ;
end;
Комментарий к программе
При описании функции необходимо за списком используемых для ее вызова параметров указать тип возвращаемого ею результата. Именно поэтому за закрывающей круглой скобкой в заголовке функции стоит двоеточие и тип string. В теле любой функции определена стандартная переменная Result, которая трактуется как результат, возвращаемый функцией.
С помощью оператора
Result := stInp;
мы сначала присвоили результату входную строку, а затем в цикле осуществили перебор символов и их коррекцию. Единственный оператор
IbOutput.Caption := UpString(edInput.Text);
заменил сразу три первых оператора в предыдущей реализации программы.
Пример к Л.Р. №1
private
{ Private declarations }
A:array [1..3,1..3] of integer;
i,j:integer;
pol,otr:integer;
procedure TfrmExample.bbRunClick(Sender: TObject);
var i,j:integer;
begin
pol:=0;otr:=0;
for i:=1 to 3 do
for j:=1 to 3 do
begin
a[i,j]:=random(10)-random(5);
memo1.Lines.Add(inttostr(a[i,j]));
end;
for i:=1 to 3 do
for j:=1 to 3 do
if a[i,j]>=0 then
begin
pol:=pol+1;
memo2.Lines.Add(inttostr(a[i,j]));
end
else
begin
otr:=otr+1;
memo3.Lines.Add(inttostr(a[i,j]));
end;
memo2.Lines.Add('pol='+inttostr(pol));
memo3.Lines.Add('otr='+inttostr(otr));
end;
Задание
1. Циклы. Функции и процедуры.
1.1. Увеличить ширину и длину формы в цикле с интервалом по времени (объект Timer).
1.2. Увеличить размер шрифта и значение для каждой цифры, вводимой с новой строки.
1.3. Изменять положение формы на экране с интервалом по времени (объект Timer).
1.4. Используя объект Label или Text, а также Timer создать бегущую строку.
1.5. Используя элемент управления ListBox создать список путем добавления элементов списка в цикле. Название элемента списка вводить, используя InputBox.
1.6. Используя конструкцию Select Case- End Case, объекты TextBox и Label создать программу в которой по введенному названию цвета в TextBox, закрашивается объект Label в указанный цвет.
1.7. Используя конструкцию If...Then...Else, объекты TextBox и Label создать программу в которой по введенному названию цвета в TextBox, закрашивается текст Label в указанный цвет.
1.8. Используя конструкцию With изменить введенную запись по нескольким параметрам.
1.9. Создайте форму с несколькими текстовыми окнами и двумя кнопками. Для одной кнопки с надписью Добавить написать подпрограмму, добавляющую запись, для другой кнопки- удаление записи.
1.10.Создать функцию, возвращающую значение дюйма для введенного сантиметра. Чтобы создать это приложение, вызовите функцию в коде события Click CommandButton и передайте ей значение из тесктового окна в качестве параметра. Используйте функцию Val(), чтобы преобразовать текст в число, а для обратного преобразования- функцию Str().
1.11.Создать приложение для угадывания чисел. Использовать конструкцию IF-END IF, операторы MsgBox, InputBox.
1.12.Используя циклы создать приложение в котором изменяется размер и цвет шрифта введенного символа или буквы.
1.13. Заполнить два массива в цикле и вывести на экран сначала четные, потом нечетные числа.
1.14. Создать подпрограмму, заполняющую случайным образом цифрами текстовые окна, и подпрограмму очищающую эти окна.
1.15. Создать приложение в которой форма заполняется числами по порядку и по диагонали(до середины формы размер шрифта возрастает и далее уменьшается).
1.16. Создать приложение, в котором происходит сначала увеличение формы до экранного размера, а затем уменьшение до минимального размера, при этом цвет формы постоянно меняется.
1.17. То же самое задание 1.16 для введенной с клавиатуры буквы, символа, слова.
1.18. Задание с клавиатуры атрибутов для формы: ширины, длины, положения, которые должны медленно изменяться.
1.19. Создать приложение, в котором предусмотреть заполнение формы числами по порядку, в случае изменения размера формы, форма должна дальше заполняться числами.
2. Элементы управления Label, Edit, TextBox, ListBox, ComboBox, Timer.
2.1. Поместите в форму текстовое окно и кнопку. Введите код события Click (Щелчок) кнопки, в которой подсчитывается количество символов, введенного текста в текстовое окно. Вывести сообщение о количестве символов, используя MsgBox. При этом лишние пробелы удаляются.
2.2. Используя TextBox, Label и кнопки Умножить, Разделить, Сложить, Вычесть, а также некоторые математические функции, создать калькулятор.
2.3 Используя объект ComboBox, и методы AddItem, RemoveItem, создать приложение, в котором возможно добавление, удаление и перемещение записей из одной базы данных в другую.
2.4 Используя свойство Multiselect для объекта ListBox, создать приложение в котором можно добавлять, удалять, перемещать и отображать выделенные записи.
2.5 Создать два списка связанных данных. При удалении записи одного из списка, в другом списке соответствующая запись должна удалиться.
2.6 Используя объект Timer, список данных, вводить случайные числа в список через интервалы времени до заданного момента времени.
2.7 Используя объект Timer, необходимо одновременно перемещать форму и изменять цвет формы, размер формы случайным образом.
2.8 Используя объект Timer для задания 2.2 выводить результаты умножения, деления, вычитания и т. д. через интервалы времени.
2.9 Создать упражнение на скорость введения текста, в случае если скорость текста меньше заданной вывести сообщение и соотвествующий бал.
2.10 Используя пример на скорость переключения цветов форме, изменить скорость перемещения и размер формы (рисунка).
2.11 Используя списки, диалоговые окна MsgBox и InputBox создать тестирующую программу.
2.12 Используя списки, создать базу данных “Библиотека”, с выводом записей на экран.
2.13 Используя списки, создать базу данных “Кафедра”, с выводом записей на экран.
2.14 Используя списки, создать базу данных “Банк”, с выводом выборочных записей на экран.
2.15 Используя списки, создать базу данных “Вокзал”, с выводом выборочных записей на экран.
2.16 Используя списки, создать базу данных “ГТС”, с выводом записей на экран.
2.17 Используя списки, создать базу данных “Зарплата”, с выводом записей на экран.
2.18 Используя списки, создать базу данных “Сессия”, с выводом выборочных записей на экран.
2.19 Используя списки, создать базу данных “Предприятие”, с выводом выборочных записей на экран.
Задание 3
Используя элементы управления: переключатели, рисунки и полосы прокрутки, создать приложение, в котором можно загружать рисунок1, рисунок2 в зависимости от положения переключателя.
Используя элементы управления: флажки, графические поля, создать программу, выводящую различные геометрические фигуры.
Используя элементы управления: переключатели и списки дисков, файлов создать программу, в окне списка файлов которой выводятся различные типы файлов(переключатель1 -тип1, переключатель2 -тип2, и т. д.).
Используя элементы управления: графические поля, полосы прокрутки, переключатели изменять параметры: цвет, размер, тип графики и т.д.
Используя элементы управления: графические поля, переключатели, нарисовать на экране типы фигур(переключатель1-круг, переключатель2 -квадрат, и т. д.), при этом должны изменяться радиус, цвет, положение фигуры.
Используя элементы управления: списки дисков, файлов, создать приложение, в котором ищется нужный файл.
Используя элементы управления: флажки, TextBox, продемонстрировать все возможные свойства и методы для элемента TextBox.
Используя элементы управления: флажки, ListBox, продемонстрировать все возможные свойства и методы для элемента ListBox.
Используя элементы управления: флажки, ComboBox, продемонстрировать все возможные свойства и методы для элемента ComboBox.
Используя элементы управления: переключатели, Timer, продемонстрировать все возможные свойства и методы для элемента Timer.
Используя элементы управления: флажки, переключатели, рамки, Label, CommandButton, продемонстрировать все возможные свойства и методы для элементов: флажки, переключатели, рамки, Label, CommandButton.
Используя элементы управления: флажки, рисунки, графические поля, продемонстрировать все возможные свойства и методы для элементов: рисунки, графические поля.
Используя элементы управления: флажки, полосы прокрутки, продемонстрировать все возможные свойства и методы для элемента: полосы прокрутки.
Используя элементы управления: флажки, Line, OLE продемонстрировать все возможные свойства и методы для элементов: Line, OLE.
Используя элементы управления: флажки, Data, продемонстрировать все возможные свойства и методы для элемента: Data.
Используя элементы управления: флажки, сетка(Data Bound Grid Control), продемонстрировать все возможные свойства и методы для элемента: сетка(Просмотр, Копирование и т.д.).
Создать форму данных с возможностью ввода записей(Библиотека).
Создать форму данных с возможностью удаления записей(Пунк обмена).
Создать форму данных с возможностью поиска записей(Ж/д вокзал).
Лабораторная работа №2
Интерфейс
Пример MDI-приложения: Текстовый редактор.
1. Запускаем Delphi. В меню "File" выбираем пункт "New Application".
2. Переименовываем свойство имени формы Name из Form1 в MainForm.
3. Устанавливаем свойство в инспекторе объектов FormStyle в fsMDIForm. Его можно выбрать из ниспадающего списка доступных свойств. Свойство означает, что данное окно будет родительским в MDI-приложении.
4. В палитре компонентов выбираем MainMenu. Это второй компонент слева на вкладке Standart. Помещаем его на проектировщик формы Form1. Дважды щелкаем по нему. Появляется конструктор меню окна. Здесь и далее для того, чтобы вызвать конструктор для размещенного в форме компонента главного меню (MainMenu), необходимо или дважды кликнуть по нему мышкой или дважды кликнуть в Object Inspector по свойству Items. Далее, пользуясь свойством Caption задайте меню такой вид, как на рисунке. Примечание: выбрать изменяемый пункт можно мышкой, для изменения названия выберите в инспекторе объектов свойство Caption, для отделения секций меню линией используйте знак тире в свойстве Caption для нужного пункта меню. Создание меню очень простое. Вы сразу видите результат изменения, добавления или удаления пунктов в редакторе формы. Вы всегда можете пополнить пункты меню, используя дополнения, выделенные пунктирной рамкой. Всегда можно вставить или удалить пункт меню в нужное место. Для этого воспользуйтесь правой клавишей мыши. Выбрать интересующее действие можно из выпадающего меню.
Итак, содержание главного меню:
Файл |
Правка |
Окна |
Помощь |
|
Новый |
Вырезать |
Упорядочить |
О программе |
|
Открыть |
Копировать |
|
|
|
Сохранить |
Вставить |
|
|
|
Сохранить как… |
|
|
|
|
Закрыть |
|
|
|
|
- |
|
|
|
|
Выход |
|
|
|
5. Выбираем пункт меню "Окна" и переименовываем его имя (идентификатор) Name в инспекторе объектов в WindowMenu.
6. Выбираем мышкой форму MainForm. В Object Inspector в свойстве WindowMenu устанавливаем их ниспадающего списка пункт меню WindowMenu. Теперь во время работы приложения все дочерние окна будут списком отображаться в меню "Окна".
7. Поскольку дочерних окон в этом приложении будет много и по внешнему виду они будут подобные, то нет смысла проектировать каждое окно отдельно. Спроектируем одно. Для помещения в проект новой формы выбираем из меню "File" пункт "New Form".
8. Устанавливаем размеры окна Form2 меньшими главного родительского окна.
9. Переименовываем свойство Name для этого окна из Form2 в ChildForm.
10. Устанавливаем свойство дочернего окна для MDI-приложения FormStyle в fsMDIChild.
11. Выбираем из палитры компонентов Memo и устанавливаем его в дочернюю форму ChildForm.
12. Меняем свойство Align для этого компонента на alClient. Он немедленно расширяется на все доступное пространство окна.
13. Далее будем писать событие выбора пункта меню "Новый". При нажатии на него должно появляться дочернее окно. Поступаем следующим образом. Поскольку дочерних окон будет множество, то мы программа должна их автоматически при необходимости создавать. По умолчанию Delphi устанавливает автоматическое создание окна во время запуска приложения. Это избавляет программиста от написания некоторых команд. В данном случае мы все сделаем сами. Выбираем из меню "Project" пункт "Options…". На вкладке Forms снимаем установку "Auto-create forms" для окна ChildForm. Для этого выбираем его и перегоняем одинарной стрелкой в сторону "Available forms". Нажимаем кнопку OK.
14. Сохраняем проект на диске. Для этого проводником Windows создаем отдельную папку для хранения этого примера. В меню "File" выбираем пункт "Save All". Дальше появляются диалоги сохранения модулей окон и файл проекта. Модуль Unit1 родительского окна можно назвать, сохранив его под именем MainUnit. Модуль Unit2 дочернего окна приложения. можно сохранить под именем ChildUnit. Весь проект можно сохранить под именем MyEdit.
15. Теперь напишем в редакторе кода процедуру создания дочернего окна. Выбираем окно MainForm и дважды щелкаем по компоненту MainMenu1. Выбираем пункт меню "Новый". В Object Inspector переходим на вкладку событий Events. Дважды щелкаем по полю, правее OnClick. Или нажимаем Ctrl+Enter. Появляется готовый заголовок процедуры нажатия на пункт меню "Новый". Между begin и end пишем следующую строку:
TChildForm.Create(Self);
Поскольку в этом окне создается другое, то в переименованный модуль MainUnit необходимо подключить ChildUnit. Для этого выбираем из меню "File" пункт "Use Unit…" и указываем модуль ChildUnit. Нажимаем OK.
Дальше сделаем дочернее окно нормально-закрываемым. Для этого необходимо выделить компонент ChildForm (саму проектируемую форму). Но поскольку на этой форме расположен компонент Memo1, который имеет размер всей рабочей области формы, сделать визуально нам это не удастся. Поэтому выбираем прямо из инспектора объектов.
В верхней части Object Inspector есть ниспадающий список, в котором нужно выбрать ChildForm. Далее переходим на вкладку событий Events. Находим событие OnClose (закрытие окна) и дважды щелкаем по пустому полю правее. Создается готовый каркас процедуры закрытия окна с заголовком:
procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
Здесь вносимый в процедуру параметр Action определяет поведение данной формы при закрытии. Он может принимать следующие значения:
caNone - форма не предпринимает никаких действий.
caHide - форма причется от глаз пользователя, но не уничтожается из памяти. Поскольку мы с вами "вручную" (программно) создаем дочернюю форму, то нам нужно ее при закрытии уничтожить из памяти.
caFree - форма закрывается и уничтожается из памяти.
caMinimize - форма минимизируется. Это значение для MDI-дочерних окон установлено по умолчанию.
Пишем внутри созданной процедуры:
Action := caFree;
Теперь запустите приложение на выполнение (F9) и посмотрите на ее работу.
Дальше организуем довольно сложный на первый взгляд процесс загрузки текстового файла. На самом деле сама загрузка файла делается одной строкой. Немного сложнее организовать выбор этого файла.
Итак, открывается файл при выборе пункта меню "Открыть", которое находится в главной форме. Отображаем проектируемую форму MainForm поверх всех окон (Shift+F12). Устанавливаем в форму компонент OpenDialog. Он находится на палитре компонентов на странице Dialogs.
Назначение этого компонента следующее. Во всех текстовых редакторах, как и во многих других программах, прежде чем открыть какой-либо файл, вам предлагается выбрать его из диалогового окна открытия файла. Такое диалоговое окно вы только что установили в программу. Поскольку этот компонент является невизуальным, т.е. он использует стандартный системный интерфейс открытия файлов, его невозможно отобразить в момент проектирования и визуально отредактировать его внешний вид, но тем не менее можно ему задать некоторые свойства.
Выделяем его и в инспекторе объектов устанавливаем следующие свойства:
Свойство Title устанавливает заголовок такого окна. Заносим в это свойство строку "Открыть текстовый файл".
Свойство Filter фильтрует список по расширению в названиях файлов. Нажимаем на троеточие в этом свойстве. На экран выводится окно Filter Editor, в котором можно легко задать все возможные маски файлов. В левой части Filter Name пишется отображаемое в фильтре название. В правой части Filter сам фильтр. Пишем так, как указано на рисунке. Нажимаем на Ok.
Дальше напишем процедуру открытия файла. При выборе соответствующего пункта меню сначала открывается диалоговое окно выбора файла и при успешном выборе создается форма ChildForm, в которой в компонент Memo1 загружается этот файл.
Выбираем пункт меню "Файл" в форме MainForm и выбираем пункт "Открыть". Создается пустая процедура реакции на событие выбора этого меню. В ней пишем:
if OpenDialog1.Execute then // если файл выбран, то выполнять следующее
begin
ChildForm := TChildForm.Create(Self); // создать дочернее окно
ChildForm.Memo1.Lines.LoadFromFile(OpenDialog1.FileName); // загрузить в Memo1 выбранный файл
ChildForm.Caption := OpenDialog1.FileName; // установить заголовок дочернего окна в название файла
end;
Начиная с версии Delphi 4, на странице палитры компонентов Standart есть компонент TActionList. Его назначение, а также другие полезные компоненты можно узнать из урока№ 6. Устанавливаем этот компонент на проектировочную форму MainForm. Дважды щелкаем по нему мышкой или выбираем пункт "Action List Editor" из выпадающего меню по правой кнопке мыши. Открывается окно изменения действий. Нажимаем комбинацию клавиш Ctrl+Ins, или выбираем пункт "New Standart Action" из ниспадаюшего меню на желтой кнопки.
Появляется окно добавления стандартных действий, которые в последствии можно привязать к пунктам меню или кнопкам.
С помощью нажатой кнопки Shift или Ctrl выберите все стандартные действия, которые относятся к категории Window. Это и есть действия управлением состоянием окон. Нажимаем на кнопку Ok. Теперь вы видите, что в списке действий появилась категория Window (в левой части), в которой находятся все выбранные стандартные действия с окнами (в правой части).
По умолчанию все стандартные действия будут иметь названия на английском языке, поэтому будем из русифицировать вручную. Выбираем первый пункт списка действий Arrange1 и меняем свойство Caption на "Упорядочить значки". Здесь вы сразу заметите, что изначально это свойство имеет значение "&Arrange". Знак амперсанта означает, что следующий за ним символ будет подчеркнут. Это свойство полезно для быстрого выбора пункта данного меню с помощью горячей подчеркнутой клавиши, когда меню активизировано (подробнее можно узнать из справочной системы Windows). Вы сами можете назначать свои буквы быстрого доступа к пунктам меню самостоятельно. Скажу только, что за свою многолетнюю практику ни разу не встречал человека, который пользовался бы таким доступом в меню, поэтому в своих программах подчеркнутых букв не делаю. Но вы пожете не пренебрегать правилами хорошего тона в программировани и все делать по правилам.
Подобные документы
История создания и развитие языка программирования Pascal, его версии. Особенности и порядок построения графика функции на языке Turbo Pascal с использованием декартовой системы координат. Блок схема алгоритма процедур, листинг и тестирование программы.
курсовая работа [102,7 K], добавлен 23.12.2011Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.
курсовая работа [1,5 M], добавлен 08.02.2011Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.
курсовая работа [331,9 K], добавлен 18.01.2016Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.
курсовая работа [879,8 K], добавлен 11.02.2016Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.
отчет по практике [961,6 K], добавлен 21.04.2012Использование рекурсии в предметных областях. Рекурсивные процедуры и функции в программировании. Создание алгоритмов для рисования графических изображений с использованием рекурсии в среде программирования Pascal ABC. Примеры рекурсии в графике.
творческая работа [6,7 M], добавлен 01.02.2014История создания и развитие Pascal. Особенности пакета программирования Turbo. его возможности редактора текстов, компилятора и отладчика. Построения программы на языке Turbo Pascal, ее структура, типы алгоритмов, одномерные и многомерные массивы.
курсовая работа [519,3 K], добавлен 25.06.2011Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Значение и применение персонального компьютера и программного обеспечения в профессиональной деятельности. Перечень и содержание работы в системе программирования Pascal и Delphi. Условные операторы, массивы и строки. Общая схема работы с файлами.
отчет по практике [642,2 K], добавлен 04.06.2013Интегрированная среда разработки Delphi и элементы, входящие в ее состав. Математическая модель, алгоритм решения и его свойства. Описание операторов, процедур, функций и методов. Создание приложений по аналитической геометрии и теоретической механике.
курсовая работа [1,8 M], добавлен 26.05.2010