Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по Delphi

  Все выпуски  

Уроки по Delphi


Информационный Канал Subscribe.Ru


*Номер 5* (2004-04-17)

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

Урок 4.

Сегодня мы изучим функции и процедуры. Создадим свою библиотеку.

Давайте рассмотри изначальный проект, пока мы не приложили к нему руки. :)
//------------------------------------------
unit l4; // Заголовок модуля

interface

uses // Заголовки подключаемых модулей
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type // описание типа
TForm1 = class(TForm)
private // скрытый раздел свойств
{ Private declarations }
public // открытый раздел свойств
{ Public declarations }
end;

var // описание переменной
Form1: TForm1;

implementation // Описание свойств

{$R *.DFM} // Подключаемые файлы ресурсов

end.
//------------------------------------------

Представьте себе ситуацию, когда Вы будите писать огромные программы :) и вам
придется некоторые участки кода повторять не один раз! Для этой ситуации и
существуют процедуры и функции. В чем отличия? А в том, что в процедуре есть
только входные значения, а в функции существуют и выходные. Хотя в процедуре не
обязательно есть входные параметры, иногда и они отсутствуют. Давайте напишем
процедуру, которая будет выводить на экран сообщение, состоящее из нескольких частей.
Кидаем на форму 2 Edit'a и кнопку. Пишите в первой строке: "Имя", во второй - "Фамилия".
На кнопке напишите - "Мессага". В обработчике кнопки OnClick пишем:
//------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var s : String;
begin
s:='Имя: '+Edit1.Text+#10#13;
s:=s+'Фамилия: '+Edit2.Text;
MessageDlg(s, mtInformation,[mbOk], 0);
end;
//------------------------------------------

Я думаю что все и так понятно. Поясню тока надпись #10#13 - это перевод строки.
Далее в разделе private объявим процедуру mes_p и функцию mes_f:
//------------------------------------------
...
private
{ Private declarations }
procedure mes_p;
function mes_f:string; // ':string' - показывает программе, что выходным значением функции будет строка.
public
{ Public declarations }
...
//------------------------------------------

Дальше создаем две кнопки с надписями: Процедура(Button2) и Функция(Button3).
Теперь вернемся к нашим баранам, в смысле функции и процедуре :)
Идем в редактор кода, жмем ctrl+shift+c, Делфи создаст заготовки для них:
//------------------------------------------
procedure TForm1.mes_p;
begin

end;

function TForm1.mes_f: string;
begin

end;
//------------------------------------------

Далее пишем:
//------------------------------------------
procedure TForm1.mes_p;
var s : String;
begin
s:='Создано процедурой mes_p'+#10#13;
s:=s+'Имя: '+Edit1.Text+#10#13;
s:=s+'Фамилия: '+Edit2.Text;
MessageDlg(s, mtInformation,[mbOk], 0);
end;

function TForm1.mes_f: string;
var s : String;
begin
s:='Создано процедурой mes_f'+#10#13;
s:=s+'Имя: '+Edit1.Text+#10#13;
s:=s+'Фамилия: '+Edit2.Text;
Result:=s;
end;
//------------------------------------------

В обработчиках кнопках OnClick пишем:
//------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
mes_p;
end;

procedure TForm1.Button3Click(Sender: TObject);
var s : String;
begin
s:=mes_f;
MessageDlg(s, mtInformation,[mbOk], 0);
end;
//------------------------------------------

Тыкаем Ф9 и смотрим. Далее предлагаю написать еще парочку функций, которые будут полезными нам в будущем.
А затем добавим их в СВОЮ библиотеку!
Давайте напишем ОЧЕНЬ полезную функцию. Она будет выдавать число как строку, добавляя необходимое число нулей в начало.
Пример: 1 -> 0001, 2 -> 0002, и т.д. Причем, количество полученных символов, мы будем задавать. Итак, на входе имеем
два целых числа, а на выходе строку. Заголовок будет такой:
function IToS(var a , b : Integer) : String;
Давайте запишем эту строку в раздел private и нажмем ctrl+shift+c.
Пишем функцию:
//------------------------------------------
function TForm1.IToS(var a, b: Integer): String;
var s, ss : String; // Объявили переменные
i : Integer;
begin
s := IntToStr(a); // Преобразовали число в строку
Result:='Error'; // Если были переданы не правильные числа, то в ответ получим ошибку,
// и следующие операторы не будут выполнены.
if Length(s)<=b then // Проверяем
begin
ss:=''; // Обнуляем строку, в которую запишем нужное кол-во ноликов
for i:=1 to b-Length(s) do ss:=ss+'0'; // Пишем нолики
Result:=ss+s; // Складываем строку с ноликами и строку с числом и выдаем ее на выход
end;
end;
//------------------------------------------

Давайте продемонстрируем ее в работе, для этого добавим 3 Едита, и кнопку. Напишем в Едит3.Текст - 100, в 4-ом - 5,
в пятом - ноль. Причем у пятого свойство управления(Enabled) поставим в False. В обработчике кнопки OnClick пишем:
//------------------------------------------
procedure TForm1.Button4Click(Sender: TObject);
Var s, ss: Integer;
Begin
s:=StrToInt(Edit3.Text);
ss:=StrToInt(Edit4.Text);
Edit5.Text:=IToS(s, ss);
end;
//------------------------------------------

Думаю, комментарии тут не нужны.
Теперь давайте займемся созданием своей библиотеки. Для этого закройте все открытые проекты (File->Close All).
Тыкаем File->New. На закладке New выбираем Unit, тыкаем Ок. Перед нами наша будущая библиотека. Давайте
сохраним её под именем Les_LIB.pas. Так она будет выглядеть после сохранения:
//------------------------------------------
unit Les_LIB;

interface

implementation

end.
//------------------------------------------
Давайте напишем процедуру, которая будет при её вызове выдавать сообщение с приветствием "Привет!".
//------------------------------------------
unit Les_LIB;

interface
procedure Hi;

implementation

procedure Hi;
begin
MessageDlg('Привет!', mtInformation,[mbOk], 0);
end;

end.
//------------------------------------------

Вот так все легко и просто! :) в interface'е пишем заголовок, в implementation'е саму функцию. Для того,
чтобы можно было юзать библиотеку из любого проекта, надо:
1) Сохраните и закройте проект библиотеки.
2) Скопируйте Les_LIB.pas в папку ..\Borland\Delphi5\lib

Все. Все готова. Запускайте пример, который вы делали на этом уроке. Переходим в редактор кода и в разделе uses
добавляем Les_LIB. Жмем Ф9 и любуемся ошибкой, которую выдаст Делфи! :) А почему? А потому, что мы не объявили
стандартные модули! Давайте щас допишем в разделе implementation, добавим нужные нам модули:
//------------------------------------------
unit Les_LIB;

interface
procedure Hi;

implementation

uses Inifiles, Sysutils, Forms, Dialogs, Classes; // Помимо необходимого нам Dialogs, я добавил еще несколько.

procedure Hi;
begin
MessageDlg('Привет!', mtInformation,[mbOk], 0);
end;

end.
//------------------------------------------
Опять тыкаем Ф9 и все у нас заработало! Давайте поюзаем написанную функцию. Добавляем на форму еще одну кнопку(5)
с именем Lib, в OnClick'e пишем:
//------------------------------------------
procedure TForm1.Button5Click(Sender: TObject);
begin
Hi;
end;
//------------------------------------------
Ф9 -> наслаждаемся :) Теперь нам надобы перенести из этой проги в нашу библиотеку функцию IToS.
В данный момент у нас открыто окно нашей программы, а также есть окошко нашей библиотеки (спасибо ошибке! :). Если
вам необходимо открыть окошко библиотеки в нормальных условиях, надо подвести курсор в раздел uses на слово Les_LIB,
нажать на правую кнопку мышки и выбрать Find Diclaration...
В раздел interface пишем:
//------------------------------------------
function IToS(var a , b : Integer) : String;
//------------------------------------------

А в разделе implementation пишем туже функцию, что и выше, только обратите внимание, что название функции
пишется без "TForm1.". В библиотеке никаких форм нет.
//------------------------------------------
unit Les_LIB;

interface
procedure Hi;
function IToS(var a , b : Integer) : String;

implementation

uses Inifiles, Sysutils, Forms, Dialogs, Classes;

procedure Hi;
begin
MessageDlg('Привет!', mtInformation,[mbOk], 0);
end;

function IToS(var a, b: Integer): String;
var s, ss : String; // Объявили переменные
i : Integer;
begin
s:=IntToStr(a); // Преобразовали число в строку
Result:='Error'; // Если были переданы не правильные числа, то в ответ получим ошибку,
// и следующие операторы не будут выполнены.
if Length(s)<=b then // Проверяем
begin
ss:=''; // Обнуляем строку, в которую запишем нужное кол-во ноликов
for i:=1 to b-Length(s) do ss:=ss+'0'; // Пишем нолики
Result:=ss+s; // Складываем строку с ноликами и строку с числом и выдаем ее на выход
end;
end;

end.
//------------------------------------------

Вот так. На сегодня хватит! :) Увидимся на следующем уроке.


(c) Юрий М. Крылов, 2003.

Рассылка comp.soft.prog.delphibegin (c)2003-2004 Крылов Ю.М.
Выпуск 5 от 2004-04-17
Подписчиков - 5
Рассылки Subscribe.Ru
Новости сайта My.WAP.F1

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное