В этом уроке мы напишем облегчённый вариант калькулятора, аналогичный тому, что есть в Windows (рисунок 1). Он будет проводить четыре арифметических действия с целыми числами. Обозначим функциональность нашего калькулятора:
Рисунок 1. Окно приложения
а) б)
Рисунок 2
Здесь мы столкнёмся с новым компонентом - кнопкой SpeedButton (вкладка Additional ). Эта кнопка аналогична компоненту Button , но имеет некоторые особенности.
Имя, которое | Имя, на которое
необходимо изменить |
Что это означает? | |
Edit1 | EditOut | Однострочный редактор для вывода результата | |
SpeedButton1 - | SBtn1 - SBtn10 | Цифровые кнопки | |
SpeedButton11 | SBtnRavno | Кнопка «равно» | |
SpeedButton12 | SBtnС | Кнопка сброса | |
SpeedButton13 | SBtnPlus | Кнопка «плюс» | Определяют тип
операции над числами |
SpeedButton14 | SBtnMinus | Кнопка «минус» | |
SpeedButton15 | SBtnMult | Кнопка «умножить» | |
SpeedButton16 | SBtnDiv | Кнопка «разделить» |
Отметим, что имя компонента SpeedButton изменено на его аббревиатуру - SBtn , т. к. оно слишком длинное.
Листинг 1
Для чего нужна каждая переменная, понятно из комментариев.
Листинг 2
Эта запись означает, что в компонент EditOut к его существующему содержимому будет добавлен заголовок первой кнопки (т. е. «1 »).
Рисунок 3
Прежде всего, всем цифровым кнопкам (кроме кнопки «1 ») назначьте обработчик события OnClick кнопки SBtn1 . Для этого выделите все цифровые кнопки (через клавишу Shift ), кроме первой (рисунок 4а), перейдите в окно Инспектор объектов на вкладку Events и раскройте выпадающий список напротив события OnClick (рисунок 4б). Появится список всех созданных событий для компонентов формы, которые имеют такой же формат процедуры, как и у выбранного компонента (либо компонентов). В нашем случае здесь находится всего одна процедура обработки события OnClick первой кнопки. Выберите её.
Перейдите к окну конструктора формы и выполните двойной щелчок на каждой цифровой кнопке. При этом убедитесь, что всё время происходит обращение к одной и той же процедуре SBtn1Click .
а) б)
Рисунок 4
Ранее мы говорили, что в любой обработчик события передаётся обязательный параметр Sender , типа TObject . Этот параметр как раз и содержит информацию о компоненте, от которого пришло событие. Для выполнения каких-либо операций с этим параметром необходимо привести его к типу того компонента, для которого выполняются операции. Выглядит это следующим образом:
<Тип> (Sender)
Например, приведенные ниже две записи события OnClick кнопки SBtn1 типа TSpeedButton будут функционально аналогичны (приведение типов выделено жёлтым цветом):
EditOut.Text:=editOut.Text + SBtn1.Caption; editOut.Text:=editOut.Text + TSpeedButton(Sender).Caption;
Листинг 2
Воспользуемся этим чудесным параметром и перепишем обработчик события SBtn1Click следующим образом:
Procedure TForm1.SBtn1Click(Sender: TObject); begin editOut.Text:= editOut.Text + TSpeedButton(Sender).Caption; end;
Листинг 3
Отметим, что приведение типов необходимо для того, чтобы программист не смог вызвать свойство или метод, которого нет у обрабатываемого компонента.
Ввод чисел мы уже реализовали. Теперь необходимо запомнить тип операции после нажатия пользователем на соответствующую кнопку (+ – * /). Но как мы определим, на какой из типов операций мы нажали?
Здесь просмотр заголовков функциональных кнопок, как было в случае с цифровыми кнопками калькулятора, нецелесообразен. Причины рассматриваются ниже. Лучше использовать какой-то другой параметр компонента. Идеальным вариантом в этом случае будет свойство, которое есть абсолютно у всех компонентов - Tag , типа Integer . Оно изначально никаких действий над компонентом не производит, и было введено разработчиками среды Delphi для нужд программистов. Присвойте значения для свойства Tag кнопкам операций, как показано на рисунке 5.
Рисунок 5
Таким образом, каждой операции будет присвоен личный номер.
Листинг 4
Поясним код:
Листинг 5
Поясним код:
Листинг 6
Эта кнопка выполняет очистку компонента EditOut .
Если имя компонента слишком длинное, то лучше его сократить.
Глобальные переменные объявляются перед разделом Implementation . Они видны во всём модуле.
Любое событие компонента можно привязать к аналогичному событию другого компонента.
Параметр Sender содержит информацию о типе компонента, от которого пришло событие.
Для выполнения с этим параметром Sender каких-либо операций, необходимо привести его к типу того компонента, для которого выполняются эти операции.
Свойство Tag типа Integer есть у всех компонентов. Оно было введено разработчиками среды Delphi для нужд программистов.
1. Модифицируйте созданный калькулятор так, чтобы он вычислял обратное значение числа (кнопка «1/x ») и корень (кнопка «sqrt »). Если вычисление невозможно, то вывести в однострочном редакторе текст «Ошибка ».
2. Модифицируйте созданный калькулятор для ввода дробных чисел (кнопка « , »). Причём так, чтобы запятую можно было ввести один раз. Если запятая присутствует и была нажата кнопка « , » в другой части числа, то запятая должна «перескочить» в новое место.
3. Модифицируйте созданный калькулятор для возможности изменения знака числа на обратный (кнопка « +/– »).
4. Модифицируйте созданный калькулятор так, чтобы можно было удалять последний символ (кнопка «Del »), вводить два нуля (кнопка «00 ») и вводить число Pi (Кнопка «Pi »).
5. Модифицируйте созданный калькулятор так, чтобы была возможность разделения групп разрядов с сохранением всей функциональности калькулятора. Например, чтобы вместо 3456190 было 3 456 190.
6. Модифицируйте созданный калькулятор так, чтобы в нём была возможность запоминать введенное число (кнопка «W») и отображать его (кнопка «R»). Причём на форме должна находиться метка, где будет отображено сохраненное число.
7. Модифицируйте созданный калькулятор так, чтобы он возводил число в квадрат (кнопка «x^2») в куб (кнопка «x^3») и в любую степень (кнопка «x^y»).
8. Модифицируйте созданный калькулятор так, чтобы он вычислял sin x , cos x , tan x и cotan x . Причём на форме должны быть два компонента RadioButton , в которых бы происходило переключение между размерностью вычисления (радианы либо градусы).
9. Модифицируйте созданный калькулятор так, чтобы числа можно было вводить прямо в окне однострочного редактора, а также с помощью клавиш + – * / выполнять соответствующие операции. Кнопка «= » должна соответствовать клавише Enter.
1. Модифицируйте созданное приложение для работы с двоичными числами (перевод из двоичной системы счисления в десятичную систему и, наоборот, сложение двоичных чисел, операции Not , And , Or , Xor ). Переключение между десятичной и двоичной системами счисления осуществляется через компоненты RadioButton .
2. Модифицируйте созданное приложение для работы со статистическими вычислениями. Для этого на форме должна быть кнопка «Data », при нажатии на которую в массив запоминалось бы введенное число. И кнопки для выполнения над этим массивом следующих операций:
Delphi 8 для Microsoft .NET Framework - это интегрированная среда разработки (Integrated Development Environment), выполняющаяся на платформе Microsoft .NET и поддерживающая полный цикл жизни разработки приложений. Интерфейс среды сильно отличается от интерфейсов предыдущих версий, например от Delphi 7. Ниже мы рассмотрим создание различных типов приложений с помощью этого средства разработки.
После нажатия кнопки «Здравствуй, мир!» вы получите форму.
При создании приложений для платформы Windows может быть выбрана опция VCL (Visual Component Library) Forms Application , которая специально оставлена для совместимости с предыдущими версиями Delphi. Как и в приложении типа Windows Forms Application , на рабочем столе интегрированной среды разработки появится конструктор форм. Обратите внимание, что свойства и события различны для экземпляров объектов классов Form1 и TWinForm (в этом имени видим расхождение с правилами, принятыми в Delphi, - так обычно обозначаются типы) вроде TForm1 и System.Windows.Forms.Form , выполняющих аналогичные функции. При создании новых проектов мы рекомендуем использовать Windows Forms Application , как более соответствующий платформе. Среда разработки автоматически загружает необходимый конструктор форм и палитру инструментов в зависимости от выбора типа приложения.
Сценарий создания приложения типа Windows VCL Application таков:
В результате нажатия кнопки «Здравствуй, мир!» будет получена форма.
Как видно из вышеприведенных форм приложений, несмотря на мелкие отличия, в целом функциональность одинаковая. Отметим также, что в процессе конструирования приложений наборы компонентов, доступных для использования, также различаются. Кроме того, в Delphi 8 имеются и некоторые иные, по сравнению с Delphi 7, языковые конструкции, которые представлены в таблице.
Основные различия в синтаксисе языков Delphi 7 и Delphi 8
Delphi 7 |
Delphi 8 |
Real48 | Double |
Absolute, Addr, @ | Не поддерживается |
GetMem, FreeMem, ReAllocMem | New, Dispose или динамический массив |
Тип object | Тип class |
File of любого типа, включая записи | Streams, serialization, базы данных |
Inline assembly или asm с ключевыми словами | Не поддерживается |
ExitProc | Не поддерживается |
FillChar, Move | Переопределение переменных в цикле |
PChar | String или StringBuilder (тип String в.NET не эффективен для операций конкатенации. Используйте тип StringBuilder) |
ADO, WebBroker, InternetExpress, WebSnap и поддержка XML, связанная с компонентами TXMLTransform | Не поддерживается |
Компоненты с закладки System: OLEContainer, DdeClientConv, DdeClientItem, DdeServerConv, DdeServerItem | Не поддерживается |
Простейшее консольное приложение создается следующим образом:
Ниже приведен пример консольного приложения, которое благодаря директивам {$IFDEF} будет одинаково хорошо работать после компиляции на Delphi for .NET, Delphi 7 или Kylix 3, выдавая соответствующую строку:
program HelloWorld;
{$APPTYPE CONSOLE}
{$IFDEF CLR} // Delphi for .NET
writeln("Hello, .NET world!");
{$IFDEF WIN32} // Delphi 7
writeln("Hello, Win32 world!");
{$IFDEF LINUX} // Kylix
writeln("Hello, Linux world!");
ReadLn; //чтобы задержать выполнение
Следующий пример - консольное приложение, работающее с файлами:
1. Выберите опцию меню File=>New=>Other=>Delphi for .Net Projects Console Application .
2. В секции реализации автоматически сгенерированного каркаса приложения вставьте код.
WriteLn ("Демонстрашка работы с файлами!");
AssignFile(FT, "file-text.txt");
WriteLn(FT, "Hello, developer!");
3. После сохранения и выполнения проекта на экране монитора появится окно приложения.
Отметим два момента, связанных с этим приложением.
Во-первых, хотя в документации ничего не говорится о невозможности работы с нетипизированными файлами, конструкция FB: file of word; не компилируется, а выдается ошибка “Unsupported language feature: typed or untyped file”.
Во-вторых, оператор writeln успешно выводит на экран строку на русском языке, но при аналогичной попытке вывода в файл кодовая страница полученного текста оказывается другой. При работе же с текстовыми файлами проблем с кодовыми страницами нет.
Ниже приводится сценарий, описывающий построение ADO.NET-приложения, использующего шаблон Windows Forms Application и новую технологию BDP.NET, которая включает компоненты, необходимые для конструирования приложений с базами данных:
При переносе приложения на другой компьютер важно, чтобы база данных employee.gdb лежала в определенном месте (например, d:/data) - иначе потребуется переопределять экземпляр компонента bdpConnection1.
Выравнивание таблицы относительно формы можно осуществить с помощью свойств Anchor и Dock .
При добавлении к проекту ссылок командой Add Reference… не допускается наличие пробелов в пути.
Замечание . Если вы хотите инсталлировать Delphi 8 с целью создания приложений ASP .NET, то на компьютере уже должны быть установлены службы Internet Information Services. Если ISI были установлены после Delphi 8, то для корректной работы ASP .NET-приложения следует ввести команду:
aspnet_regiis.exe /i
Для создания приложений ASP .NET:
При конструировании этого приложения проявились две функциональные особенности, свойственные технологии ASP .NET, которые отсутствовали в технологиях разработки Web-приложений до Delphi 8. Первая - ASP .NET позволяет создавать только DLL-приложения, но при этом в случае совмещения отладки через IIS и отладки в среде разработки не требуются постоянные вызовы утилиты iisreset.exe для обеспечения возможности трансляции очередной версии динамической библиотеки.
Вторая - в то же время в случае определения глобальной переменной, так как это было сделано в рассматриваемом проекте, при повторном вызове ресурса сохраняется ее предыдущее значение, а его сброс можно осуществить только применением утилит типа iisreset.exe.
Для переноса данного проекта на другую машину необходимо скопировать директорию HelloWorld в соответствующую директорию, описанную в IIS как виртуальный каталог.
Нажав кнопку Create , нужно сделать упомянутую директорию каталогом приложения (на рисунке выше приведено окно для свойств директории HelloWolrd в ОС Windows 2000 Advanced Server). После выполнения этих действий Web-приложение может быть вызвано на локальной машине командой
В данном практикуме представлены практические работы по созданию консольных приложений в системе программированияDelphi 7.
Цели работы:
Порядок выполнения:
1. Загрузите Delphi 7.
2. Из меню File выберите команду New | Other, затем на вкладке New появившегося диалогового окна New Items - тип создаваемого приложения - Console Application.
Рис.1.1. Выбор создаваемого консольного приложения в окне New Items
Рис.1.2.Шаблон главной процедуры консольного приложения
3. В результате этих действий на экране появится окно Project1.dpr, в котором можно набирать инструкции программы (Рис.1.2). Директива {$APPTYPE CONSOLE} предназначена для компилятора и сообщает ему, что программу нужно генерировать как консольное приложение. Далее используем знания языка Pascal: операторы записывается между begin и end, константы и переменные объявляются выше основной программы, процедуры и функции размещают между объявлением переменных и основной программой. Добавьте в тело программы строчку Writeln("Hello!"). Запустите ее на выполнение, щелкнув по кнопке или нажав клавишу F9 .
4. Быстро появится и исчезнет черное окно. Как следует поступить далее, чтобы можно было “остановить” это окно? Простейший метод - добавить оператор Readln.
Рис.1.3. Окно с кодом программы
5. Запустите программу на выполнение.
Рис.1.4. Результат выполнения программы Console.dpr
6. Сохраните проект в отдельной папке Консоль под именем Console, выбрав пункт меню File-Save All. В момент сохранения проекта имя программы будет автоматически заменено на имя, под которым сохранен проект.
7. Откройте папку Консоль , затем файл Console.dpr - это и есть та основная программа, которая редактируется.
Цель работы: изучить технологию выведения на экран консольного приложения текста на русском языке.
Порядок выполнения:
1. Создайте копию папки Консоль (Практическая работа №1).
2. Переименуйте ее: Консоль_рус.
3. Загрузите файл Console.dpr
4. В программном коде замените команду вывода на Writeln("Здравствуй!"); и запустите программу на выполнение. Наверняка, вместо приветствия вы увидели какую-то “чушь”.
CharToOEM (PСhar(s), PChar(s));
Здесь PChar(s) обозначает адрес символа, с которого начинается строка s. Первый параметр функции - адрес исходной строки, а второй - адрес строки-результата. В данном случае оба адреса совпадают.
Объявите символьную переменную (var s:string;).
Внесите изменения в код основной программы таким образом:
s:= " Здравствуй!";
6. Добавьте модуль Windows в список uses:
Windows, SysUtils;
Рис. 2.1. Окно с кодом программы
7. Запустите программу.
Рис. 2.2. Результат исполнения программы Console_rus.dpr
8. Сохраните программу (Console_rus.dpr) и закройте проект.
Цель работы: научиться создавать консольные приложения для алгоритмов с линейной структурой.
Порядок выполнения:
1. Ознакомьтесь с условием задачи: Создать консольное приложение для вычисления площади прямоугольника.
2. Создайте консольное приложение по предложенному на рис.3.1. образцу:
Рис.3.1. Окно консольного приложения Plosh_pryamoug.exe
3. Сравните свой программный код с листингом 3.1.
Листинг 3.1. Площадь параллелограмма
program Plosh_pryamoug;
{$APPTYPE CONSOLE}
var s,i,h,p:string;
dl,shir,pl:integer; // длина, ширина, площадь
s:= "Площадь прямоугольника";
CharToOEM (PChar(s), PChar(s));
i:="Введите значение длины";
CharToOEM (PChar(i), PChar(i));
h:="Введите значение ширины";
CharToOEM (PChar(h), PChar(h));
p:="Площадь прямоугольника равна ";
CharToOEM (PChar(p), PChar(p));
Writeln(p,pl) ; readln; end.
Цели работы:
Порядок выполнения:
1. Дана задача: Создать консольное приложение для выведения на экран текста:
Здравствуй, мир!
2. Создайте консольное приложение по предложенному на рис.4.1. образцу.
3. Сравните свой программный код с листингом 4.1.
Листинг 4.1.Hello, world! Здравствуй, мир!
program Hello_mir;
{$APPTYPE CONSOLE}
Windows, SysUtils;
WriteLn ("Hello, world!");
s:= "Здравствуй, мир!";
CharToOEM (PChar(s), PChar(s));
Цели работы:
Задача: С клавиатуры вводятся N чисел. Составьте программу, которая определяет количество отрицательных, количество положительных и количество нулей среди введенных чисел. Значение N вводится с клавиатуры (стр.35, № 14 - сборник “Основы информатики и вычислительной техники. 9 класс”, Б.Бурибаев, Р. Дузбаева, А. Махметова, Алматы “Мектеп”, 2005 год).
Листинг 6.1. for_if
{$APPTYPE CONSOLE}
var a,b,n,so,sp,sn:integer; // a -параметр цикла, n - число вводимых чисел, b - вводимое число, so - число введенных отрицательных чисел, sp - число введенных положительных чисел, sn - число введенных нулей.
s1,s2,s3,s4,s5:string;
s1:= "Задайте количество чисел, которые будут введены";
CharToOEM (PChar(s1), PChar(s1));
For a:=1 to n do begin
s2:="Введите любое целое число";
CharToOEM (PChar(s2), PChar(s2));
If b<0 then so:=so+1;
If b>0 then sp:=sp+1;
If b=0 then sn:=sn+1;
s3:= "Число введенных отрицательных_чисел равно";
CharToOEM (PChar(s3), PChar(s3));
s4:= "Число введенных положительных_чисел равно";
CharToOEM (PChar(s4), PChar(s4));
s5:= "Число введенных нулей равно";
CharToOEM (PChar(s5), PChar(s5));
Рис.6.1. Окно созданного консольного приложения for_if.exe
Тема: ПЕРВЫЙ ПРОЕКТ
Цель занятия: использование компонентов Label (метка) и Button (кнопка) палитры компонентов Standard, обработка события OnClick - нажатие кнопки.
Задача №1.
Создать программу, выполняющую следующие действия:
После запуска программы по щелчку мышью на кнопке «Приветствие» появляется сообщение «Первые успехи!». Для выхода из программы необходимо щелкнуть мышью на кнопке «Выход».
Новым в этой работе является:
Этапы разработки программы
1. Откройте новый проект.
2. Разместите в форме экземпляры компонентов: метку Label и две кнопки Button
3. Выделите кнопку Button2, перейдите в Object Inspector на вкладку Properties, найдите свойство Caption (заголовок) и измените Button2 на заголовок
«Выход». Перейдите на страницу Events окна Object Inspector, найдите событие OnClick, справа от него дважды щелкните мышью. Оказавшись в коде программы, точнее, в заготовке процедуры TForm1.Button2Click, напишите лишь одну команду Close; (обязательно поставьте точку с запятой после «Close»).
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
4. Сохраните код программы и проект под именами, например, Unit2.pas и Pr2.dpr.
5. Запустите программу, затем закрыть окно проекта, щелкнув на кнопке «Выход».
6. Выделите форму, в свойстве Caption окна Object Inspector замените слово Form1 на «Мой проект». Это и будет заголовком основного окна программы.
7. Выделите кнопку Button1, в свойстве Caption окна Object Inspector замените слово Button1 на название копки «Приветствие». При необходимости увеличьте длину кнопки.
8. Не снимая выделения с кнопки Button1, перейдите на страницу Events окна Object Inspector и найдите событие OnClick, справа от него дважды щелкните
мышью. Введите следующий код: Label1.Caption:= ’Первые успехи!’;
9. Сохраните проект окончательно, запустите и протестируйте его.
Задача №2.
1. Сделайте шрифт выводимой реплики «Первые успехи!» отличным от стандартного по виду, цвету и размеру.
2. Замените вид кнопки «Выход» на более привлекательный.
3. Сделайте так, чтобы после нажатия кнопки «Приветствие» на экране появлялось сообщение «Первые и не последние!».
4. Запустите исполняемый файл Pr2.exe не в среде Delphi, а в Windows.
Урок - обобщение знаний по теме "Устройство компьютера". Основной акцент делается на устройстве ввода информации в компьютер - клавиатуре. Для работы в графическом редакторе Paint разработаны практиче...
Самостоятельная работа по инструментам форматирования текста и две практические работы в MS Word 2007
Небольшая самостоятельная работа для закрепления материала.Две практические работы по созданию и обработке таблиц в текстовом редакторе....
Листинг подпрограммы
procedure TForm1. RadioButton1Click (Sender: TObject);
var i: Integer;
ComboBox1.Clear;
ComboBox1.Tag:= (Sender as TRadioButton).Tag;
for i:= 0 to 5 do
ComboBox1.Items. Add (ListBox1.Items );
ComboBox1.ItemIndex:= 0;
Image1.Picture. LoadFromFile (ListBox2.Items );
procedure TForm1.FormCreate(Sender: TObject);
RadioButton1Click(RadioButton1);
procedure TForm1.ComboBox1Change (Sender: TObject);
Image1.Picture. LoadFromFile (ListBox2.Items );
Практическая работа № 17
«Вычисление процентов»
Цель работы - с оздать программу, выполняющую следующие действия:
После запуска программы в окне изображается три текстовых поля.
При нажатии кнопки «Очистить» очищаются значения полей. Далее вводятся новые значения в поля. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
1. Открыть новый проект.
2. Разместить на форме экземпляры компонентов: командная кнопка Button , надпись Label , текстовое поле Edit .
Таблица 19.
Выделенный объект | Вкладка окна Object Inspector | Имя свойства/ имя события | Действие |
Установка имени формы «Вычисление процентов» |
|||
Введите название «Считаем проценты!» |
|||
Очистить значение свойства |
|||
Очистить значение свойства |
|||
Очистить значение свойства |
|||
Описать локальные Number, Procent, Prn |
Продолжение таблицы 19. |
|||
Выделенный объект | Вкладка окна Object Inspector | Имя свойства/ имя события | Действие |
Введите название «Очистить» |
|||
Фрагмент программы
Number, Procent, Prn: Real;
procedure TForm1.Button1Click(Sender: TObject);
Number:=StrToFloat(Edit1.Text);
Procent:= StrToFloat(Edit2.Text);
PrN:=0.01*Procent*Number;
Edit3.Text:=FloatToStr(PrN);
procedure TForm1.Button2Click(Sender: TObject);
Практическая работа № 18
«Головоломка №1»
MsoTableGrid" width="657 " style="width:492.85pt;border-collapse:collapse;border:none">
Выделенный объект
Вкладка окна
Object Inspector
Имя свойства/
имя события
Действие
Установка имени формы «Головоломка»
Задайте значение bsSingle
CheckListBox1
(Вкладка Additional)
Задаем состав списка. Щелкнуть на кнопке построителя. Откроется окно String List editor (Редактор списка строк). Введите в список заданные числа через Enter. Нажмите кнопку OK.
Подобрать значение так, что все числа поместились в список (без полос прокруток).
Описать очистку списка. Проверить, установлен флажок или нет. После обновления списка необходимо подсчитать сумму выбранных чисел. Элементы списка выглядят как числа, но являются текстовыми строками (воспользоваться функцией StrToInt).
Продолжение таблицы 20. |
|||
Выделенный объект | Вкладка окна Object Inspector | Имя свойства/ имя события | Действие |
ListBox1 (Вкладка Standard) | Подобрать значение так, что все числа поместились в список (без полос прокруток). Первоначально список пуст. Заполняться он будет при работе программы. |
||
(Вкладка Standard) | Введите текст: «Сумма: 0» |
||
Задайте значение False |
|||
Задайте значение taCenter |
4. Сохраните проект, запустите и протестируйте его.
Листинг подпрограммы
procedure TForm1.CheckListBox1ClickCheck (Sender: TObject);
var i, s: Integer;
for i: = 0 to CheckListBox1.Items. Count-1 do
if CheckListBox1.Checked[i] then
ListBox1.Items. Add (CheckListBox1.Items[i]);
for i:= 0 to ListBox1.Items. Count -1 do
s:= s + StrToInt(ListBox1.Items[i]);
Label1.Caption:= ‘Сумма: ’ + IntToStr(s);
if s = 50 then
Label1.Caption:= ‘Сумма:’ + IntToStr (s);
CheckListBox1.Enabled:= False;
ListBox1.Enabled:= False;
Практическая работа № 19
«Головоломка № 2»
Цель работы - создать компьютерную версию головоломки: из изображенных пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих.
Создать программу, выполняющую следующие действия:
После запуска программы в окне изображаются пять сброшенных флажков. Щелкать разрешено только на сброшенных флажках. Щелчок на установленном флажке не действует. При установке какого-то флажка меняется состояние двух следующих флажков. При этом сброшенные флажки устанавливаются, а установленные - сбрасываются. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
Описание плана разработки программы
1. Открыть новый проект.
2. Разместить на форме экземпляры компонентов: список флажков CheckBox , надпись Label .
3. Выполнить следующие действия:
Таблица 21.
Выделенный объект | Вкладка окна Object Inspector | Имя свойства/ имя события | Действие |
Установка имени формы «Все пять» |
|||
Создать глобальную логическую переменную s. В то время, когда идет обработка события, переменная имеет значение True (да). |
|||
CheckBox1 (Вкладка Standard) | Задать значение «1». |
||
Необходимо работать с флажками, как с массивом. Форма является контейнером для флажков. У объектов-контейнеров имеется свойство Controls (Элементы управления) – массив элементов управления, находящихся в данном контейнере: Controls [i] as TCheckBox. |
|||
Для создания еще пяти флажков можно использовать метод копирования через буфер обмена. |
|||
CheckBox2 | Задать значение «2». |
||
CheckBox3 | Задать значение «3». |
||
CheckBox4 | Задать значение «4». |
||
CheckBox5 | Задать значение «5». |
Продолжение таблицы 21. |
|||
Выделенный объект | Вкладка окна Object Inspector | Имя свойства/ имя события | Действие |
(Вкладка Standard) | Введите текст: «Сумма: 0» |
||
Задайте значение False |
|||
Задайте значение taCenter |
4. Сохраните проект, запустите и протестируйте его.
Листинг подпрограммы
procedure TForm1.FormCreate (Sender: TObject);
procedure TForm1.CheckBox1Click (Sender: TObject);
var Index, i, num: Integer;
if s then Exit; {Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit – немедленный выход из процедуры}
for Index: = 0 to 4 do {Оператор break прерывает выполнение цикла}
if Sender = Controls[i] then break; {Определяется, какой флажок был переключен}
{Когда выполнение цикла завершается, значение переменной Index соответствует переключенному флажку}
{Если значение свойства Checked (Установлен) равно False (Нет), флажок сброшен, а если True (Да) – установлен. Номер флажка в массиве определяется переменной Index}
if not (Controls as TCheckBox).Checked
then (Controls as TCheckBox).Checked:= True {Условие выполнено, если флажок сейчас сброшен, т. е. до щелчка он был установлен}
else {Программирование изменения состояния «дополнительных флажков». Текущий флажок уже переключен}
num:= Index + 1; {Переключение двух следующих флажков}
if Index = 4 then num:= 0; {Изменение состояния нулевого флажка}
{Состояние флажка надо поменять на противоположное}
(Controls as TCheckBox).Checked:= not
{Выполнение проверки на выход за пределы массива}
num:= num + 1; if Index = 3 then num:= 0;
(Controls as TCheckBox).Checked:= not (Controls as CheckBox).Checked;
e:= True; {Головоломка решена, если установлены все пять флажков}
for i:= 0 to 4 do
e:= e and (Controls[i] as TCheckBox).Checked;
{После цикла значение останется равным True, если все флажки установлены}
if e then {Головоломка решена}