Читаем Delphi. Учимся на примерах онлайн бесплатно
Delphi. Учимся на примерах
Данная книга — продолжение предыдущей книги автора, "Delphi. Только практика". Также как и в "Delphi. Только практика", в данном издании подробно рассмотрены программы для сетей, различные шуточные программы, простые игрушки, некоторые полезные приложения, разработка приложений в стиле Windows XP. В частности, здесь можно найти такие примеры как бесплатная отправка SMS, FTP-клиент, простое шифрование, CGI-сценарии и многое другое. Описаны методы работы с системным реестром Windows и INI-файлами, а также некоторые важные аспекты программирования на системном уровне с применением функций Windows API. Для облегчения понимания программ каждый пример содержит комментарии сложных строк кода. Книга ориентирована как на тех, кто уже имеет опыт создания приложений в Delphi, так и на начинающих программистов. Для начинающих пользователей Delphi в конце книги добавлено приложение с описанием синтаксиса языка программирования Object Pascal.
Статус: Завершена полностью
Компьютеры и Интернет / Программирование, программы, базы данных / Программирование / Книги по ITВ своей первой книге, "Delphi. Только практика", автор рассматривал примеры различных интересных программ. Эта книга является продолжением первой книги. Продолжением, поскольку исходные коды программ, которые рассматриваются в первой и второй книге, не повторяются. Также как и в "Delphi. Только практика", в данном издании подробно рассмотрены программы для сетей, различные шуточные программы, простые игрушки, некоторые полезные приложения, разработка приложений в стиле Windows XP. В частности, здесь можно найти такие примеры как бесплатная отправка SMS, FTP-клиент, простое шифрование, CGI-сценарии и многое другое.
Поскольку рассмотренные примеры достаточно просты, то даже начинающий программист сможет быстро освоить азы написания приложений в Delphi и перейти к разработке собственных проектов (описание синтаксиса языка программирования Object Pascal представлено в приложении Г). Само собой разумеется, что для изучения изложенного в книге материала желательно знать основы работы с Windows, поскольку Delphi — средство разработки программ именно для этой операционной системы.
Структура книги такова, что ее не обязательно читать от начала до конца, — можно просто открыть любую главу и разработать рассматриваемую программу. Все примеры подробно объясняются и содержат комментарии сложных строк кода. Книга будет интересна как опытным программистам, так и тем, кто только начал изучать язык программирования Delphi.
К книге прилагается компакт-диск, содержащий исходные и исполняемые файлы всех рассмотренных программ, а также цветные копии рисунков.
Как известно, интерфейс программ, написанных на Delphi и запускаемых в операционной системе (ОС) Windows XP, при любом стиле оформления будет иметь одинаковый вид. В этой главе будет показано как написать программу, которая будет отображаться в стиле XP.
С помощью любого редактора создайте текстовый файл и введите в нем следующий текст:
Сохраните этот файл под именем с:\xp_style.txt. Затем создайте еще один текстовый файл следующего содержания:
1 24 C:\xp_style.txt
Сохраните этот файл под именем xp_style.rc в каталоге С:\Program file\Delphi\Bin.
⊚ Файлы xp_style.txt и xp_style.rc можно найти на прилагаемом к книге компакт-диске в папке Chapter01.
Примечание
Указанный выше путь к папке Bin предполагает, что Delphi был установлен в каталог, выбранный по умолчанию. Если при установке был выбран другой каталог, то используйте именно его. Далее в книге будет везде использован путь по умолчанию.
Теперь запустим программу C: \Program File\Delphi\Bin\ brcc32.exe, передав ей в качестве параметра имя файла хрstyle.re. Для этого следует перейти в режим командной строки, выполнив команду системного меню Пуск→Выполнить, а затем в диалоговом окне Запуск программы введя команду cmd и нажав клавишу
brcc32.exe xp_style.rc
В результате в каталоге C:\Program file\Delphi\Bin должен появиться ресурсный файл xpstyle.res, который следует подключать к приложению в том случае, когда его требуется оформить в стиле Windows XP.
Проверим, так ли это, создав программу в стиле XP. Откройте диалоговое окно настройки свойств Рабочего стола и выберите тему Windows XP (если она еще не выбрана).
Создайте в Delphi новый проект и разместите на форме компонент Edit категории Standard. Присвойте его свойству Text следующее значение: Все компоненты и сама форма в стиле Windows ХР. Ниже разместите кнопку (компонент Button категории Standard), при нажатии которой будет появляться информационное окно (оно тоже должно быть в стиле XP). Обработчик события OnClick для кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Edit1.Text);
end;
Теперь при нажатии кнопки будет появляться окно, содержащее текст, извлеченный из поля для ввода. Запустим программу на выполнение. Как видим, внешний вид интерфейса никак не изменился, не смотря на то, что выбрана тема Windows XP.
Для того чтобы решить эту проблему найдите в программном модуле раздел implementation (сейчас в нем указано только подключение файла формы *.dfm при помощи директивы {$R *.dfm}). Для того чтобы подключить наш файл ресурсов, следует в разделе implementation добавить строку
{$R xp_style.res}
Теперь можно запустить программу и насладиться интерфейсом ХР (рис. 1.1).
Рис. 1.1. Элементы формы отображаются в стиле Windows XP
Введите в поле какой-либо текст и нажмите кнопку — должно появиться информационное окно, которое также будет отображаться в стиле Windows XP (рис. 1.2). При этом, размер exe-файла увеличился всего лишь на несколько сотен байт.
Рис. 1.2. Информационное окно также отображается в стиле Windows XP
⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter 01.
Разработать программу для работы с файлами. Программа должна предоставлять стандартные функции, используемые при работе с файлами: копирование, перенос, удаление.
Создайте новый проект Delphi. Первым делом разработаем интерфейс программы. Изменим некоторые свойства главной формы. Прежде всего, присвойте соответствующее значение свойству Caption (заголовок формы) — например, Работа с файлами. Поскольку окно нашей программы должно всегда находиться поверх всех остальных окон, следует присвоить свойству FormStyle значение fsStayOnTop. Больше никаких свойств формы изменять не будем.
Разместите в левом верхнем углу формы, один над другим два компонента Label (метка) категории Standard. Для верхней метки присвойте свойству Caption значение Что:, а для второй — Куда:. Рядом с метками разместите по одному компоненту Edit (поле ввода) категории Standard. Присвойте свойству Name (имя) верхнего поля значение from, а свойству Name нижнего — значение where. Свойствам from.Text и where.Text присвойте пути по умолчанию, например: c:\1.txt и d:\2.txt.
Для того чтобы не утруждать пользователя копированием или ручным вводом путей размещения файлов, воспользуемся стандартными диалоговыми окнами открытия и сохранения файлов. Диалоговом окну открытия файла соответствует компонент OpenDialog категории Dialogs, а диалоговому окну сохранения — компонент SaveDialog той же категории. Разместим эти компоненты на форме. Для удобства изменим значение свойства OpenDialog1.Name на Open1, а значение свойства SaveDialog1.Name на Save1.
Справа от полей from и where разместим кнопки вызова диалогового окна обзора (компоненты Button категории Standard). Свойству Caption этих кнопок присвойте значение Обзор или просто поставьте точки. При желании, можете изменить размеры кнопок.
Разместите на форме под полем where компонент Label категории Standard и присвойте его свойству Caption значение Размер файла:. Справа от этой метки разместите еще один компонент Label, очистив для нее свойство Caption — эта метка будет отображать размер обрабатываемого файла.
Ниже разместим две кнопки (компоненты Button), присвоим их свойствам Caption значения Копировать и Вырезать. Под этими кнопками разместим компоненты, которые будут использоваться для выбора и удаления файлов: компонент Edit для ввода пути к файлу, кнопка вызова диалогового окна обзора и кнопка для удаления файла.
Свойству Edit1.Name присвоим значение Del, а свойству Text – путь по умолчанию. Кнопку Обзор разместим справа, а кнопку Удалить файл — под полем Del.
Полученная форма должна соответствовать рис. 2.1.
Рис. 2.1. Форма Работа с файлами
Разработаем процедуру копирования файла. Это можно было бы реализовать средствами WinAPI, однако в этом случае процедура, хотя и была бы менее громоздкой, оказалась бы "привязанной" к системе, что для программ нежелательно, поэтому лучше воспользоваться библиотеками Delphi.
Для начала объявим нашу процедуру (назовем ее doit) как закрытый член класса формы:
type
TForm1 = class(TForm)
...
private
{ Private declarations }
procedure doit;
public
{ Public declarations }
end;
Реализацию процедуры создадим в разделе implementation:
Примечание
Здесь и далее при разработке описанных в книге программ комментарии, при желании, можно не вводить. Текст, обязательный для ввода, выделен в листингах полужирным шрифтом.
procedure TForm1.doit;
var
f1, f2: file of Byte; //Работа с первым и вторым файлом
сор: Byte; //Для побайтового копирования
sizez: LongInt; //Хранит размер файла
begin
{$I-} //Отключаем директиву, которая отслеживает ошибки
//ввода/вывода
try //Начало блока обработки исключений
//Связываем файловую переменную f1 с первым файлом
AssignFile(f1, from.Text);
//Связываем файловую переменную f2 со вторым файлом
AssignFile(f2, where.Text);
Reset(f1); //Открываем первый файл на чтение
sizez:= Trunc(FileSize(f1)); //Определяем размер файла
//Отображаем размер файла для пользователя
Label4.Caption:= IntToStr(sizez div 1024) + 'Кб';
{Создаем второй файл или перезаписываем его, если он уже существует}
Rewrite(f2);
while not Eof(f1) do
begin //Пока не достигнут конец первого файла
//Считываем один байт из первого файла
BlockRead(fl, cop, 1);
//Записываем один байт во второй файл
BlockWrite(f2, cop, 1);
end;
CloseFile(f1); //Закрываем первый файл
CloseFile(f2); //Закрываем второй файл
finally;
end;//Конец блока обработки исключений
if IOResult<> 0 //Если возникла ошибка ввода-вывода
then MessageDlg('Ошибка при копировании файла!', mtError, [mbOk],0) //сообщение об ошибке
else begin
{Если ошибок не было, то выводим окно об успешном окончании копирования}
ShowMessage('Успешно скопировано!');
end;
end;
⇘ Различные конструкции языка Object Pascal (комментарии, операторы ветвления, обработка исключений и др.) рассматриваются в приложении Г.
Эта процедура будет использоваться при копировании и переносе файлов. Сначала мы открываем файлы, которые выбрал пользователь, а затем проверяем, не было ли ошибок при их открытии. Если ошибок не было, то отображаем пользователю размер исходного файла и начинаем считывать байты из первого файла, записывая их во второй. Если копирование завершено и ошибок при этом не произошло, то отображаем сообщение об успешном окончании копирования.
Процедура doit вызывается при нажатии кнопки Копировать:
procedure TForm1.Button1Click{Sender: TObject);
begin
doit;
end;
По нажатию кнопки Вырезать должно происходить обычное копирование с последующим удалением скопированного файла:
procedure TForm1.Button5Click(Sender: TObject);
begin
doit;//копируем
DeleteFile(from.Text); //удаляем исходный файл
end;
Теперь создадим процедуры выбора и сохранения файла с помощью стандартных диалоговых окон. Для выбора первого (исходного) файла следует создать следующий обработчик события OnClick (кнопке Button2 соответствует поле from):
procedure TForm1.Button2Click(Sender: TObject);
begin
if Open1.Execute
then from.Text:= Open1.FileName
else ShowMessage('Файл не был открыт');
end;
При нажатии кнопки Обзор открывается диалоговое окно выбора файла (Open1.Execute). Если в этом окне пользователь нажал кнопку Отмена (Open1.Execute = False), то сообщаем ему об этом и не выполняем никаких действий. Если пользователь выбрал файл, то копируем путь к нему в соответствующее поле ввода.
Создадим аналогичный обработчик события для выбора пути назначения при копировании первого файла (кнопке Button3 соответствует поле where):
procedure TForm1.Button3Click(Sender : TObject);
begin
if Save1.Execute
then where.Text:= Save1.FileName





