Сергей Парижский - Delphi. Учимся на примерах

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Delphi. Учимся на примерах"
Описание и краткое содержание "Delphi. Учимся на примерах" читать бесплатно онлайн.
Данная книга — продолжение предыдущей книги автора, "Delphi. Только практика". Также как и в "Delphi. Только практика", в данном издании подробно рассмотрены программы для сетей, различные шуточные программы, простые игрушки, некоторые полезные приложения, разработка приложений в стиле Windows XP. В частности, здесь можно найти такие примеры как бесплатная отправка SMS, FTP-клиент, простое шифрование, CGI-сценарии и многое другое. Описаны методы работы с системным реестром Windows и INI-файлами, а также некоторые важные аспекты программирования на системном уровне с применением функций Windows API. Для облегчения понимания программ каждый пример содержит комментарии сложных строк кода.
Книга ориентирована как на тех, кто уже имеет опыт создания приложений в Delphi, так и на начинающих программистов. Для начинающих пользователей Delphi в конце книги добавлено приложение с описанием синтаксиса языка программирования Object Pascal.
Осуществлять переход к следующему вопросу мы будем с помощью панелей. Разместите под вариантами ответов пять компонентов Panel категории Standard. Для каждой из них присвойте свойству Caption значение Следующий вопрос>>>>>, свойству Color — значение clMaroon, а свойству Font.Color — значение clWhite. Присвойте им имена (свойство Name) p1, р2, p3, р4 и р5. Для того чтобы убрать выпуклость и привести панель к виду стильной кнопки, изменим значение свойства BevelInner на bvRaised, а свойства BevelOuter — на bvLowered. Для всех панелей, кроме p1, присвойте свойству Visible значение False (изначально будет видна только первая панель).
Поскольку в программе будет предусмотрена возможность динамической загрузки базы вопросов/ответов, нам понадобится диалоговое окно открытия файла. Для этого разместим на форме компонент OpenDialog категории Dialogs и присвоим ему имя Open1 (свойство Name). Кроме того, определите в свойстве Filter следующий фильтр: ini-файлы|*.ini|Все файлы|*.*.
Теперь разработаем меню программы. Для этого разместите на форме компонент MainMenu категории Standard и создайте меню в соответствии с рис. 13.1.
⇖ Разработка меню рассматривается в главе 6, "Программа просмотра рисунков".
Рис. 13.1. Меню для программы-теста
Полученная форма должна примерно соответствовать рис. 13.2.
Рис. 13.2. Форма программы-теста
Разработка программного кода
Для начала, объявим все глобальные переменные:
var
Form1: TForm1;
i, a, n, balls, vopr: integer; {различные счетчики и переменные для подсчета баллов}
dir, dir2, ss, zz, yes: string; {путь к файлу с вопросами, к программе и расшифрованной базе}
win: TIniFile; //переменная для работы с ini-файлами
mass: array[1..100] of integer; {содержит номера уже заданных вопросы, чтобы они не повторялись}
f1, f2: file of char; //переменные для работы с файлами
сор: char; //для работы с каждым символом отдельно
Добавим в раздел uses ссылку на модуль IniFiles, который потребуется для работы с классом TIniFile. Мы также разработаем четыре собственные процедуры. Объявим их как закрытые члены класса формы:
type
TForm1 = class(TForm)
…
private
{ Private declarations }
procedure start; //начало теста
procedure question_select; //выбор вопроса
procedure vars(var variant: integer); {сортировка и определение правильного варианта ответа}
procedureverno(); {проверка: правильно ли ответил пользователь}
public
{ Public declarations }
end;
Теперь создадим сами процедуры в разделе implementation. Процедура Start:
procedure TForm1.start();
begin
Randomize; //Включаем генератор случайных чисел
for i:=1 to n do mass[i] := 0; //n – количеству вопросов
{$I-} //отключаем контроль ошибок ввода/вывода.
//делаем все элементы видимыми для пользователя
Memo1.Visible:= True;
RadioGroup1.Visible:= True;
Label1.Visible:= True;
an1.Visible:= True;
an2.Visible:= True;
an3.Visible:= True;
an4.Visible:= True;
p1.Visible:= True;
p2.Visible:= False;
p3.Visible:= False;
p4.Visible:= False;
p5.Visible:= False;
balls:= 0;
Label2.Visible:= False; //прячем результаты
Label1.Caption:= 'Первый вопрос:';
dir2:= 'C:\base.bsd'; //путь к расшифрованной базе
//копируем зашифрованную базу на диск С:
CopyFile(PChar(ss), PChar(dir2), True);
//связываем переменную f1 с зашифрованным ini-файлом
AssignFile(f1, ss);
//связываем переменную f2 с файлом C:\base.bsd
AssignFile(f2, dir2);
Reset(f1); //открываем первый файл на чтение
Rewrite(f2); //второй – на запись
while not Eof(fl) do
begin //пока не достигнут конец первого файла
Read(f1, cop); //считываем один символ из файла
сор:= Chr(Ord(cop) xor 101); //расшифровываем символ
Write(f2, сор); //записываем расшифрованный символ в файл
end;
CloseFile(f1); //закрываем первый файл
CloseFile(f2); //закрываем второй файл
{$I+} //включаем контроль ошибок ввода/вывода
Win:= TIniFile.Create(dir2); //работаем с ini-файлом
//считываем количество вопросов в базе
ss:= Win.ReadString('num', 'num', ss);
//преобразовываем строку в число и записываем значение в n
n:= StrToInt(ss);
vopr:=Random(4) + 1;
//случайное число от 1 до 4
vars(vopr); {передаем число процедуре vars, которая сортирует варианты ответов}
end;
Эта процедура начинает игру. Сначала делаем все элементы видимыми и прячем метку, отображающую результат прохождения теста. Затем открываем файл, содержащий вопросы, и считываем из него по одному символу. Каждый байт расшифровывается особо и записывается в отдельный файл. Далее мы работаем с расшифрованным файлом как с обычным ini-файлом. Первое, что мы считываем, — это общее количество вопросов в базе.
Теперь очередь процедуры question_select:
procedure TForm1.question_seleсt();
label ran; //метка ran для быстрого перехода
begin
Randomize;
ran:
a:=Random(n); //выбираем случайный вопрос из базы
//проверяем: не задавали ли мы этот вопрос ранее
for i:=1 to n do
if mass[i] = a then goto ran;
for i:=1 to n do
if mass[i] = 0 then begin
mass[i]:= а; {записываем номер вопроса, чтобы не задавать его больше }
Break;
end;
//сбрасываем флажки со всех вариантов ответов
an1.Checked:= False;
an2.Checked:= False;
an3.Checked:= False;
an4.Checked:= False;
end;
Эта процедура случайным образом выбирает вопрос. Затем выполняется проверка: не задавался ли этот вопрос ранее. Если мы нашли вопрос, который еще не был задан, то задаем его и помечаем как уже заданный, чтобы не задавать его больше в текущей сессии.
Процедура verno:
procedure TForm1.verno();
begin
if an1.Checked then
if yes = an1.Caption then balls:= balls + 1;
if an2.Checked then
if yes = an2.Caption then balls:= balls + 1;
if an3.Checked then
if yes = an3.Caption then balls:= balls + 1;
if an4.Checked then
if yes = an4.Caption then balls:= balls + 1;
end;
Здесь мы сравниваем правильный ответ с вариантом, который дал пользователь, и в случае правильного ответа пополняем счетчик правильных ответов.
Процедура vars:
procedure TForm1.vars(var variant: integer);
begin
//вызываем процедуру выбора случайного вопроса question_select();
case variant of
1:
begin
Win:= TIniFile.Create(dir2); //открываем ini-файл
//считываем вопрос
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
//считываем правильный вариант ответа
an1.Caption:= Win.ReadString('A', IntToStr(a), an1.Caption);
//считываем три неверных варианта к данному вопросу
an2.Caption:= Win.ReadString('W1', IntToStr(a), an2.Caption);
an3.Caption:= Win.ReadString('W2', IntToStr(a), an3.Caption);
an4.Caption:= Win.ReadString('W3', IntToStr(a), an4.Caption);
Win.Free; //освобождаем ini-файл
//помечаем первый вариант как правильный
yes:= an1.Caption;
end;
2:
begin
Win:= TIniFile.Create(dir2);
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
an2.Caption:= Win.Readstring('A', IntToStr(a), an2.Caption);
an1.Caption:= Win.Readstring('W1', IntToStr(a), an1.Caption);
an3.Caption:= Win.ReadString('W2', IntToStr(a), an3.Caption);
an4.Caption:= Win.ReadString('W3', IntToStr(a), an4.Caption);
Win.Free;
yes: = an2.Caption;
end;
3:
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Delphi. Учимся на примерах"
Книги похожие на "Delphi. Учимся на примерах" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Сергей Парижский - Delphi. Учимся на примерах"
Отзывы читателей о книге "Delphi. Учимся на примерах", комментарии и мнения людей о произведении.