МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программа на Delphi

    отличие от других методов, может не иметь в секции implementation своего

    кода. Класс, имеющий абстрактные методы, называется абстрактным. Такие

    классы и методы могут ничего не делать, инкаспулируя таким способом доступ

    к методам потомков, например:

    procedure DoSomething; virtual; abstract;

    Обращение к неперекрываемому абстрактному методу вызывает ошибку времени

    выполнения (run time error), например:

    Type

    TClass2 = class(TClass0)

    procedure Paint; virtual; abstract;

    end;

    TClass1 = class(TClass0)

    procedure Paint; override;

    end;

    var

    jClass1: TClass1;

    jClass2: TClass2;

    begin

    jClass1.Paint; // правильно

    jClass2.Paint; // неправильно: обращение к абстрактному методу

    end;

    Каждый класс имеет два особых метода – конструктор и деструктор.

    Конструктор предназначен для создания класса, т. е. для выделения под него

    динамической памяти. Деструктор, наоборот, предназначен для уничтожения

    класса, т. е. для освобождения участка памяти, занятого этим классом. В

    классе TObject имеются стандартные методы Create (создать) и Destroy

    (уничтожить). В этом классе объявлен также метод Free, который сначала

    проверяет корректность адреса и только потом вызывает метод Destroy. В этой

    связи предпочтительнее использовать метод Free вместо метода Destroy.

    Всякий класс по умолчанию содержит переменную Self, в которую после

    выделения динамической памяти помещается адрес класса. Прежде чем выполнить

    обращение к методам класса, его нужно создать. Хотя конструктор и

    деструктор являются процедурами, они объявляются специальными словами.

    Конструктор объявляется словом Constructor, деструктор – словом Destructor.

    Часто для обеспечения доступа к полям предка в конструкторе необходимо

    предварительно создать класс-предок. Это можно сделать c помощью слова

    Inherited.

    Пример:

    type

    TShape = class(TGraphicControl)

    Private {внутренние объявления}

    FPen: TPen;

    FBrush: TBrush;

    procedure PenChanged(Sender: TObject);

    procedure BrushChanged(Sender: TObject);

    public {внешние объявления}

    constructor Create(Owner: TComponent); override;

    destructor Destroy; override;

    ...

    end;

    constructor TShape.Create(Owner: TComponent);

    begin

    inherited Create(Owner); // создание класса-предка TGraphicControl

    Width := 65; // изменение наследуемых свойств TGraphicControl

    Height := 65;

    FPen := TPen.Create; // создание отдельного поля TPen типа class

    FPen.OnChange := PenChanged;

    FBrush := TBrush.Create; // создание отдельного поля TBrush типа class

    FBrush.OnChange := BrushChanged;

    end;

    Некоторые простые классы могут быть созданы и уничтожены без объявления

    конструкторов и деструкторов. Например, если класс является потомком

    TObject, то в нем явно Constructor и Destructor в некоторых случаях

    объявлять нет нужды:

    Type TClassy = class;

    ..

    var Classy: TClassy;

    Classy:= TClassy.Create; {создание класса}

    Classy:= TClassy.Free; {уничтожение класса}

    В языке имеется возможность объявлять в пределах одного класса несколько

    методов с одним и тем же именем. При этом всякий такой метод должен быть

    перезагружаемым (директива overload). Компилятор такие методы

    идентифицирует по своим уникальным наборам формальных параметров. Для того

    чтобы отменить реакцию компилятора Delphi на появление метода с тем же

    именем, каждый такой метод нужно пометить директивой reintroduce. Далее в

    секции implementation необходимо привести коды всех таких методов.

    Пример:

    Type TClassy = class;

    Procedure HH(i, j: byte; var s: String); reintroduce; overload;

    Procedure HH(q: String); reintroduce; overload;

    Procedure HH(a: array oh Integer); reintroduce; overload;

    implementation

    Procedure TClassy.HH(i, j: byte; var s: String);

    Begin

    S:=IntToStr(i + j);

    End;

    Procedure TClassy.HH(q: String);

    Begin

    L2.Cattion:= q;

    End;

    Procedure TClassy.HH(a: array oh Integer);

    Begin

    L1.Cattion:= IntToStr(a[6] + a[4]);

    End;

    Теперь, после обращения к методу по имени TClassy.HH, программа вызовет

    именно тот метод, формальные параметры которого соответствуют фактическим

    параметрам в обращении.

    18.5. Свойства класса

    Свойства, как и поля, являются атрибутами класса. Свойства объявляются с

    помощью слов property, read и write. Слова read и write конкретизируют

    назначение свойства. Синтаксис свойства таков:

    property propertyName[indexes]: type index integerConstant specifiers;

    где propertyName – имя свойства; [indexes] – параметры-имена в форме имя1,

    имя2, ... , имяN: type; index – целая константа; read, write, stored,

    default (или nodefault) и implements – спецификации. Всякое объявление

    свойства должно иметь одну из спецификаций read или write или обе вместе.

    Примеры:

    property Objects[Index: Integer]: TObject read GetObject write SetObject;

    property Pixels[X, Y: Integer]: TColor read GetPixel write SetPixel;

    property Values[const Name: string]: string read GetValue write SetValue;

    property ErrorCount: Integer read GetErrorCount;

    property NativeError: Longint read FNativeError;

    Неиндексированные свойства похожи на обычные поля, а индексированные

    свойства напоминают поля-массивы. В программе свойства ведут себя почти так

    же, как обычные поля. Разница в том, что свойство имеет более ответственное

    назначение. Например, оно может активизировать некоторые методы для

    придания объектам требуемого свойства. Так если изменено свойство шрифта

    какого-либо визуального класса, то смена свойства шрифта повлечет за собой

    перерисовку текста и выполнение ряда сопутствующих операций, которые

    обеспечат классу именно такое свойство.

    Каждое свойство может иметь спецификацию read или write или оба вместе в

    форме

    read fieldOrMethod

    write fieldOrMethod

    где fieldOrMethod – имя поля или метода, объявленного в классе, или

    свойство класса-предка.

    Если fieldOrMethod объявлено в классе, то оно должно быть определено в том

    же классе. Если оно объявлено в классе-предке, то оно должно быть видимо из

    потомка, т. е. не должно быть частным полем или методом класса-предка. Если

    свойство есть поле, то оно должно иметь тип. Если fieldOrMethod есть read-

    спецификация, то оно должно быть функцией без параметров, тип которой

    совпадает с типом свойства. Если fieldOrMethod есть write-спецификация и

    метод, то оно должно быть процедурой, возвращающей простое значение или

    константу того же типа, что тип свойства. Например, если свойство

    объявлено:

    property Color: TColor read GetColor write SetColor;

    тогда метод GetColor должен быть описан как

    function GetColor: TColor;

    и метод SetColor должен быть описан как

    procedure SetColor(Value: TColor);

    или

    procedure SetColor(const Value: TColor);

    Если свойство имеет спецификацию read, то оно имеет атрибут "read only"

    (только для чтения). Если свойство имеет спецификацию write, то оно имеет

    атрибут "write only" (только для чтения).

    18.6. Структура класса

    Всякий класс имеет структуру, которая состоит из секций. Каждая секция

    объявляется специальным зарезервированным словом. К их числу относятся:

    published (декларированные), private (частные), protected (защищенные),

    public (доступные), automated (автоматизированные). Внутри каждой секции

    сначала объявляются поля, затем – свойства и методы.

    Пример:

    type

    TMyClass = class(TControl)

    private

    ... { частные объявления здесь}

    protected

    ... { защищенные объявления здесь }

    public

    ... { доступные объявления здесь }

    published

    ... { декларированные объявления здесь }

    end;

    Секции определяют области видимости компонент класса:

    . Private – компоненты класса доступны только внутри этого класса;

    . Public – компоненты класса доступны в текущем и любом другом модуле,

    который содержит ссылку в списке uses на модуль, в котором объявлен

    класс;

    . Published – то же, что Public, однако в ней должны быть перечислены

    свойства, которые доступны не только на этапе выполнения программы, но

    и на этапе ее визуального конструирования средствами Delphi;

    . Protected – cекция доступна только методам текущего класса и методам

    классов-предков;

    . Automated – секция используется для объявления свойств и методов

    обработки OLE-контейнеров в рамках OLE-технологии.

    Порядок следования секций произволен. Любая из секций может быть как

    пустой, так и объявлена несколько раз в рамках одного класса.

    18.7. Операции над классами

    Над классами разрешено выполнять две операции – is и as.

    1. Операция is. Синтаксис выражения, содержащего операцию is, имеет вид

    object is class

    Это выражение имеет логический тип (boolean) и возвращает True, если

    переменная object имеет тип class класса, иначе – False.

    Пример:

    if ActiveControl is TEdit then

    TEdit(ActiveControl).SelectAll;

    В этом примере: если класс ActiveControl имеет тип TEdit, то будет выполнен

    метод TEdit(ActiveControl).SelectAll.

    2. Операция as. Синтаксис выражения, содержащего операцию as:

    object as class

    Результатом вычисления этого выражения является ссылка на объект того же

    типа, что и тип класса class. При выполнении программы object может иметь

    тот же тип, или тип класса-потомка, или nil.

    Примеры:

    with Sender as TButton do // если Sender имеет тип TButton

    begin // или тип-потомок от TButton

    Caption := '&Ok';

    OnClick := OkClick;

    end;

    (Sender as TButton).Caption := '&Ok'; //свойству Caption переменной

    // Sender типа TButton или его потомка присваивается значение '&Ok'

    Приложение

    Перечень

    отлаженных процедур и функций,

    написанных автором

    Ниже использованы глобальные типы и переменные:

    Type

    CompareType = (Less, Equal, Greater);

    Var

    Lon, Lon2: LongInt;

    Serv: String[255];

    1. Procedure Delay(MilliSec: LongInt);

    {задержка времени на MilliSec миллисекунд}

    Var k: LongInt;

    begin

    k:=GetTickCount; {в модуле Windows.pas}

    While GetTickCount0) then Result:= (Price/Expend-1.0)*100.0

    else Result:= 1.e5;

    end;

    6. Procedure Warn1(S: Variant);

    {Окно с Variant-значением, например Warn1('Процесс закончен')}

    begin

    MessageDlg(S, mtInformation, [mbOk], 0);

    Screen.ActiveForm.Refresh;

    End;

    7. Procedure Warn4(s1,s2,s3,s4: String);

    {то же , что Warn1, но в 4 строки}

    var i,j: byte;

    begin

    i:=Length(s1); j:=i;

    i:=Length(s2);

    if (i>j) then j:=i;

    i:=Length(s3);

    if (i>j) then j:=i;

    i:=Length(s4);

    if (i>j) then j:=i;

    Warn1(Center(s1,j)+''#13#10+''+Center(s2,j)

    +''#13#10''+Center(s3,j)+''#13#10+''+Center(s4,j));

    end;

    8. Function DaNet(S: String): boolean;

    {Окно. Предназначено для вопроса, на который можно ответить, щелкнув

    по одной из кнопок "Да" или "Нет"}

    begin

    DaNet:=MessageDlg(S, mtConfirmation, [mbYes, mbNo], 0)=mrYes;

    Screen.ActiveForm.Refresh;

    end;

    9. Function DaNet4(s1,s2,s3,s4: String): boolean;

    {Окно. То же, что DaNet, только в 4 строки}

    begin

    DaNet4:=MessageDlg(Trim(s1)+''#13#10+''+Trim(s2)+''#13#10''+Trim(s3)

    +''#13#10+''+Trim(s4),mtConfirmation,[mbYes, mbNo], 0)=mrYes;

    Screen.ActiveForm.Refresh;

    end;

    10. Function InOtrReal(i,a,b: real): boolean;

    {Если i в орезке [a, b], то возвращает True}

    begin

    Result:=(i>=a) and (i 0) and (StartPos = Lon);

    end;

    13. Function ChStr(Ch: Char; d: Word): String;

    {создает строку из символа Ch, повторенного d раз}

    begin

    if d>0 then

    begin

    SetLength(Result,d);

    FillChar(Result[1],d,Ch);

    end;

    end;

    14. Function Prop(d: Word): String;

    {создает строку из d пробелов}

    begin

    Result:=ChStr(' ',d);

    end;

    15. Function Pad(s: String; d: Word): String;

    {вставляет справа от строки пробелы, добирая ее до длины d}

    begin

    Serv:=s;

    Lon:=Length(s);

    If (d>Lon) then Serv:=s+Prop(d-Lon);

    Result:=Serv;

    end;

    16. Function PadCopy(s: String; n,d: Word): String;

    {копирует из s начиная с позиции n строку длины d. В случае меньшей

    строки добирает ее до длины d}

    begin

    Serv:=Copy(s,n,d);

    if Length(Serv) < d then Serv:=Pad(Serv,d);

    Result:=Serv;

    end;

    17. Function LeftPad(s: String; d: Word): String;

    {вставляет слева от строки пробелы, добирая ее до длины d}

    begin

    Serv:=s;

    Lon:=Length(s);

    if (d>Lon) then Serv:=Prop(d-Lon)+s;

    Result:=Serv;

    end;

    18. Function Center(s: String; d: Word): String;

    {вставляет слева и справа от строки поровну пробелы, добирая ее до

    длины d}

    begin

    Serv:=s;

    Lon:=Length(s);

    Lon2:=Round(0.5*(d-Lon));

    if (d>Lon) then Serv:=Prop(Lon2)+s+Prop(d-Lon2);

    Result:=Serv;

    end;

    19. Function CompStrings(s1,s2: String): CompareType;

    {сравнение строк: s1s2 - Greater}

    begin

    if (s1s2) then CompStrings:=Greater

    else

    CompStrings:=Equal;

    end;

    20. Function CompReal(r1,r2: Real): CompareType;

    {сравнение вещественных чисел}

    begin

    if (r1r2) then Result:=Greater

    else

    Result:=Equal;

    end;

    21. Procedure IncRe(Var r: Real; h: real);

    begin

    r:=r+h;

    end;

    22. Function LongToStr(L: LongInt; d: byte): String;

    {конвертирует целое в строку длины d}

    begin

    Str(L,Serv);

    Result:=LPad(Serv,d);

    end;

    23. Function Long2Str(L: LongInt): String;

    {конвертирует целое в строку}

    begin

    Str(L,Serv);

    Result:=Serv;

    end;

    24. Function StrLong(st: String): LongInt;

    {конвертирует строку в целое }

    begin

    Val(Trim(st),Lon,Code);

    Result:=Lon; end;

    25. Function Str2Long(st: String; Var L: LongInt): boolean;

    {конвертирует строку в целое. Возвращает True в случае успеха}

    begin

    Val(Trim(st),L,Code);

    Result:=(Code=0);

    end;

    26. Function RealToStr(R: Real; Posle: byte): String;

    {Конвертирует Real в строку, Posle – количество символов в дробной

    части R}

    begin

    Str(R:20:Posle,Serv);

    RealToStr:=Trim(Serv);

    end;

    27. Function Slash(Dir: String): String;

    {ставит в конец пути символ '\'}

    begin

    Serv:=Trim(Dir);

    if (Serv[Length(Serv)]<>'\') then Result:=Serv+'\'

    else Result:=Serv;

    end;

    28. Function ChWinDos(Ch: Char): Char;

    {преобразует русский Windows-символ в русский DOS-символ}

    Var i,j: byte;

    begin

    i:=Ord(Ch);

    Case i of

    168: {Ё} j:=240;

    184: {ё} j:=241;

    192..255: if (i>239) then j:=i-16 else j:=i-64

    else j:=i;

    end;

    Result:=Char(j);

    end;

    29. Function ChDosWin(Ch: Char): Char;

    {преобразует русский DOS-символ в русский Windows-символ}

    Var i,j: byte;

    begin

    i:=Ord(Ch);

    Case i of

    240: {Ё} j:=168;

    241: {ё} j:=184;

    128..175: j:=i+64;

    224..239: j:=i+16

    else j:=i;

    end;

    Result:=Char(j);

    end;

    30. Function StrWinDos(st: String): String;

    {преобразует русскую Windows-строку в русскую DOS-строку}

    Var

    n, i: byte;

    s: ^String;

    begin

    New(s);

    n:=Length(st);

    s^:= '';

    if (n>0) then

    for i:=1 to n do

    s^:= s^+ChWinDos(st[i]);

    Result:=s^;

    Dispose(s);

    end;

    31. Function StrDosWin(s: String): String;

    {преобразует русскую DOS-строку в русскую Windows-строку}

    Var

    n,i: byte;

    s: ^String;

    begin

    New(s);

    n:=Length(st);

    s^:= '';

    if (n>0) then

    for i:=1 to n do

    s^:= s^+ChDosWin(st[i]);

    Result:=s^;

    end;

    32. Function InputStr(const Prompt: String; Var s: String; IsParol: byte):

    boolean;

    {ввод строки. Prompt – пояснение, s – вводимая строка,

    isParol=1, если засекреченный ввод, иначе видимый}

    begin

    Result:=

    KdnInputQuery('Ввод строки', Prompt, s, clBlack, (IsParol=1));

    end;

    33. Function ParolControl(RealParol: String): boolean;

    {возвращает True, если введенная строка совпадает с RealParol}

    var

    b,h: boolean;

    i: byte;

    begin

    St:='';

    i:=0;

    b:=false;

    Repeat

    Inc(i);

    h:=InputStr('Введите пароль ...',St,1);

    if h then b:= (St=RealParol);

    if not b and h then Warn1('Ошибка');

    Until b or (i=3) or (not h);

    Result:=b;

    end;

    34. Function ExistSubDir(SubDir:String; Dir: tPathStr):boolean;

    {устанавливает наличие субдиректории SubDir внутри директории Dir.

    Например, в D:\DIR0001 субдиректории BAR }

    begin

    Result:=DirectoryExists(Slash(SubDir)+Dir);

    end;

    35. Function GetFileSize(const FileName: string): LongInt;

    {размер файла}

    var Sr: TSearchRec;

    begin

    if FindFirst(ExpandFileName(FileName), faAnyFile, Sr) = 0 then

    Result := Sr.Size

    else Result := -1;

    end;

    36. Function FileDateTime(const FileName: string): System.TDateTime;

    {время создания файла FileName, например:

    s:= DateTimeToStr(FileDateTime('c:\KdnBread\Bread.exe'))}

    begin

    Result := FileDateToDateTime(FileAge(FileName));

    end;

    37. Function HasAttr(const FileName: string; Attr: Word): Boolean;

    {имеет ли файл FileName атрибут Attr}

    begin

    Result := (FileGetAttr(FileName) and Attr) = Attr;

    end;

    38. Procedure AppendText(Var f: Text; nF: String);

    {открывает текстовой файл для добавления строк}

    begin

    Assign(f,nF);

    if KdnFS(nF,1)>0 then Append(f) else Rewrite(f);

    end;

    39. Procedure AppendToText(nF,s: String);

    {добавляет строку в конец текстового файла}

    Var f: TextFile;

    begin

    AppendText(f, nF);

    Writeln(f,s);

    CloseFile(f);

    end;

    40. Procedure KdnExec(Command: String);

    {запуск другого приложения, например 'c:\KdnBreadDir\KdnBread.exe'}

    begin

    Serv:=Command+#0;

    If WinExec(@Serv[1], SW_SHOWNORMAL)<32

    then Warn2('Ошибочное завершение WinExec');

    end;

    ЛИТЕРАТУРА

    1. Зуев В. А.. Turbo Pascal 6.0, 7.0. М.: Веста; Радио и связь, 1993. 384

    с.

    2. Епанишников А. М., Епанишников В. А. Программирование в среде Turbo

    Pascal 7.0. М.: Диалог МИФИ, 1993. 288 с.

    3. Сван Т. Основы программирования в среде для Windows 95. Пер. с англ.,

    Киев: Диалектика, 1996. 480 с.

    4. Фаронов В. В. Delphi 4. Учебный курс. М.: Нолидж, 1999. 464 с.

    5. Федоров А. Г. Создание Windows-приложений в среде Delphi. М.: ТОО

    "Компьютер Пресс", 1995. 287 с.

    6. Хендерсон К. Руководство разработчика баз данных в Delphi 2. Киев:

    Диалектика, 1996. 544 с.

    7. Шумаков П. В. Delphi 3 и разработка приложений баз данных. М.: Нолидж,

    1998. 704 с

    8. Справочная система Delphi 5.0 Help.

    Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.