
- •1. Основні терміни технології програмування
- •2. Класифікація програмного забезпечення
- •Поняття життєвого циклу розробки програмного забезпечення.
- •Етапи розробки
- •Базові моделі розробки програмних продуктів.
- •Вимоги до методології та технології розробки пп
- •Каскадна модель
- •3. Модель прототипування програмного продукту
- •4. Спіральна модель
- •5. Модель rad
- •6. Модель екстремального програмування (xp)
- •7. Модель msf (Microsoft Solutions Framework)
- •Принципи й види налагодження.
- •Аксіоми налагодження.
- •Автономне налагодження модуля.
- •Комплексне налагодження програмного засобу.
- •Інструменти розробки програмних засобів.
- •Інструментальні середовища розробки й супроводу програмних засобів.
- •Інструментальні середовища програмування.
- •Поняття комп'ютерної технології розробки програмних засобів і її робочі місця.
- •Інструментальні системи технології програмування.
- •Приклад реалізації класу Log.
- •Розробка програмного продукту з двома потоками
- •Визначення крапок контролю програмного продукту.
- •Визначення кількості викликів
- •Визначення ступеня покриття
- •Фундаментальні проблеми профілювання.
- •Причини рефакторингу
- •Підстави для проведення рефакторингу
- •Прийоми рефакторингу
- •Автоматизований рефакторинг
- •1. Принципи повторного використання елементів програм
- •2. Створення шаблонів форм у вигляді файлів
- •3. Використання шаблонів форм у новому проекті
- •4. Збереження шаблонів форм в депозитарії
- •5. Використання шаблонів форм із депозитарію
- •Шаблони класів на мові програмування с#.
- •Приклади шаблонів (класів шаблонів).
- •1. Використання підпрограм в оброблювачах подій
- •2. Звертання до активного компонента не за ім’ям
- •2. Обробка групи компонентів
- •4. Обробка компонентів як масиву
- •5. Сортування даних у компонентах
- •1. Принципи модульного програмування
- •2. Принцип «приховання даних»
- •3. Поняття модуля в Object Pascal
- •4. Структура модульного файлу
- •5. Створення модуля в Object Pascal
- •6. Створення модуля з переліком стандартних діалогів
- •7. Використання текстових констант у модулях
- •8. Створення підпрограм для обробки компонентів
- •1. Поняття dll
- •2. Створення dll бібліотеки в Delphi
- •3. Внесення форм в dll
- •4. Використання dll бібліотеки
- •Питання для самоконтролю
- •Використання регулярних виразів у програмах.
- •1. Призначення зовнішніх компонентів
- •2. Установка й видалення зовнішніх компонентів
- •3. Установка й видалення бібліотек компонентів
- •4. Запуск зовнішніх програм і файлів
- •Питання для самоконтролю
- •1. Загальні принципи технології com
- •2. Робота з com-сервером Microsoft Word
- •Робота з документами в Microsoft Word
- •Використання шаблону для формування документів
- •Робота з таблицями
- •Вставка малюнків і їх форматування
- •1. Операції з Com-Сервером Microsoft Excel
- •Робота із книгами в Microsoft Excel
- •Робота з аркушами книги в Microsoft Excel
- •Використання шаблону для формування книги
- •Формування таблиці
- •6. Форматування чарунок
- •Види довідкових систем
- •Інші засоби підтримки користувача
- •2.Формати довідників
- •3.Створення довідки у форматі html Help
- •4.Створення контекстної довідки
- •5.Інтеграція довідкового файлу в додаток
- •Перелік шаблонів, що породжують
- •Перелік структурних шаблонів
- •Перелік шаблонів поведінки
- •Призначення патерну Singleton
- •Реалізація патерну Singleton
- •Результати застосування патерну Singleton
- •Призначення патерна Observer
- •Постановка проблеми, що вирішується за допомогою патерна
- •Структура патерна Observer
- •Приклад патерна Observer
- •Реалізація патерна Observer
- •Реалізація патерну Observer: до та після
- •Призначення патерну Strategy
- •Опис патерну Strategy
- •Реалізація патерну Strategy
- •Призначення патерна Factory Method
- •Опис патерну Factory Method
- •Реалізація патерна Factory Method
Робота з аркушами книги в Microsoft Excel
Кожна книга має кілька аркушів (за замовчуванням 3). Для звертання до аркуша використовують запис виду:
e.activeworkbook.sheets.item[i]
де i - номер аркуша в книзі (нумерація починається з 1).
Кожний аркуш має команди для керуваннями:
//додає аркуш ліворуч від i-го аркуша
e.activeworkbook.sheets.item[i].add;
//видаляє i-й аркуш
e.activeworkbook.sheets.item[i].delete;
//копіює i-й аркуш, вставляючи його після j-го аркуша
e.activeworkbook.sheets.item[i].copy(after:=e.activeworkbook.sheets.item[j];
//задає ім'я i-го аркуша
e.activeworkbook.sheets.item[i].name:='нове ім'я';
Зауваження. При видаленні аркуша Excel може видавати повідомлення на підтвердженні операції. Для вимикання видачі вікон з повідомленнями необхідно спочатку коду додавати команду виду:
e.displayalerts:=false;
Для включення функції видачі повідомлень використовують команду:
e.displayalerts:=true;
Приклад. Нехай є деякий шаблон primer.xlt, що має один аркуш. Необхідно написати код, який робить ще дев'ять копій цього аркуша й кожний аркуш нумерує числами від 1 до 10.
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо нову книгу на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\primer.xlt');
//запускаємо цикл, що додає 9 аркушів
for i:=1 to 9 do
begin
//копіюємо перший аркуш і вставляємо його після i-го аркуша
e.activeworkbook.sheets.item[1].copy(after:=e.activeworkbook.sheets.item[i]);
//i-му аркушу привласнюємо ім'я, що є значенням змінної i
e.activeworkbook.sheets.item[i].name:=inttostr(i);
end;
//робимо вікно excel видимим для перегляду результату
e.visible:=true;
Використання шаблону для формування книги
Шаблони є самим зручним способом формування книг Excel. Розроблювач може створити багато шаблонів, у яких задати розташування текстових блоків і їх форматування. Шаблон може містити як постійні елементи, так і елементи-змінні, на місце яких буде підставлятися інший текст при формуванні документа. Такі змінні повинні мати якісь унікальні в межах шаблону імена (наприклад: #fam#, #imya#, #otch# і т.п.).
Програма може знайти ці імена змінних на i-му аркуші й замінити їх на зазначений текст за допомогою коду:
e.activeworkbook.sheets.item[i].cells.replace(what:='зразок', replacement:='заміна');
Наприклад, нехай у шаблоні anketa.xlt з теки shablon на першому аркуші є змінні: #fam#, #imya#, #otch#. Необхідно на їхнє місце підставити значення Іванов, Іван, Іванович.
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо нову книгу на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\anketa.xlt');
//заміняємо #fam# на Іванов
e.activeworkbook.sheets.item[1].cells.replace(what:='#fam#', replacement:='Іванов');
//заміняємо #imya# на Іван
e.activeworkbook.sheets.item[1].cells.replace(what:='#imya#', replacement:='Іван');
//заміняємо #otch# на Іванович
e.activeworkbook.sheets.item[1].cells.replace(what:='#otch#', replacement:='Іванович');
//робимо книгу видимої
e.visible:=true;
Замість змінних у шаблоні можна підставляти не тільки конкретні значення, а й вміст полів таблиці БД. Такий підхід дозволяє створювати звіти по БД із експортом їх в Excel.
Приклад. Нехай у шаблоні anketa.dot з теки shablon є змінні: #fam#, #imya#, #otch#, #datar#. Необхідно на їхнє місце підставити значення полів fam, tab, otch, datar з поточного запису таблиці БД. Для цього напишемо код:
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо новий документ на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\anketa.xlt');
//заміняємо #fam# на поле fam
e.activeworkbook.sheets.item[1].cells.replace(what:='#fam#', replacement:=adotable1.fieldbyname('fam').asstring;);
//заміняємо #imya# на поле imya
e.activeworkbook.sheets.item[1].cells.replace(what:='#imya#', replacement:=adotable1.fieldbyname('imya').asstring;);
//заміняємо #otch# на поле otch
e.activeworkbook.sheets.item[1].cells.replace(what:='#otch#', replacement:=adotable1.fieldbyname('otch').asstring;);
//заміняємо #datar# на поле datar
e.activeworkbook.sheets.item[1].cells.replace(what:='#datar#', replacement:=adotable1.fieldbyname('datar').asstring;);
//робимо книгу видимої
e.visible:=true;
Приклад. Нехай за допомогою компонента adoquery1 на формі відібрані потрібні записи (виконана фільтрація). Необхідно для кожного знайденого запису сформувати свій окремий аркуш на підставі єдиного аркуша шаблону anketa.xlt.
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо новий документ на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\anketa.xlt');
//копіюємо перший аркуш шаблону стільки разів,
//скільки є відібраних записів у запиті
for i:=1 to adoquery1.Recordcount-1 do
e.activeworkbook.sheets.item[1].copy(after:=w.activeworkbook.sheets.item[i]);
//стаємо на перший запис запиту
adoquery1.First;
//спочатку лічильник сформованих аркушів рівний 0
i:=0;
//запускаємо цикл до кінця набору записів у запиті
while not adoquery1.Eof do
begin
//збільшуємо лічильник сформованих аркушів
i:=i+1;
//заміняємо #fam# на поле fam
e.activeworkbook.sheets.item[1].cells.replace(what:='#fam#', replacement:= adoquery1.fieldbyname(‘fam’).asstring);
//заміняємо #imya# на поле imya
e.activeworkbook.sheets.item[1].cells.replace(what:='#imya#', replacement:= adoquery1.fieldbyname(‘imya’).asstring);
//заміняємо #otch# на поле otch
e.activeworkbook.sheets.item[1].cells.replace(what:='#otch#', replacement:= adoquery1.fieldbyname(‘otch’).asstring);
//заміняємо #datar# на поле datar
e.activeworkbook.sheets.item[1].cells.replace(what:='#datar#', replacement:= adoquery1.fieldbyname(‘datar’).asstring);
//переходимо, щна наступний запис у запиті
adoquery1.Next;
end;
//робимо книгу видимою
e.visible:=true;