ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Програмування. Delphi
         

     

    Інформатика, програмування
    Об'єктно-орієнтоване програмування

    Історично склалося так, що програмування виникло й розвивалося як процедурне програмування, яке передбачає, що основою програми є алгоритм, процедура обробки даних.

    Об'єктно-орієнтоване програмування (ООП) - це методика розробки програм, в основі якої лежить поняття об'єкта, як певної структури, яка описує об'єкт реального світу, його поведінку. Завдання, яке вирішується з використанням методики ООП, описується в термінах об'єктів і операцій над ними, а програма за такого підходу являє собою набір об'єктів і зв'язків між ними.

    Зауваження

    Строго кажучи, для того, щоб розробляти додатки в Delphi на базі надаються середовищем розробки компонентів, знання концепції ООП не є необхідним. Однак для більш глибокого розуміння того, як програма взаємодіє з компонентами, що і чому Delphi додає в текст програми, матеріал даної глави вельми корисний.

    Клас

    Класичний мова Pascal дозволяє програмісту визначати свої власні складні типи даних - записи (records). Object Pascal, підтримуючи концепцію об'єктно-орієнтованого програмування, що дає можливість визначати класи. Клас - це складна структура, що включає в себе крім опису даних опис процедур і функцій, які можуть бути виконані над представником класу - об'єктом.

    Ось приклад опису простого класу:

    TTPerson = class

    Private

    fname: string [15] ;

    f address : string [35] ;

    public

    procedure show;

    end;

    Дані класу називаються полями, процедури і функції - методами. У наведеному прикладі TTPerson - це ім'я класу, fname і faddress - імена полів, show - ім'я методу.

    Зауваження

    Відповідно до прийнятого в Delphi угодою імена полів повинні починатися з літери f (від слова field - поле).

    У програмі опис класу поміщають в розділ опису типів (type).

    Об'єкт

    У програмі представники класу - об'єкти, оголошуються у роздiлi var. Наприклад, так:

    var

    student: TTPerson;

    professor: TTPerson;

    Слід звернути особливу увагу на те, що в Object Pascal об'єкт - це динамічна структура. Змінна-об'єкт містить не дані, а посилання на дані об'єкта. Тому програміст повинен подбати про виділення пам'яті для цих даних.

    Виділення пам'яті здійснюється за допомогою спеціального методу класу - конструктора, яким зазвичай присвоюють ім'я create (створити). Щоб підкреслити особливу роль і поведінку конструктора, в описі класу замість слова procedure використовується слово constructor. Нижче наведено опис класу TTPerson, до складу якого введено конструктор.

    TTPerson = class

    private

    fname: string [15];

    f address: string [35];

    constructor create;// конструктор

    public

    procedure show;// метод

    end;

    Виділення пам'яті для даних об'єкта відбувається присвоюванням значення результату застосування методу-конструктора до типу (класу) об'єкта. Наприклад, після виконання інструкції

    professor: = TTPerson.create;

    виділяється необхідна пам'ять для даних об'єкта professor.

    Крім виділення пам'яті, конструктор, як правило, вирішує завдання привласнення полях об'єкта початкових значень, тобто здійснює ініціалізацію об'єкта. Нижче наведено приклад реалізації конструктора для об'єкта TTPerson.

    constructor TTPerson.create;

    begin

    fname : = '';

    faddress :=''';

    end;

    Реалізація конструктора дещо незвична. По-перше, в тілі конструктора немає звичних інструкцій New, що забезпечують виділення динамічної пам'яті (всю необхідну роботу з виділення пам'яті виконує компілятор). По-друге, формально, конструктор не повертає значення, хоча в програмі звернення до конструктора здійснюється як до методу-функції.

    Після оголошення та ініціалізації об'єкт можна використовувати, наприклад, встановити значення поля об'єкту. Доступ до поля об'єкта здійснюється зазначенням імені об'єкта та імені поля, які відокремлюються один від одного крапкою. Хоча об'єкт є посиланням, проте правило доступу до даних за допомогою посилання, згідно з яким після імені змінної, що є посиланням, треба ставити значок ^ на об'єкти не поширюється. Наприклад, для доступу до поля fname об'єкта professor замість

    professor ^. Fname

    треба писати

    professor.fname

    Очевидно, що такий спосіб доступу до полів об'єкта більш природний.

    Якщо в програмі деякий об'єкт більше не використовується, то можна звільнити пам'ять, займану полями цього об'єкту. Для виконання цієї дії використовують метод-деструктор free. Наприклад, щоб звільнити пам'ять займану полями об'єкта professor, достатньо записати

    professor.free;

    Метод

    Методи класу (процедури та функції, оголошення яких включено в опис класу) виконують дії над об'єктами класу. Щоб метод був виконаний, треба вказати ім'я об'єкту і ім'я методу, відокремивши одне ім'я від іншого крапкою. Наприклад, інструкція

    professor . Show;

    викликає застосування методу show до об'єкта professor. Фактично інструкція застосування методу до об'єкта - це специфічний спосіб запису інструкції виклику процедури.

    У програмі методи класу визначаються точно так само, як звичайні процедури та функції, за винятком того, що ім'я процедури або функції, що є методом, складається з двох частин: імені класу, до якого належить метод, і імені методу. Назва класу від імені методу відокремлюється крапкою.

    Нижче наведено приклад визначення методу show наведеного вище класу TTPerson.

    // метод show класу TTPerson

    procedure TTPerson. show;

    begin

    ShowMessage ( 'Назва:' + fname + # 13 + 'Адреса:' + faddress);

    end;

    Слід звернути увагу на те, що в інструкціях методу доступ до полів об'єкта здійснюється без зазначення імені об'єкта.

    Інкапсуляція і властивості об'єкта

    Під інкапсуляцією розуміється приховування полів об'єкта з метою забезпечення доступу до них тільки за допомогою методів класу.

    У Object Pascal обмеження доступу до полів об'єкта реалізується за допомогою властивостей об'єкта. Властивість об'єкта характеризується полем, що зберігає значення властивості, і двома методами, що забезпечують доступ до поля властивості. Метод встановлення значення властивості називається методом запису властивості (write), метод отримання значення властивості називається методом читання властивості (read).

    В описі класу перед ім'ям властивості записують слово property (властивість). Після імені властивості вказується його тип, потім імена методів, що забезпечують доступ до значення властивості. Після слова read вказується ім'я методу, що забезпечує читання властивості, після слова write - записи властивості ім'я методу. Нижче наведено приклад опису класу TTPerson, що містить дві властивості: Name і Address.

    type

    TName = string [15] ;

    TAddress = string [35] ;

    TTPerson = class

    Private

    FName: Tname;// значення св-ва Name

    Faddress: TAdress;// значення св-ва Address

    Constructor Create (Name: Tname);

    Procedure Show;

    Function GetName: TName;

    Function GetAddress: TAddress;

    Procedure SetAddress (NewAddress: TAddress);

    Public

    Property Name: Tname

    read GetName;

    Property Address: Taddress

    read GetAddress

    write SetAddress;

    end;

    У програмі для установки значення властивості не обов'язково записувати інструкцію застосування до об'єкта методу установки значення властивості, можна записати звичайну інструкцію присвоювання значення властивості. Наприклад, щоб привласнити значення властивості Adress об'єкта student, достатньо записати

    Student.Address: = 'С. Петербург, вул.Садова 21, кв. 3 ';

    Компілятор перетранслірует наведену інструкцію присвоювання значення властивості до інструкції виклику методу

    Student.SetAddress ( 'С. Петербург, вул. Садова 21, кв .3'), •

    Зовні використання властивостей у програмі нічим не відрізняється від використання полів об'єкта. Разом з тим між властивістю і полем об'єкта існує принципова відмінність: при визначенні та читанні значення властивості автоматично викликається процедура, яка виконує певну роботу.

    У програмі на методи властивості можна покласти деякі додаткові завдання. Наприклад, за допомогою методу можна перевірити коректність привласнюються властивості значень, встановити значення інших, логічно пов'язаних з властивістю, полів, викликати допоміжну процедуру.

    Оформлення даних об'єкта як властивості дозволяє обмежити доступ до полів, що зберігають значення властивостей об'єкта, наприклад, можна вирішити тільки читання. Щоб інструкції програми не могли змінити значення властивості, в описі властивості треба вказати тільки ім'я методу читання. Спроба присвоїти значення властивості, призначеному лише для читання, викликає помилку часу компіляції. У наведеному вище описі класу TTperson властивість Name є тільки для читання, а властивість Address - для читання і запису.

    Встановити значення властивості, захищеного від запису, можна під час ініціалізації об'єкту. Нижче наведені методи класу ттрегзоп, які забезпечують створення об'єкта класу ттрегзоп і доступ до його властивостями.

    // конструктор об'єкту TTPerson

    Constructor TTPerson.Create (Name: TName);

    begin

    FName : Name; end;

    // метод отримання значення властивості Name

    Function TTPerson.GetName;

    begin

    Result : = FName;

    end;

    // метод отримання значення властивості Address

    Function TTPerson.GetAddress;

    begin

    Result: = FAddress;

    end;

    // метод зміни значення властивості Address

    Procedure TTPerson.SetAddress (NewAddress: TAddress);

    Begin

    if FAddress = ''

    then FAddress: = NewAddress;

    end;

    Наведений конструктор об'єкту TTPerson створює об'єкт і встановлює значення поля FName, що визначає значення властивості Name.

    Інструкції програми, які забезпечують створення об'єкта класу TTPerson і установку його властивості, можуть бути, наприклад, такими:

    student : = TTPerson . create ( 'Іванов');

    student.address: = 'вyл. Садова, д.З, кв.25 ';

    Спадкування

    Концепція об'єктно-орієнтованого програмування припускає можливість визначати нові класи за допомогою додавання полів, властивостей і методів до вже існуючих класів. Такий механізм отримання нових класів називається породженням. При цьому новий, породжений, клас (нащадок) успадковує властивості і методи свого базового, батьківського класу.

    В оголошенні класу-нащадка вказується клас з батьків. Наприклад, клас TEmployee (співробітник) може бути породжений від розглянутого вище класу ттрегзоп шляхом додавання поля Department (відділ). Оголошення класу TEmployee в цьому випадку може виглядати так:

    TEmployee = class (TTPerson)

    FDepartment: integer;// номер відділу

    constructor Create (Name: TName; Dep: integer);

    end;

    Укладена в дужки ім'я класу TTPerson показує, що клас TEmployee є похідним від класу TTPerson. У свою чергу, клас ттрегзоп є базовим для класу TEmployee.

    Клас TEmployee має свій власний конструктор, який забезпечує ініціалізацію класу батька та своїх полів. Ось приклад реалізації конструктора класу TEmployee:

    constructor TEmployee.Create (Name: Tname; Dep: integer);

    begin

    inherited Create (Name);

    FDepartment: = Dep;

    end;

    У наведеному прикладі директивою inherited викликається конструктор батьківського класу, потім присвоюється значення полю класу нащадка.

    Після створення об'єкта похідного класу в програмі можна використовувати поля та методи батьківського класу. Нижче наведено фрагмент програми, яка демонструє цю можливість.

    engineer: = TEmployee.create ( 'Сидоров', 413);

    engineer.address: = 'yл.Блохіна, д.8, кв.10';

    Перша інструкція створює об'єкт типу TEmployee. Друга встановлює значення властивості, яке відноситься до батьківського класу.

    Директиви Protected і Private

    Крім оголошень елементів класу (полів, методів, властивостей) опис класу, як правило, містить директиви protected (захищений) і private (закритий), які встановлюють ступінь видимості елементів класу в програмі.

    Елементи класу, оголошені в секції protected, доступні тільки в породжених від нього класах. Область видимості елементів класу цієї секції не обмежується модулем, в якому знаходиться опис класу. Зазвичай в секцію protected поміщають опис методів класу.

    Елементи класу, оголошені в секції private, видимі всередині модуля. Ці елементи не доступні за межами модуля, навіть у похідних класах. Зазвичай в секцію Private поміщають опис полів класу, а методи, що забезпечують доступ до цих полів, поміщають в секцію protected.

    Нижче наведено опис класу TTPerson, до якого включені директиви управління доступом.

    TTPerson = class

    private

    Fname: TName; (значення св-ва Name)

    Faddress: TAddress; (значення св-ва Address)

    protected

    Constructor Create (Name: TName);

    Function GetName: TName;

    Function GetAddress: TAddress;

    Procedure SetAddress (NewAddress: TAddress);

    Property Name: Tname

    read GetName;

    Property Address: Taddress

    read GetAddress

    write SetAddress;

    end;

    Зауваження

    Якщо треба щоб елементи класу були повністю сховані, то визначення класу слід помістити в окремий модуль.

    Поліморфізм і віртуальні методи

    Поліморфізм - це можливість використовувати однакові імена для методів, що входять в різні класи. Концепція поліморфізму забезпечує при застосуванні методу до об'єкта використання саме того методу, який відповідає класу об'єкта.

    Нехай визначені три класи, один з них є базовим для двох інших.

    type// базовий клас

    TPerson = class

    fname: string; (ім'я)

    constructor Create (name: string);

    function info: string;

    virtual;

    end;

    // похідний від базового Tperson

    TStud = class (TPerson)

    fgr: integer; (номер групи)

    constructor Create (name: string; gr: integer);

    function info: string; override;

    end;

    // похідний від базового Tperson

    Tprof = class (TPerson)

    fdep: string; (назва кафедри)

    constructor Create (name: string; dep: string);

    function info: string; override;

    end;

    У кожному з цих класів визначено метод info. У базовому класі за допомогою директиви virtual метод info оголошений віртуальним. Оголошення методу віртуальним дає можливість дочірньому класу зробити заміну віртуального методу своїм власним. У кожному дочірньому класі визначений свій метод info, який заміщає відповідний метод батьківського класу (метод породженого класу, що заміщає віртуальний метод батьківського класу, позначається директивою override). Нижче наведено визначення методу info для кожного класу.

    function TPerson.info: string;

    begin

    result ='';

    end;

    function TStud.info: string;

    begin

    result: = fname + 'гp. '+ IntTostr (fgr);

    end;

    function TProf.info: string;

    begin

    result: = fname + 'каф. '+ fdep;

    end;

    У програмі список людей можна уявити масивом об'єктів класу TPerson.

    list: array [1 .. SZL] of TPerson;

    Зауваження

    Тут слід згадати, що об'єкт - це покажчик.

    Оголосити подібним чином список можна тому, що Object Pascal дозволяє вказівником на батьківський клас присвоїти значення вказівника на дочірній клас. Тому елементами масиву list можуть бути як об'єкти класу TStud, так і об'єкти класу Tprof.

    Виведення списку можна здійснити застосуванням методу info до елементів масиву, наприклад, так:

    st :='';

    for i: = l to SZL do// SZL - розмір масиву-списку

    if list [i] NIL

    then st: = st + info.list [i] + # 13; ShowMessage (st);

    Під час роботи програми кожен елемент масиву може містити як об'єкт типу TStud, так і об'єкт типу Tprof. Концепція поліморфізму забезпечує застосування об'єкту саме того методу, який відповідає типу об'єкта.

    Процедура TForml.Button1click, яка запускається в результаті клацання на кнопці Додати (Button1), створює об'єкт list [n] класу TStud або TProf. Клас створюваного об'єкту визначається станом радіокнопки студент (RadioButton1),

    Процедура TForml.Button2Click, яка виконується в результаті клацання на кнопці Список (Button2), застосовуючи метод info до кожного об'єкту списку (елементу масиву), формує рядок, що представляє собою весь список.

    Класи та об'єкти Delphi

    Для реалізації інтерфейсу Delphi використовує бібліотеку класів, яка, містить велику кількість різноманітних класів, що підтримують форму і різні компоненти (командні кнопки, поля редагування і т. д.).

    Під час проектування форми програми Delphi автоматично додає в текст програми необхідні об'єкти. Якщо відразу після запуску Delphi переглянути вміст вікна редактора коду, то там можна знайти наступні рядки:

    type

    Tform1 = class (TForm)

    private

    (Private declarations)

    public

    (Public declarations)

    end;

    var

    Form1: Tform1

    Цей опис класу початкової, порожній, форми програми та оголошення об'єкта - форми програми.

    Коли програміст, додаючи необхідні компоненти, створює потрібну форму, Delphi формує опис класу форми. Коли програміст створює функцію обробки події форми або її компоненти, Delphi додає оголошення методу в опис класу форми програми.

    Крім класів візуальних компонентів до бібліотеки класів входить клас обробки виняткових ситуацій (помилок), клас загального управління додатком та інші. Розгляд цих класів у завдання даної книги не входить.

    Створення простого текстового редактора

    1. Помістіть компонент Bevel (на сторінці Additional) на нову форму і надайте його властивості Align значення alTop.

    2. На компонент Bevel помістіть чотири кнопки. Озаглавьте їх & 0реn ..., & Save, Save & As ... і E & xit.

    Три крапки в кінці імені є секретний код Windows, що означає, що клацання на кнопці викличе ще один діалог, а не приведе до негайного виконання певної дії.

    3. Помістіть на форму компонент Memo і встановіть в такий спосіб його властивості:

    Властивість Значення

    Align alClient

    ScrollBars ssBoth

    Lines (пусто)

    4. Змініть заголовок форми на My Editor. Потім помістіть на форму компонент OpenDialog і надайте його властивостям дотримуюсящие значення:

    Властивість Значення

    Default Ext ТХТ

    Options.ofHideReadOnly True

    Options.ofFileMustExist True

    Options.ofNoReadOnlyReturn True

    Title Open Text File

    5. Для того щоб відкрити вікно Filter Editor (Редактор фільтру), двічі клацніть на властивості Filter.

    6. Заповніть два перші рядки в колонці Filter Name (Ім'я фільтру) назвами фільтрів Text files і All files, а в колонці Filter (Фільтр) введіть відповідні фільтри: *. ТХТ і *.*.

    7. Помістіть на форму компонент SaveDialog та встановити його властивостей такі значення:

    Властивість Значення

    Default Ext ТХТ

    Options.ofHideReadOnly True

    Options.ofOverwritePrompt True

    Options.ofNoReadOnlyReturn True

    Title Save Text File

    8. Введіть той самий набір фільтрів, що і для діалогу відкриття файлу.

    9. Створіть обробник події OnClick для кнопки Exit, що містить одну команду Close;

    10. Для обробника події OnClick кнопки Open використовуйте наступні рядки:

    WITH OpenDialog1 DO

    IF Execute THEN

    BEGIN

    Memo1.Lines.LoadFromFile (Filename);

    HistoryList.Add (Filename);

    Caption: = 'My Editor-' +

    ExtractFilename (Filename);

    SaveDialog1.Filename: = Filename;

    Filename :='';

    End;

    11. Двічі клацніть на кнопці Save і введіть наступний рядок в якості її обробника події OnClick:.

    Memo1.Lines.SaveToFile (SaveDialog1.Filename);

    12. Нарешті, для кнопки Save As вкажіть наступне:

    WITH SaveDialog1 DO

    IF Execute THEN

    BEGIN

    Memo1.Lines.SaveToFile (Filename);

    Caption: = 'My Editor -' +

    ExtractFilename (Filename);

    End;

    Ми створили простий текстовий редактор. Він дозволяє завантажувати, редагувати і зберігати невеликі та середні файли. Можливості цього редактора приблизно такі ж, як і у програми Notepad (Блокнот) Windows. Можна вирізати, копіювати і вставляти текст, використовуючи стандартні комбінації клавіш Windows. Назва кожного відкритого файлу додається до списку діалогу відкриття файлу на випадок, якщо вам буде потрібно відкрити його знову. Цей проект нам ще знадобиться, тому збережемо його. Назвемо модуль MYEDITU.PAS, а головний проект - MYEDIT.PRJ.

    Діалог вибору шрифту.

    Завантажте знову проект MyEdit і помістіть на форму компонент FontDialog. Перемістіть кнопку Exit вправо і вставте кнопку із заголовком & Font між кнопками Save As і Exit. У обробник події OnClick нової кнопки помістіть наступний код:

    WITH FontDialog1 DO

    IF Execute THEN

    BEGIN

    Memo1.Font: = Font;

    Наступний рядок помістіть в обробник події OnApply компонента FontDialog:

    Memo1.Font: = FontDialog1. Font;

    Запустіть програму і завантажте файл. За допомогою кнопки Font виберіть який-небудь шрифт. Використовуючи всі можливості, створіть самий незвичайний варіант. Вміст файлу буде відображатися обраним вами шрифтом із застосуванням зазначеного розміру, стилю та кольору. Знову відкрийте діалог вибору шрифту і перемістіть його так, щоб він не закривав самого вікна редактора. Внесіть кілька змін у вікні діалогу і клацніть на кнопці Apply (Застосувати). Зміни стануть дійсними негайно, а діалог Font (Шрифт) не закриється. Це спрощує випробування різних можливостей. Зверніть увагу, що в цьому прикладі програми, після того як була використана кнопка Apply (Застосувати), ви ніяк не зможете скасувати внесені зміни. З іншого боку, це не така вже й велика біда - якщо не влаштовує тільки що обраний шрифт, можна повернути шрифт, що використовувався раніше.

    Збережіть оновлений проект MyEdit, що володіє тепер можливістю змінювати шрифти.

    Компонент Memo не має здатності відображати більше одного шрифту відразу. Для цього існують інші компоненти.

    Додамо до своєї програми діалог вибору кольору.

    1. Помістіть на нову форму діалог вибору кольору (компонент ColorDialog) і надайте його властивості Color значення clWhite.

    2. Встановіть властивість Ctl3D форми в False, а в якості константи кольору також виберіть clWhite.

    3. Помістіть на форму нову кнопку, назвіть її Color.

    У обробник події OnClick форми помістіть наступні рядки:

    IF ColorDialog1.Execute THEN

    Form1.Color: = ColorDialog1.Color;

    4. Запустіть програму.

    Діалог вибору принтера .

    Завантажте знову проект MyEdit і помістіть на нього діалог налаштування принтера компонент PrinterSetupDialog). Компонент Bevel розташуйте таким чином, щоб залишилося місце для другого ряду кнопок, де додайте дві нові кнопки, а Узза-аавленние & Print ... і P & rint Setup .... Створіть обробник події OnClick кнопки Print Setup з єдиною рядком коду:

    PrinterSetupDialog1.Execute;

    Запустіть програму і клацніть на кнопці Print Setup (кнопка Print поки що робити нічого не може). З'явиться діалог.

    Підготовка до друку .

    Діалог Print Setup (Настройка принтера) використовується для вибору і конфігурації принтера. Коли справа дійде до друку, в дію вступить діалог Print (Друк).

    У проект MyEdit додайте компонент PrintDialog, залишивши всі його властивості зі значеннями, встановленими за замовчуванням. Двічі клацніть на кнопці Print, і замініть пару begin-end наступним кодом:

    VAR

    POutput: TextFile;

    N: LongInt;

    BEGIN

    IF PrintDialog1.Execute THEN

    BEGIN

    AssingPrn (POutput);

    Rewrite (POutput);

    Printer.Canvas.Font: = Memo1.Font;

    FOR N: = 0 to Memo1.Lines.Count - 1 DO

    Writeln (POutput, Memo1.Lines [N]);

    CloseFile (POutput);

    END;

    END;

    Перейдіть у верхню частину модуля і додайте Printers в оператор uses. (Знайдіть рядок на початку файлу, що починається зі слова uses. Після цього слова додайте ім'я модуля і кому.) Виберіть на формі компонент FontDialog і надайте його властивості Device значення fdBoth, щоб обмежити вибір шрифтами, які годяться і для екрану, і для принтера.

    Ми тільки що додали в ваш редактор можливість друку. Цей редактор не дозволяє друкувати кілька копій чи направляти їх у підбір, але ви зможете роздрукувати вміст редактора будь-яким шрифтом. А за допомогою діалогу Print Setup (Вибір принтера) ви зможете вибрати принтер, орієнтацію паперу та параметри конфігурації, що відповідають вашому принтером.

    Діалог пошуку та заміни тексту .

    Завантажте проект MyEdit і встановіть властивість HideSelection компонента Memo в False. На формі розмістіть компоненти FindDialog і ReplaceDialog і виберіть їх обидва. Двічі клацніть на властивості Options і встановіть frHideMatchCase, frHideWholeWord і frHideUpDown в True. Додайте у другий ряд кнопки із заголовками Fi & nd ... і & Replace ... Для події OnClick кнопки Find використовуйте наступний рядок:

    FindDialogl.Execute;

    а для кнопки Replace наступний рядок:

    ReplaceDialogl.Execute;

    Виберіть компонент FindDialog, перейдіть на сторінку Events і двічі клацніть на події OnFind. Вставлену Delphi пару begin-end замініть наступним блоком коду:

    VAR

    Buff, P, FT: Pchar;

    BuffLen: Word;

    begin

    WITH Sender AS TFindDialog DO

    BEGIN

    GetMem (FT, Length (FindText) + 1);

    StrPCopy (FT, FindText);

    BuffLen: = Memo1.GetTextLen + 1;

    GetMem (Buff, BuffLen);

    Memo1.GetTextBuff (Buff, BuffLen);

    P: = Buff + Memo1.SelStart + Memo1.SelLength;

    P: = StrPos (P, FT);

    IF P = NIL THEN MessageBeep (0)

    ELSE

    BEGIN

    Memo1.SelStart: = P-Buff;

    Memo1.SelLength: = Length (FindText);

    END;

    FreeMem (FT, Length (FindText) + 1;

    FreeMem (Buff, BuffLen);

    END;

    end;

    Коли закінчите, клацніть на компоненті ReplaceDialog, перейдіть на сторінку Events у вікні Object Inspector і клацніть на кнопці розкриття списку обробника події OnFind. З списку, що з'явився, виберіть тільки що створений обробник події для FindDialog. Тепер створіть обробник події OnReplace з наступними рядками:

    WITH Sender AS TReplaceDialog DO

    WHILE True DO

    BEGIN

    IF Memo1.SelText FindText THEN

    FindDialodFind (Sender);

    IF Memo1.SelLength = 0 THEN Break;

    Memo1.SelText: = ReplaceText;

    IF NOT (frReplaceAll IN Options) THEN Break;

    END;

    Збережіть програму, запустіть її і завантажте текстовий файл. Замініть у ньому всі крапки на знаки оклику і збережіть його.

    Завдання . Створіть форму для відкриття графічних файлів.

    Лабораторна по Delphi. Робота з базами даних.

    Робота з Database Form Expert.

    Delphi має потужний засіб створення таблиць шляхом внесення або ре дактірованія полеі на формі. Розглянемо простий приклад того, як побудувати програму, використовуючи експерт форм бази даних. У цьому прикладі використаний один із зразків баз даних, включених в Delphi.

    Використання експерта форм бази даних .

    1. Запустіть Delphi.

    2. Виберіть Database/Database Form Expert з головного меню.

    3. У першому діалоговому вікні виберіть Create a simple form і Great a form using TTable objects; натисніть Next.

    4. У наступному діалоговому вікні виберіть DBDEMOS в секції Drive or Alias. Виділення DBDEMOS виводить список таблиць, які складають базу даних, в панелі списку зліва.

    5. Виберіть EMPLOYEE.DB; клацніть на Next.

    6. Натисніть кнопку>>, щоб вказати, що ви хотіли б побудувати форму з відображенням всіх полів.

    7.Продолжайте вибирати Next, приймаючи все за замовчуванням до закінчення процесу створення форми.

    8.Виберіте з меню Run/Run.

    Це найпростіше програма дає користувачеві повний контроль над таблицею, що містить інформацію про службовців. Щоб маніпулювати записами, угорі форми розміщена панель керування базами даних. Кожна кнопка панелі виконує певну функцію бази даних.

    Попрацювавши з цим простим для користувача інтерфейсом, виберіть Close, щоб завершити програму.

    Використання Database Desktop для створення нової таблиці

    Створимо таблицю нового зразка. Borland Database Desktop доступна в меню Tools у IDE Delphi. Виберіть цю опцію для виклику робочого столу.

    Створення нової таблиці

    1. Виберіть опцію File/New/Table з головного меню. У цей момент з'явиться діалогове вікно, запитуючи тип таблиці, яку ви хочете створити. При розробці нових додатків найбільш зручна простотою роботи з нею база даних Paradox; тому оберіть Paradox 7 і натисніть ОК.

    2. Перш за все ви повинні вирішити, які дані ви хочете зберігати у вашій таблиці і який тип цих даних. У цьому прикладі розглянемо таблицю інформації про студентів університету. Кожне поле повинно бути занесено до розділу Field Roster (список полів) діалогового вікна. Щоб занести першому полі, введіть SSN у колонці імені поля (Field Name). Це означає, що ви хочете додати нове поле, назване SSN.

    3. Наступна частина інформації вимагає вказівки, який тип даних буде зберігатися в полі. Номери Social Security (соціальної страховки) зберігаються як рядки символів. Клацніть правою кнопкою миші на полі Type, щоб показати наявні типи даних. Для рядків Paradox використовує тип Alpha. Виберіть Alpha зі списку типів даних.

    4. Деякі типи даних вимагають вказівки розміру. Це говорить базі даних про найбільшому обсязі даних, що може зберігатися в полі. Що стосується номерів страховки, то нам відомо, що SSN складається з 11 символів, включаючи тире, так що введемо в це поле число 11. Деякі типи даних, такі як Number (число), не використовують поняття "розмір поля".

    5. На закінчення потрібно повідомити базі даних, чи є поле ключем, чи ні. Ключ означає, що за кожним записом закріплено унікальне значення. Використання ключів в базах даних надзвичайно важливо. Помітимо поле SSN як ключ, тому що ви знаєте, що кожному студенту буде відповідати один-єдиний запис і кожен студент має унікальний номер страховки.

    6. Щоб визначити наступне поле в таблиці, натисніть Enter. Продовжуйте визначати поля, використовуючи інформацію з таблиці

    Таблиця. Визначення полів таблиці і їх атрибутів

    Ім'я поля Тип Розмір Ключ

    SSN А 11 *

    Name А 30

    Class A 10

    Phone A 8

    GPA N

    7. Клацніть на кнопці Save As, щоб зберегти інформацію про таблицю.

    8. У діалоговому вікні Save Table as вкажіть у вікні списку Drive (or alias) ім'я DBDEMOS. Введіть studinfo.db в текстовому вікні New file name і для збереження таблиці клацніть на ОК.

    Як з Delphi отримати доступ до створеної таблиці?

    Найпростіший спосіб створення програми, що має доступ до таблиці в Delphi: це Form Expert. Тепер розглянемо, які кроки необхідно зробити для побудови програми на порожньому місці. Найпростішим способом забезпечення доступу і маніпуляції даними є використання візуальних компонентів бази даних. Візуальні компоненти бази даних зберігаються на двох сторінках бібліотек візуальних компонентів: Data Access і Data Control. Органи управління у сторінці Data Access використовуються для того, щоб дати Delphi інформацію про таблиці бази даних і функції, які повинні бути використані, тоді як сторінка Data Control містить ряд візуальних компонентів, які можуть відображати інформацію бази даних або забезпечувати інтерфейс для маніпуляцій даними (таких , як вставка, видалення і модифікація).

    Як надати Delphi відомості про таблицю - компонент ТТаИе

    Щоб використовувати таблицю, потрібно в якості першого кроку дати знати Delphi, що ви маєте намір взаємодіяти з таблицею. Щоб зробити це, потрібно помістити на форму об'єкт Table, якому доступні табличні дані. Перевірка списку властивостей показує, що там є властивість, зване DataBaseName і TableName. Це два мінімальних властивості, які потрібно встановити для того, щоб таблиця була доступна Delphi. Властивість DataBaseName відповідає наявним псевдонімом бази даних. TableName описує таблиці в базі даних, які повинні побут використані.

    Забезпечення доступу до таблиці з інформацією про студентів

    Першим кроком у створенні програми, що забезпечує доступ до бази даних з інформацією про студентів, яку ви створили раніше, повинно бути розміщення компонента ТТаИе на вашій формі і конфігурація властивостей DataBaseName і TableName.

    1. Створити новий додаток.

    2. Помістіть на форму компонент ТТаИе. Компонент TTable може бути знайдений на сторінці DataAccess бібліотеки візуальних компонентів.

    3. У списку властивостей встановіть DatabaseName як DBDEMOS. DBDEMOS - це псевдонім бази, в якій буде зберігатися таблиця STUDINFO.DB.

    4. Після установки властивості DatabaseName властивість TableName має показати вікно списку з переліком усіх таблиць, що є в наявності в базі даних. Виберіть STUDINFO.DB як ім'я бази даних.

    5. Встановіть значення властивості Active рівним true. Це негайно від-, кривает таблицю під час запуску програми. Якщо встановити значення false, програма не буде мати доступу до жодних даними в таблиці до тих пір, поки властивість не стане рівним true під час виконання.

    6. Встановіть властивість Name рівним Studinfo.

    Під час виконання можна модифікувати два інші властивості - Readonly і Exclusive. Установка значення властивості Readonly рівним true дозволяє додатку тільки переглядати дані в базі даних без можливості їх модифікації. Опція Exclusive дозволяє доступ до даних лише цьому додатку. Тепер у програми є вся інформація, яка необхідна для підключення до таблиці. Проте немає ніякого способу маніпуляції даними таблиці до тих пір, поки об'єкт таблиці не буде пов'язаний з об'єктом DataSourse.

    Забезпечення зв'язку - компонент TDataSourse

    Delphi має можливість доступу до інформації в базі даних, яка доставляється поруч компонентів, відомих як набори даних (DataSets), одним з яких є компонент TTable. Прив'язані до даних ком-оненти (data-aware) - це органи управління, які відображають і маніпулюють тими даними, які доступні Delphi. Щоб забезпечити рівень абстракції для органів управління, які можуть переміщатися за даними і відображати інформацію, був розроблений TDataSource. TDataSource також дозволяє дізнатися, змінювалися чи є дані, і визначити, який стан набору або джерела даних.

    Додавання DataSource

    1. Виберіть DataSource і додайте його на форму.

    2. Встановіть властивість DataSet рівним Studinfo. Це зв'яже джерело даних з компонентом TTable з ім'ям Studinfo, який у свою чергу отримує доступ до таблиці STUDINFO.DB в базі даних DBDEMOS.

    3. Встановіть ім'я для DataSource як dsStudent.

    Органи управління, прив'язані до даних - перегляд і модифікація даних

    Отже, ви організували все необхідне для зв'язку з таблицею. Однак тепер треба вирішити, як дані повинні бути відображені, і як ними маніпулювати. Найпростіше це можна зробити за допомогою органів управління, прив'язаних до даних (їх називають data-aware або data-bound). Більшість коштів управління з прив'язкою до даних призначене для зв'язку полів бази даних з візуальним компонентом. Стандартні прив'язані компоненти досить потужні, прості у використанні, і Delphi має великий набір цих компонентів. За винятком DBNavigator, всі компоненти на сторінці Data Control використовуються для відображення інформації баз даних. Щоб почати працювати з ними, додайте до вашого Наприклад сітку DBGrid.

    Додавання прив'язаною до даних сітки DBGrid

    1. Помістіть компонент DBGrid на вашу форму. Це перший з розміщених вами на формі компонентів, що бачимо під час виконання; змініть його розмір так, щоб він зайняв більшу частину форми.

    2. Встановіть властивість DataSource рівним dsStudent; це зв'яже сітку з джерелом даних.

    3. Що при цьому відбувається? Як тільки було встановлено властивість Data-Source, на сітці автоматично стали з'являтися імена полів. Якщо в таблиці STUDINFO.DB були дані, то вони повинні були б відображатися навіть під час проектування. Однак якщо значення властивості Active було встановлено рівним False, то нічого не можна побачити до тих пір, поки воно не стане рівним True.

    4. Запустіть програму. З цього моменту дані дійсно можуть бути введені в сітку. Надрукуйте номер SSN, натисніть кнопку Tab, надрукуйте ім'я. Продовжуйте натискати TAB до тих пір, поки не заповните всі поля. По завершенні першого запису компонент DBGrid автоматично зрушить курсор на наступний рядок. Продовжуйте додавання кількох простих записів в таблицю. Зверніть увагу, що якщо введені два записи з однаковим SSN, станеться помилка.

    5. Закрийте програму та додайте ще один орган управління - компонент?? DBEdit. Він відображає одне поле таблиці. . На відміну від сітки, він може показувати кілька записів, DBEdit відображає поле профілю. Поточна запис - це просто запис, до якої в даний момент має доступ машина бази даних. DBGrid вказує поточну запис, відображаючи поруч з нею трикутний значок.

    6. Додайте DBEdit на форму і встановіть властивість DataSource рівним dsStudent. Тепер потрібно вказати поле, щоб компонент знав, що відображати. Щоб встановити поле, встановіть властивість DataField рівним SSN.

    7. Запустіть програму.

    Зверніть увагу, що якщо ви переходите до іншого запису (клацанням на ній у сітці), покажчик поточного запису переміщується. Ця програма надає користувачеві певні можливості управління, але для великих баз даних це неприйнятно. Delphi має потужний засіб управління, що дозволяє переміщатися між об'єктами в таблиці: DBNavigator. DBNavigator - це панель, яка дозволяє легко пересуватися між таблицями.

    Додавання DBNavigator.

    Виберіть DBNavigator і помістіть його на форму. Встановіть властивість DataSource рівним dsStudent.

    Встановіть властивість ShowHint рівним True. Це викличе появу підказки кожного разу, коли курсор миші буде затримуватися над кнопкою панелі.

    Запустіть програму. Зверніть увагу, як просто переміщатися між записами, стрибати до початку або кінця бази даних і редагувати записи.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status