Кулінарна книга

 

Міністерство освіти і науки України

Вінницький національний технічний університет

Факультет КІ

Кафедра ПЗ









Курсова робота

Кулінарна книга

З дисципліни «Основи програмування та алгоритмічні мови»



Керівник доцент, к. ф-м. н.В.Х. Власюк

Студент гр. 1КН-09 О.О. Алєксєєв










Вінниця 2010р.

Вступ


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

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

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

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

кулінарний рецепт база диск

1. Розробка і обґрунтування технічного завдання


1.1 Вимоги користувача


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

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

Програма має мати приємний дизайн, щоб користувач відразу побачив істотні переваги компютерної програми над звичайним паперовим записником чи звичайною книгою.

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

При запуску програми на екрані повинна зявлятися заставка, в якій міститься назва програми та короткі відомості про автора програми. Через деякий проміжок часу заставка буде зникати і запускатиметься головна форма програми.

Головна форма програми містить такі елементи:

-випадаючий список категорій рецептів;

-список рецептів поточної категорії;

область перегляду поточного рецепту;

панель управління рецептами, яка складається з 10 кнопок («створення нового рецепту», «редагування нового рецепту», «переміщення рецепту в іншу категорію», «копіювання рецепту в іншу категорію», «видалення рецепту», «пошук рецепту», «перейменування рецепту», «перейменування категорії», «завантаження рецепту з файлу», «збереження рецепту у файл»);

головне меню форми;

контекстне меню списку рецептів;


1.2 Вимоги до програмної реалізації


Програма повинна відповідати вимогам користувача.

Для розробки програми було використано середовище Turbo Delphi 2006. Це середовище має багато можливостей для розробки повноцінних програм на платформі Win32. Мова Delphi бере свої початки від мови Pascal і зараз є дуже потужним засобом обєктно-орієнтованого програмування. Вона містить багато стандартних модулів для роботи з вікнами, контролами, базами данних, і тому повністю підходить для реалізації поставленої задачі.

Всі дії в програмі мають бути забезпеченні для виконання як мишою, так і клавіатурою. При запуску команд клавіатурою потрібно враховувати застосування загальновідомих комбінацій («гарячих клавіш»). Наприклад, для пошуку рецепту потрібно застосувати комбінацію клавіш Ctrl + F, для створення нового рецепту - Ctrl + N, для видалення рецепту Del, видалення категорії - Shift + Del і т.д.

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

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

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

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

Планується, що всі кнопки на панелі управління будуть з підказками, будуть змінювати свій колір при наведенні-відведенні миші, при натисненні клавіші миші.


1.3 Функціональні можливості програми


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

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


.4 Аналіз і вибір методу вирішення основної задачі


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

Основна задача програми забезпечити збереження та завантаження інформації з баз даних. В програмі використовується стандартна бібліотека для роботи з текстовими базами даних tdb_lib (text database library). Набір методів цієї бібліотеки повністю достатній для реалізації необхідних дій, що виконуються з базами даних у даній програмі. Програма працює з двома базами даних.

Перша база даних знаходиться у файлі CatDB.dbe. Це база даних категорій. У ній є 2 поля: ID і Name. ID - поле типу longint, це унікальний номер кожної категорії (ID). Друге поле Name типу string, це назва категорії.

Друга база даних знаходиться у файлі RecDB.dbe. Це база даних рецептів. Вона містить 3 поля: ID, CatID, Name. ID (поле типу longint) - це унікальний номер кожного рецепту. CatID (поле типу longint) вказує до якої категорії відноситься рецепт. Name (поле типу string) - це назва рецепту.

Текст кожного рецепту знаходиться у окремому файлі з розширенням «rec». Бази даних і рецепти знаходяться в каталозі «data».

Програма має дві основні форми: MainForm - головна форма програми, RecEditorForm - форма редактора рецептів, та ZastForm - форма заставки.

В головній формі є такі елементи: випадаючий список категорій типу TCombobox, список рецептів типу TListbox, область перегляду вмісту рецепту типу TMemo, 10 кнопок панелі управління типу TImage. Тип TImage для кнопок було вибрано, тому що він має істотні переваги при графічному оздоблені. Кнопки панелі управління при наведені на них мишою, відведенні від них миші, при кліку змінюють свою піктограму на іншу. Піктограми завантажуються з списку зображень типу TImageList у відповідних обробниках подій реакції на мишу.

Також всі дії над рецептами можна виконувати у контекстному меню списку рецептів, або у головному меню головної форми.

Форма редактора рецептів містить випадаючий список типу TCombobox для вибору або відображення категорії рецепту, текстове поле типу TEdit для назви рецепту, область тексту рецепту типу TMemo, дві кнопки для збереження та виходу типу TImage.

В програмі використані діалогові вікна таких типів:

1.Введення текстового рядка.

2.Вибір категорії для переміщення чи копіювання.

.Показ повідомлення про помилку чи довідкової інформації.

.Підтвердження деякої умови чи її відхилення


2. Розробка структури програмної системи


.1 Покроковий алгоритм


.) Створення форм.

.) Запуск заставки.

.) Запуск головної форми.

4.) Очікування команд від користувача.

5.) Виконання команд користувача.

6.) Завершення роботи з програмою.


3. Програмна реалізація


.1 Програмування інтерфейсу


Під користувацьким інтерфейсом (КІ) програми розумітиметься сукупність елементів, що дозволяють користувачеві програми управляти її роботою і отримувати необхідні результати. Фактично, КІ - це канал, по якому здійснюється взаємодія користувача і програми. Чому є необхідність взагалі говорити про КІ? Річ у тому, що виходячи з самої ідеї, програма пишеться для користувача, для задоволення його потреб. У результаті ж часто виходить, що програміст пише програму "Для себе", тобто нікому більше вона не потрібна, тому що окрім автора цієї програми зрозуміти її мало хто може. І можна, звичайно, доводити, що алгоритм програми геніальний, і що код працює дуже швидко і займає менше місця в порівнянні з аналогічними програмами, але ці моменти цікавитимуть лише програмістів, тому що будуть зрозумілі лише їм і лише ними будуть оцінені належним чином. Користувач же має щодо програми дещо інші вимоги, ніж програміст, оскільки дивиться на код зовні, а не зсередини. І, відповідно, більшою популярністю користуватиметься та програма, з якою користувач порозуміється краще, вище перераховані параметри ж цікавлять користувача в другу чергу.

Необхідно ретельно продумати і усвідомити схему програми, привівши її до системи (структури, збудованій по певних правилах), і, відповідно, реалізувавши КІ відповідно до цієї системи. Користувачеві досить буде "схопити" суть, щоб аналогічно розібратися в останньому. Слід уникати зайвих елементів. Чим менше їх буде, тим простіше користувачеві буде розібратися.

Програма запускатиметься файлом Recepts.exe.

Після запуску програми зявляється заставка, яка залишається на екрані впродовж 4 секунд.

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

Для програмування інтерфейсу буде використана значна кількість функцій з різних модулів середовища Turbo Delphi. Також будуть реалізовано власні підпрограми для різних потреб. В функціонал програми включено 12 основних команд. Цього набору повністю достатньо для користувача.


3.2 Програмування основного алгоритму


Як відомо, великі програми не пишуться без процедур та функцій. В цій курсовій роботі будуть розроблені такі процедури і функції для реалізації заданої програми, кожна з яких виконує свою функцію.(filename : string) - процедура створення бази даних категорій при її відсутності;(filename : string) - процедура створення бази даних рецептів при її відсутності; - процедура, що заповняє випадаючий список категорій з бази даних категорій;- процедура, що заповняє список рецептів при виборі категорії;- процедура, що завантажує текст рецепту при виборі рецепту в головній формі;- процедура, що запускається при видаленні рецепту ;(recID : longint) - процедура видалення рецепту з бази даних і з диску по його ID;- процедура видалення категоії;- процедура створення категорії;- процедура переміщення рецепту до іншої категорії;- процедура редагування рецепту;- процедура створення нового рецепту;- процедура пошуку рецептів;- процедура збереження рецепту в текстовий файл;- процедура копіювання рецепту;- процедура завантаження рецепту з текстового файлу;- процедура перейменування рецепту;- процедура перейменування категорії;- присвоєння кольорів до обєктів форми через RGB;(recID, CatID : longint) - процедура вибору категорії і рецепту по ID при пошуку;

Для того щоб користуватись програмою необхідно мати ОС Windows будь-якої версії після Windows 3.1. Також необхідна наявність клавіатури і миші, хоча використовувати мишу необовязково, тому що всі дії можна виконувати з допомогою клавіатури.


4. Тестування і перевірка програми


.1 Підготовка тестування


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


.2 Аналіз результатів роботи програми


Рисунок 4.1 - Головна форма програми

Рисунок 4.2 - Заставка


Рисунок 4.3 - Форма редактора рецептів

Рисунок 4.4 - Переміщення рецепту до іншої категорії


Рисунок 4.5 - Копіювання рецепту до іншої категорії


Рисунок 4.6 - Пошук рецепту


Рисунок 4.7 - Перейменування рецепту


Рисунок 4.8 - Перейменування категорії


Рисунок 4.9 - Контекстне меню списку рецептів


Висновки


Всі вимоги виконані: розроблена і протестована програма «Кулінарна книга» - програма управління кулінарними рецептами.

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

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

При тестуванні було виявлено такі переваги і недоліки використовуваного методу:

Переваги - простота, надійність, дружній інтерфейс, працює у віконному режимі, розвита графіка.

Недоліки - великий обсяг необхідної оперативної пам'яті (близько 8 МБ).


Список використаної літератури


1.Баженова И.Ю., Delphi 7. Самоучитель программиста. - Москва, Кудиц-образ ОЦ НОУ, 2003.

2.Джулиан Банкелл. Фундаментальные алгоритмы и структуры данных в Delphi. - Санкт-Петербург, ДиаСофтЮП, 2001.

.Кандзюба С.П., Громов В.Н., Delphi 6/7. Базы данных и приложения. Лекции и упражнения. - Москва, ДиаСофтЮП, 2002.

4.Круподьорова Л.М. Методичні вказівки для курсового проектування, ВНТУ, 2004.

. Власюк В.Х. Програмування алгоритмічними мовами,ВДТУ, 2004


Додаток


Текст програми "Кулінарна книга"

.PASMainFormUnit;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Buttons, StdCtrls, ExtCtrls, Menus, ComCtrls, MyLib, RecInterfaceUnit, AskDialogUnit, tdb_lib, RecEditorFormUnit,ExtDlgs, skins, ImgList;= class(TForm): TMainMenu;: TPopupMenu;: TMenuItem;: TMenuItem;: TPanel;: TLabel;: TComboBox;: TPanel;: TListBox;: TMemo;: TLabel;: TLabel;: TStatusBar;: TImage;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TOpenDialog;: TSaveTextFileDialog;: TImageList;: TMenuItem;: TMenuItem;: TMenuItem;: TImageList;: TImageList;: TImageList;: TPanel;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImageList;: TImage;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;lClick(Sender: TObject);CatCBChange(Sender: TObject);FormCreate(Sender: TObject);Image1Click(Sender: TObject);N2Click(Sender: TObject);Im3Click(Sender: TObject);Im5Click(Sender: TObject);Im2Click(Sender: TObject);Im1Click(Sender: TObject);Im6Click(Sender: TObject);N5Click(Sender: TObject);N6Click(Sender: TObject);N7Click(Sender: TObject);N8Click(Sender: TObject);N10Click(Sender: TObject);N12Click(Sender: TObject);N13Click(Sender: TObject);SpeedButton5Click(Sender: TObject);N11Click(Sender: TObject);Im4Click(Sender: TObject);Im10Click(Sender: TObject);Im7Click(Sender: TObject);Im8Click(Sender: TObject);Im9Click(Sender: TObject);lDblClick(Sender: TObject);N15Click(Sender: TObject);N14Click(Sender: TObject);N9Click(Sender: TObject);N16Click(Sender: TObject);FormCloseQuery(Sender: TObject; var CanClose: Boolean);Im8MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im8MouseLeave(Sender: TObject);Im8MouseEnter(Sender: TObject);Im8MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im1MouseEnter(Sender: TObject);Im1MouseLeave(Sender: TObject);Im2MouseLeave(Sender: TObject);Im3MouseLeave(Sender: TObject);Im4MouseLeave(Sender: TObject);Im5MouseLeave(Sender: TObject);Im6MouseLeave(Sender: TObject);Im7MouseLeave(Sender: TObject);Im9MouseLeave(Sender: TObject);Im10MouseLeave(Sender: TObject);Im10MouseEnter(Sender: TObject);Im9MouseEnter(Sender: TObject);Im7MouseEnter(Sender: TObject);Im6MouseEnter(Sender: TObject);Im5MouseEnter(Sender: TObject);Im4MouseEnter(Sender: TObject);Im3MouseEnter(Sender: TObject);Im2MouseEnter(Sender: TObject);Im1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im2MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im3MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im4MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im5MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im6MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im7MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im9MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im10MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im10MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im9MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im7MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im6MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im5MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im4MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im3MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im2MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);lKeyPress(Sender: TObject; var Key: Char);FormShow(Sender: TObject);MemoEnter(Sender: TObject);MemoExit(Sender: TObject);Image1MouseEnter(Sender: TObject);Image1MouseLeave(Sender: TObject);Image1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Image1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Image2MouseEnter(Sender: TObject);Image2MouseLeave(Sender: TObject);Image2MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Image2MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Image2Click(Sender: TObject);N18Click(Sender: TObject);N20Click(Sender: TObject);N19Click(Sender: TObject);N21Click(Sender: TObject);N22Click(Sender: TObject);N23Click(Sender: TObject);N24Click(Sender: TObject);N27Click(Sender: TObject);N25Click(Sender: TObject);N26Click(Sender: TObject);PopupMenu1Popup(Sender: TObject);N3Click(Sender: TObject);_CatDBFilename, m_RecDBFilename, m_rootFolder, m_DataFolder : string;_CurRecFilename : string;_curRecID, m_CurCatID : longint;_cl3dLight : TColor;_clCream : TColor;FillCatCB;OnSelectCat;OnSelectRecept;OnDelete;DeleteRecept(recID : longint);OnDeleteCategory;OnAddCategory;OnMoveToCat;OnEdit;OnNewRec;OnFind;OnSaveToFile;OnCopyToCat;OnOpenFromFile;OnRenameRecept;OnRenameCat;ApplyNormColorsOverRGB;;OnSelectReceptWithID(recID, CatID : longint);: TMainForm;SimpleSelectInListboxUnit, EditTextUnit, SearchInStringsUnit, ZastUnit;

{$R *.dfm}TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);not self.Visible then:= false;;;:= false;.Run('Ви дійсно хочете вийти з програми?', true, true, false, true);askDialog.m_SelectedItem = 1 then:= true;;TMainForm.FormCreate(Sender: TObject);;.HintColor := m_cl3DLight;.HintPause := 52;_rootFolder := mylib.GetFolderForFilename(Application.ExeName);_DataFolder := m_rootFolder + 'data\';_CatDBFilename := m_DataFolder + 'CatDB.DBE';_RecDBFilename := m_DataFolder + 'RecDB.DBE';not FindLocalFolder (m_DataFolder + '\') then(m_DataFolder + '\');not FileExists(m_CatDBFilename) then(m_CatDBFilename);not FileExists(m_RecDBFileName) then(m_RecDBFileName);;.PreparePopupmenuForSkin(popupmenu1, self);.PrepareMainMenuForSkin(MainMenu1, self);;TMainForm.FormShow(Sender: TObject);CatCB.Items.Count < 1 then.Run('Для роботи з програмою необхідно мати хоча б одну категорію.' + #13 +

'Створити категорію? Натисніть "Так" для створення, "Ні" для виходу.', true, true, false, false);AskDialog.m_SelectedItem <> 1 then;CatCB.Items.Count < 1 then;;l.Items.Count > 0 then.SetFocus;;TMainForm.Im9Click(Sender: TObject);;;TMainForm.Im9MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(9, im9.Picture.Bitmap);.Repaint;;TMainForm.Im9MouseEnter(Sender: TObject);.GetBitmap(9, im9.Picture.Bitmap);.Repaint;;TMainForm.Im9MouseLeave(Sender: TObject);.GetBitmap(9, im9.Picture.Bitmap);.Repaint;;TMainForm.Im9MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(9, im9.Picture.Bitmap);.Repaint;;TMainForm.Im10Click(Sender: TObject);;;TMainForm.Im10MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(10, im10.Picture.Bitmap);.Repaint;;TMainForm.Im10MouseEnter(Sender: TObject);.GetBitmap(10, im10.Picture.Bitmap);.Repaint;;TMainForm.Im10MouseLeave(Sender: TObject);.GetBitmap(10, im10.Picture.Bitmap);.Repaint;;TMainForm.Im10MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(10, im10.Picture.Bitmap);.Repaint;;TMainForm.Image1Click(Sender: TObject);;;TMainForm.Image1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(2, image1.Picture.Bitmap);.Repaint;;TMainForm.Image1MouseEnter(Sender: TObject);.GetBitmap(1, image1.Picture.Bitmap);.Repaint;;TMainForm.Image1MouseLeave(Sender: TObject);.GetBitmap(0, image1.Picture.Bitmap);.Repaint;;TMainForm.Image1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(0, image1.Picture.Bitmap);.Repaint;;TMainForm.Image2Click(Sender: TObject);;;TMainForm.Image2MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(5, image2.Picture.Bitmap);.Repaint;;TMainForm.Image2MouseEnter(Sender: TObject);.GetBitmap(4, image2.Picture.Bitmap);.Repaint;;TMainForm.Image2MouseLeave(Sender: TObject);.GetBitmap(3, image2.Picture.Bitmap);.Repaint;;TMainForm.Image2MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(3, image2.Picture.Bitmap);.Repaint;;TMainForm.Im4Click(Sender: TObject);;;TMainForm.Im4MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(4, im4.Picture.Bitmap);.Repaint;;

TMainForm.Im4MouseEnter(Sender: TObject);.GetBitmap(4, im4.Picture.Bitmap);.Repaint;;

TMainForm.Im4MouseLeave(Sender: TObject);.GetBitmap(4, im4.Picture.Bitmap);.Repaint;;

TMainForm.Im4MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(4, im4.Picture.Bitmap);.Repaint;;

TMainForm.Im3Click(Sender: TObject);;;

TMainForm.Im3MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(3, im3.Picture.Bitmap);.Repaint;;

TMainForm.Im3MouseEnter(Sender: TObject);.GetBitmap(3, im3.Picture.Bitmap);.Repaint;;

TMainForm.Im3MouseLeave(Sender: TObject);.GetBitmap(3, im3.Picture.Bitmap);.Repaint;;

TMainForm.Im3MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(3, im3.Picture.Bitmap);.Repaint;;TMainForm.Im5Click(Sender: TObject);;;

TMainForm.Im5MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(5, im5.Picture.Bitmap);.Repaint;;

TMainForm.Im5MouseEnter(Sender: TObject);.GetBitmap(5, im5.Picture.Bitmap);.Repaint;;

TMainForm.Im5MouseLeave(Sender: TObject);.GetBitmap(5, im5.Picture.Bitmap);.Repaint;;

TMainForm.Im5MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(5, im5.Picture.Bitmap);.Repaint;;

TMainForm.Im2Click(Sender: TObject);;;

TMainForm.Im2MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(2, im2.Picture.Bitmap);.Repaint;;

TMainForm.Im2MouseEnter(Sender: TObject);.GetBitmap(2, im2.Picture.Bitmap);.Repaint;;

TMainForm.Im2MouseLeave(Sender: TObject);.GetBitmap(2, im2.Picture.Bitmap);.Repaint;;

TMainForm.Im2MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(2, im2.Picture.Bitmap);.Repaint;;

TMainForm.Im1Click(Sender: TObject);;;

TMainForm.Im1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(1, im1.Picture.Bitmap);.Repaint;;

TMainForm.Im1MouseEnter(Sender: TObject);.GetBitmap(1, im1.Picture.Bitmap);.Repaint;;

TMainForm.Im1MouseLeave(Sender: TObject);.GetBitmap(1, im1.Picture.Bitmap);.Repaint;;TMainForm.Im1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(1, im1.Picture.Bitmap);.Repaint;;

TMainForm.Im6Click(Sender: TObject);;;

TMainForm.Im6MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(6, im6.Picture.Bitmap);.Repaint;;

TMainForm.Im6MouseEnter(Sender: TObject);.GetBitmap(6, im6.Picture.Bitmap);.Repaint;;

TMainForm.Im6MouseLeave(Sender: TObject);.GetBitmap(6, im6.Picture.Bitmap);.Repaint;;

TMainForm.Im6MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(6, im6.Picture.Bitmap);.Repaint;;

TMainForm.Im7Click(Sender: TObject);;;

TMainForm.Im7MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(7, im7.Picture.Bitmap);.Repaint;;

TMainForm.Im7MouseEnter(Sender: TObject);.GetBitmap(7, im7.Picture.Bitmap);.Repaint;;TMainForm.Im7MouseLeave(Sender: TObject);.GetBitmap(7, im7.Picture.Bitmap);.Repaint;;

TMainForm.Im7MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(7, im7.Picture.Bitmap);.Repaint;;

TMainForm.Im8Click(Sender: TObject);;;

TMainForm.Im8MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(8, im8.Picture.Bitmap);.Repaint;;

TMainForm.Im8MouseEnter(Sender: TObject);.GetBitmap(8, im8.Picture.Bitmap);.Repaint;;

TMainForm.Im8MouseLeave(Sender: TObject);.GetBitmap(8, im8.Picture.Bitmap);.Repaint;;

TMainForm.Im8MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.GetBitmap(8, im8.Picture.Bitmap);.Repaint;;

TMainForm.lClick(Sender: TObject);;;

TMainForm.lDblClick(Sender: TObject);;;

TMainForm.lKeyPress(Sender: TObject; var Key: Char);key = #13 then;;

TMainForm.MemoEnter(Sender: TObject);.Color := m_clCream;;

TMainForm.MemoExit(Sender: TObject);.Color := m_cl3DLight;;

TMainForm.N10Click(Sender: TObject);;;

TMainForm.N11Click(Sender: TObject);;;

TMainForm.N12Click(Sender: TObject);;;

TMainForm.N13Click(Sender: TObject);;;

TMainForm.N14Click(Sender: TObject);;;

TMainForm.N15Click(Sender: TObject);;;

TMainForm.N16Click(Sender: TObject);;;

TMainForm.N18Click(Sender: TObject);.run;;

TMainForm.N19Click(Sender: TObject);;;

TMainForm.N20Click(Sender: TObject);;;

TMainForm.N21Click(Sender: TObject);;;

TMainForm.N22Click(Sender: TObject);;;

TMainForm.N23Click(Sender: TObject);;;

TMainForm.N24Click(Sender: TObject);;;

TMainForm.N25Click(Sender: TObject);;;

TMainForm.N26Click(Sender: TObject);;;

TMainForm.N27Click(Sender: TObject);;;

TMainForm.N2Click(Sender: TObject);;;

TMainForm.N3Click(Sender: TObject);.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;;

TMainForm.N5Click(Sender: TObject);;;

TMainForm.N6Click(Sender: TObject);;;

TMainForm.N7Click(Sender: TObject);;;

TMainForm.N8Click(Sender: TObject);;;

TMainForm.N9Click(Sender: TObject);;;

TMainForm.SpeedButton5Click(Sender: TObject);;;

TMainForm.CatCBChange(Sender: TObject);;;;

TMainForm.FillCatCB;: tdb;, rn, m_ID : longint;_Name : string;.Clear;.InitializeLocal;.OpenDatabase(m_CatDBFilename, true);i := 1 to db.RecordCount do_ID := db.DirectReadLong(i, 1);_Name := alltrim(db.DirectReadString(i, 2));.Items.AddObject(m_Name, TObject(m_ID));;CatCB.Items.Count > 0 then.ItemIndex := 0;.DBClose;CatCB.Items.Count > 0 then;;

TMainForm.OnSelectCat;: tdb;, rn, m_CatID, m_RecID : longint;_Name : string;_BadList : TList;_BadList := TList.Create;.Clear;_CurCatID := longint(CatCB.Items.Objects[CatCB.ItemIndex]);.InitializeLocal;.OpenDatabase(m_RecDBFilename);i := 1 to db.RecordCount do_CatID := db.DirectReadLong(i, 2);m_CatID <> m_CurCatID then;_RecID := db.DirectReadLong(i, 1);_name := alltrim(db.DirectReadString(i, 3));fileExists(m_DataFolder + along2str(m_RecID) + '.rec') then.AddItem(m_name, TObject(m_RecID))_BadList.Add(TObject(i));;l.Items.Count > 0 then.Itemindex := 0;;m_BadList.Count > 0 thenI := m_BadList.Count - 1 to 0 do_lib.PhisicalDeleteRecordLocalInDB(db, longint(m_BadList[i]));.DBClose;_BadList.Clear;_BadList.Free;;

TMainForm.OnSelectRecept;: string;l.ItemIndex < 0 then.Clear;_curRecID := -1;;;_curRecID := longint(l.Items.Objects[l.ItemIndex]);.Clear;:= m_DataFolder + along2str(m_curRecID) + '.rec';.Lines.LoadFromFile(filename);;

TMainForm.PopupMenu1Popup(Sender: TObject);.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;.Enabled := l.Items.Count > 0;

;

TMainForm.OnDelete;_curIndex : longint;(l.Items.Count < 1) then.Run('В категорії "' + CatCB.Items[CatCB.itemindex] + '" рецепти відсутні', false, false, true, false);;;l.ItemIndex < 0 then.Run('Не вибрано жодного рецепту', false, false, true, false);;;.Run('Ви дійсно хочете видалити рецепт "'+ l.Items[l.Itemindex]+'"?', true, true, false, false);AskDialog.m_SelectedItem <> 1 then;_Curindex := l.ItemIndex;(m_curRecID);;(l, m_curindex);;;

TMainForm.DeleteRecept(recID : longint);, rn : longint;: tdb;.InitializeLocal;.OpenDatabase(m_RecDBFilename);:= tdb_lib.SeekForLong(db, 1, recID, true);(db, rn);(m_DataFolder + along2str(recID)+'.rec');.DBClose;;TMainForm.OnDeleteCategory;: tdb;, catid, recid, i, index : longint;CatCB.Items.Count < 2 then.Run('Неможливо видалити категорію "' + CatCB.Items[CatCB.itemindex] +'".' + #13 +

'Після видалення повинна залишитись хоча б одна категорія.', false, false, true, false);;;l.Count > 0 then.Run('Категорія "' + CatCB.Items[CatCB.itemindex] + '" не пуста!!!' + #13 +

'Видаляючи її, ви видалите всі рецепти,' +#13 +

'що знаходяться в даній категорії. Продовжити?',true, true, false, true).Run('Ви дійсно хочете видалити категорію "' + CatCB.Items[CatCB.itemindex] + '"?' ,true, true, false, true);AskDialog.m_SelectedItem <> 1 then;.InitializeLocal;.OpenDatabase(self.m_RecDBFilename);i := db.RecordCount downto 1 do:= db.DirectReadLong(i, 2);catid <> self.m_CurCatID then;:= db.DirectReadLong(i, 1);(db, i);(m_DataFolder + along2str(recID)+'.rec');;.DBClose;.OpenDatabase(self.m_CatDBFilename);:= tdb_lib.SeekForLong(db, 1, self.m_CurCatID , false);(db, rn);.DBClose;:= CatCB.ItemIndex;;(CatCB, index);;;

TMainForm.OnAddCategory;: tdb;, sNewName : string;, id, i : longint;:= GetTextByTemplate(CatCB.Items, 'Категорія', false);.run('Введіть назву нової категорії', sNewName, false, 50, nil, false,

'',false,'',#0,'Назва нової категорії');not EditTextForm.m_IsEntered then;.InitializeLocal;.OpenDatabase(self.m_CatDBFilename);:= alltrim(EditTextForm.Edit1.Text);:= SeekForString(db, 2, sName, false, true, true);rn > 0 then.Run('Категорія з такою назвою вже існує.' + #13 + 'Створення неможливе', false, false, true, false);.DBClose;;;:= db.RecordCount + 1;:= CalcMaxLongValue(db, 1) + 1;.DirectWriteLong(rn, 1, id);.DirectWriteString(rn, 2, sName);.DBClose;;.ItemIndex := CatCB.Items.Count - 1;;;

TMainForm.OnMoveToCat;, id, rn : longint;: tdb;l.ItemIndex < 0 then.Run('Не вибрано жодного рецепту для переміщення!', false, false, true, false);;;CatCB.Items.Count = 1 then

.Run('У вас є всього одна категорія!' + #13 +

'Переміщення в іншу категорію неможливе.', false, false, true, false);;;

.L.Clear;(CatCB.Items,SimpleSelectInListBoxForm.L.Items);.Run('Категорія, в яку перемістити рецепт', false, false,

'', false, true, CatCB.ItemIndex);not SimpleSelectInListboxFOrm.m_IsSelected then;:= SimpleSelectInListboxFOrm.L.ItemIndex;index = CatCB.ItemIndex then.Run('Рецепт вже знаходиться в категорії ' + '"' + CatCB.Items[CatCB.itemindex] + '".', false, false, true, false);;;:= longint(CatCB.Items.Objects[index]);.InitializeLocal;.OpenDatabase(self.m_RecDBFilename);:= SeekForLong(db, 1, self.m_curRecID, false);.DirectWriteLong(rn, 2, id);.DBClose;.ItemIndex := index;;;TMainForm.OnEdit;_CurRec : longint;l.Items.count < 1 then.Run('Рецепти відсутні в категорії "' + CatCB.Items[CatCB.itemindex] + '"!', false, false, true, false);;;_CurRec := l.ItemIndex;.run(m_curRecID, CatCB.ItemIndex, l.Items[l.itemindex]);not RecEditorForm.m_isEntered then;;.ItemIndex := m_CurRec;;;

TMainForm.OnNewRec;.run(-1, CatCB.ItemIndex);not RecEditorForm.m_isEntered then;.ItemIndex := RecEditorForm.cb.ItemIndex;;.ItemIndex := l.Items.Count - 1;;;OnSelectReceptWithID(recID: Integer; CatID: longint);: longint;:= FindObjectInComboBox(MainForm.CatCB, CatID);.CatCB.ItemIndex := index;.OnSelectCat;:= FindObjectInLB(MainForm.l, RecID);.l.ItemIndex := index;.OnSelectRecept;;

TMainForm.OnFind;.RunForDB('Пошук рецепта', self.m_RecDBFilename, 3, 1, 2, OnSelectReceptWithID);;

TMainForm.OnSaveToFile;: string;: string;

l.ItemIndex < 0 then.Run('Спочатку виберіть рецепт для збереження',false, false, true, false);;;.filename := GetStandartFolder($0005) + '\' + l.Items[l.itemindex];not SaveDialog1.Execute then;:= SaveDialog1.FileName;:= mylib.GetExtentionFromName(sFilename);sExt = '' then:= sFilename + '.txt';

.Lines.SaveToFile(sFilename);

.Run('Файл успішно збережено',false, false, true, false);

;

TMainForm.OnCopyToCat;, id, rn, rn2, id2 : longint;: tdb;: TStrings;: string;, filnm2 : string;l.ItemIndex < 0 then.Run('Не вибрано жодного рецепту для копіювання!', false, false, true, false);;;.L.Clear;(CatCB.Items,SimpleSelectInListBoxForm.L.Items);.Run('Категорія, в яку скопіювати рецепт', false, false,

'', false, true, CatCB.ItemIndex);not SimpleSelectInListboxFOrm.m_IsSelected then;:= SimpleSelectInListboxFOrm.L.ItemIndex;index = CatCB.ItemIndex then.Run('Рецепт вже знаходиться в категорії "' + CatCB.Items[CatCB.itemindex] + ' ".' +#13 +

'Зробити ще одну копію в цій категорії?', true, true, false, false);AskDialog.m_SelectedItem <> 1 then;;

:= TStringList.Create;.InitializeLocal;.OpenDatabase(self.m_RecDBFilename);(x, MainForm.m_RecDBFilename, 3);:= mylib.GetTextByTemplate(x, 'Копія-'+ l.Items[l.itemindex], true);.Free;.run('Введіть назву копії рецепту', sNewName, false, 50, nil, false,

'',false,'',#0,'Назва рецепту');not EditTextForm.m_IsEntered then.DBClose;;;:= alltrim(EditTextForm.Edit1.Text);:= tdb_lib.SeekForString(db, 3, sNewName, false, true, true);(rn > 0) and (length(sNewName) > 0) then.run('Неможливо зберегти рецепт.'+#13+'Рецепт з такою назвою вже існує!', false, false, true, false);.DBClose;;;:= longint(CatCB.Items.Objects[index]);:= CalcMaxLongValue(db, 1) + 1;:= db.RecordCount + 1;.DirectWriteLong(rn2, 1, id2);.DirectWriteLong(rn2, 2, id);.DirectWriteString(rn2, 3, sNewName);:= m_DataFolder + along2str(m_currecID) + '.rec';:= m_DataFolder + along2str(id2) + '.rec';.DBClose;(filnm1, filnm2);.ItemIndex := index;;;

TMainForm.OnOpenFromFile;: string;.DefaultExt := GetStandartFolder($0005);not OpenDialog1.Execute then;:= OpenDialog1.FileName;.run(-1, CatCB.ItemIndex, '', sFilename);not RecEditorForm.m_isEntered then;.ItemIndex := RecEditorForm.cb.ItemIndex;;.ItemIndex := l.Items.Count - 1;;;

TMainForm.OnRenameCat;: tdb;, sNewName : string;, id, index, index2 : longint;:= CatCB.Items[CatCB.Itemindex];.run('Введіть нову назву категорії', sName, false, 50, nil, false,

'',false,'',#0,'Назва категорії');not EditTextForm.m_IsEntered then;:= alltrim(EditTextForm.Edit1.Text);sNewName = sName then;.InitializeLocal;.OpenDatabase(self.m_CatDBFilename);:= SeekForString(db, 2, sNewName, false, true, true);rn > 0 then.Run('Категорія з такою назвою вже існує.' + #13 + 'Перейменування неможливе', false, false, true, false);.DBClose;;;:= SeekForLong(db, 1, m_CurCatID, false);.DirectWriteString(rn, 2, sNewName);.DBClose;:= CatCB.ItemIndex;:= l.ItemIndex;;.ItemIndex := index;.ItemIndex := index2;;;


procedure TMainForm.OnRenameRecept;: tdb;, sNewName : string;, id, i : longint;l.ItemIndex < 0 then.Run('Не вибрано жодного рецепту', false, false, true, false);;;:= l.Items[l.Itemindex];.run('Введіть нову назву рецепту', sName, false, 50, nil, false,

'',false,'',#0,'Назва рецепту');not EditTextForm.m_IsEntered then;:= alltrim(EditTextForm.Edit1.Text);sNewName = sName then;.InitializeLocal;.OpenDatabase(self.m_RecDBFilename);:= SeekForString(db, 3, sNewName, false, true, true);rn > 0 then.Run('Рецепт з такою назвою вже існує.' + #13 + 'Перейменування неможливе', false, false, true, false);.DBClose;;;:= SeekForLong(db, 1, m_CurRecID, false);.DirectWriteString(rn, 3, sNewName);.DBClose;.Items[l.ItemIndex] := sNewName;;

TMainForm.ApplyNormColorsOverRGB;.Color := RGB(196, 203, 222);.Color := RGB(196, 203, 222);.Color := RGB(192, 192, 192);_cl3Dlight := RGB(227, 227, 227);_ClCream := RGB(255, 251, 240);.Color := m_cl3Dlight;.Color := m_cl3Dlight;.Color := m_cl3Dlight;;.

.PAS

RecInterfaceUnit;

CreateCatDataBase(filename : string);CreateRecDataBase(filename : string);

tdb_lib;

CreateCatDataBase(filename : string);: tdb;.InitializeLocal;.DBSetName(filename);.AddField('ID ','l', 4, 0);.AddField('name ','c', 40, 0);.DBCreate;.DBClose;;

CreateRecDataBase(filename : string);: tdb;.InitializeLocal;.DBSetName(filename);.AddField('ID ','l', 4, 0);.AddField('CatID ','l', 4, 0);.AddField('name ','c', 50, 0);.DBCreate;.DBClose;;.

.PASRecEditorFormUnit;


, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Buttons, StdCtrls, ExtCtrls, ComCtrls, tdb_lib, askdialogunit;

= class(TForm): TStatusBar;: TPanel;: TEdit;: TComboBox;: TPanel;: TPanel;: TLabel;: TLabel;: TMemo;: TImage;: TImage;cancelbutClick(Sender: TObject);FormKeyPress(Sender: TObject; var Key: Char);MemoChange(Sender: TObject);FormCloseQuery(Sender: TObject; var CanClose: Boolean);FormShow(Sender: TObject);MemoEnter(Sender: TObject);MemoExit(Sender: TObject);e1Enter(Sender: TObject);e1Exit(Sender: TObject);im1Click(Sender: TObject);im1MouseEnter(Sender: TObject);im1MouseLeave(Sender: TObject);im1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);im1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im2Click(Sender: TObject);Im2MouseEnter(Sender: TObject);Im2MouseLeave(Sender: TObject);Im2MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Im2MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);

{ Private declarations }_ID : longint;_cbindex : longint;_catID : longint;_editMode : boolean;_filename : string;_recName : string;_isEntered : boolean;_recfilename : string;_NeedToSave : boolean;_isBlocked : boolean;_cl3dLight : TColor;_clCream : TColor;run (recID : longint = -1; m_index : longint = -1; m_name : string = ''; filename : string = '');FillCombobox;FillMemo;OnSave;StatusText : string;OnChange;OnExit : boolean;ApplyNormColorsOverRGB;;

: TRecEditorForm;


MainFormUnit, MyLib;

{$R *.dfm}TRecEditorForm.run(recID: longint = -1; m_index : longint = -1; m_name : string = ''; filename : string = '');: TStrings;: string;: longint;_isBlocked := false;.Clear;.Clear;_recfilename := filename;_id := recID;_cbindex := m_index;(m_ID = -1) then_editMode := false_editMode := true;length(filename) > 0 then:= mylib.GetFileNameFromFilePath(filename);:= RevFindChar('.', sDefName);n > 0 then:= copy(sDefName, 1, n-1);.text := sDefName;not m_editMode then

:= TStringList.Create;(x, MainForm.m_RecDBFilename, 3);:= mylib.GetTextByTemplate(x, 'Рецепт');.text := sDefname;_recName := e1.Text;.Free;_recName := m_name;.Text := m_name;;;;(@self);;length(filename) < 1 then_NeedToSave := false_NeedToSave := true;;;;

TRecEditorForm.cancelbutClick(Sender: TObject);;;

TRecEditorForm.e1Enter(Sender: TObject);.Color := m_clCream;;

TRecEditorForm.e1Exit(Sender: TObject);

.Color := m_cl3DLight;;

TRecEditorForm.FillCombobox;: tdb;, rn, m_CID : longint;_Name : string;.Clear;.InitializeLocal;.OpenDatabase(MainForm.m_CatDBFilename, true);i := 1 to db.RecordCount do_CID := db.DirectReadLong(i, 1);_Name := alltrim(db.DirectReadString(i, 2));.Items.AddObject(m_Name, TObject(m_CID));;.DBClose;not m_editMode then.Enabled := true;.ItemIndex := m_cbindex;.Enabled := false;.ItemIndex := m_cbindex;;;

TRecEditorForm.FillMemo;.Clear;m_editMode then_filename := MainForm.m_DataFolder + along2str(m_ID) + '.rec';.Lines.LoadFromFile(m_filename);length(m_recfilename) > 0 then.Lines.LoadFromFile(m_recfilename);;

TRecEditorForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);:= false;OnExit then:= true;;

TRecEditorForm.FormKeyPress(Sender: TObject; var Key: Char);key of

#10 : begin_isBlocked := true;;;

#27 : begin_isEntered := false;;;;;

TRecEditorForm.FormShow(Sender: TObject);.SetFocus;;

TRecEditorForm.im1Click(Sender: TObject);;;

TRecEditorForm.im1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.imgclick.GetBitmap(10, im1.Picture.Bitmap);.Repaint;;TRecEditorForm.im1MouseEnter(Sender: TObject);.imgon.GetBitmap(10, im1.Picture.Bitmap);.Repaint;;

TRecEditorForm.im1MouseLeave(Sender: TObject);.imgnorm.GetBitmap(10, im1.Picture.Bitmap);.Repaint;;

TRecEditorForm.im1MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.imgnorm.GetBitmap(10, im1.Picture.Bitmap);.Repaint;;

TRecEditorForm.Im2Click(Sender: TObject);;;

TRecEditorForm.Im2MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.imgclick.GetBitmap(11, im2.Picture.Bitmap);.Repaint;;

TRecEditorForm.Im2MouseEnter(Sender: TObject);.imgon.GetBitmap(11, im2.Picture.Bitmap);.Repaint;;

TRecEditorForm.Im2MouseLeave(Sender: TObject);.imgnorm.GetBitmap(11, im2.Picture.Bitmap);.Repaint;;

TRecEditorForm.Im2MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);.imgnorm.GetBitmap(11, im2.Picture.Bitmap);.Repaint;;

TRecEditorForm.MemoChange(Sender: TObject);m_isBlocked then_isBlocked := false;;;;_NeedToSave := true;;

TRecEditorForm.MemoEnter(Sender: TObject);.Color := m_ClCream;;

TRecEditorForm.MemoExit(Sender: TObject);.Color := m_Cl3DLight;;

TRecEditorForm.OnSave;: tdb;: longint;, newID : longint;_Recname := alltrim(e1.text);.InitializeLocal;.OpenDatabase(mainForm.m_RecDBFilename);:= tdb_lib.SeekForString(db, 3, m_RecName, false, true, true);(rn > 0) and (length(m_Recname) > 0) and not m_editMode then.run('Неможливо зберегти рецепт.'+#13+'Рецепт з такою назвою вже існує!', false, false, true, false);.SetFocus;.DBClose;;;length(m_Recname) < 1 then.run('Неможливо зберегти рецепт.'+#13+'Введіть, будь-ласка, назву рецепту!', false, false, true, false);.SetFocus;.DBClose;;;m_editMode then:= tdb_lib.SeekForLong(db, 1, m_ID, false);rn > 0 then.DirectWritestring(rn, 3, m_RecName);.DBClose(true);.Lines.SaveToFile(m_filename);_isEntered := true;_needToSave := false;;;:= db.RecordCount + 1;:= CalcMaxLongValue(db, 1) + 1;_catID := longint(cb.Items.Objects[cb.ItemIndex]);.DirectWriteLong(rn, 1, newID);.DirectWriteLong(rn, 2, m_CatID);.DirectWriteString(rn, 3, m_Recname);_filename := MainForm.m_DataFolder + along2str(newID)+'.rec';.Lines.SaveToFile(m_filename);.DBClose;_isEntered := true;_needToSave := false;;;;

TRecEditorForm.StatusText : string;, row, col, sym : longint;:= 0;:= length(memo.Lines[memo.Lines.count - 1]);:= memo.Lines.Count;i := 0 to memo.Lines.Count - 1 do:= sym + length(memo.Lines[i]);:= inttostr(row) + ' рядків, ' + inttostr(sym) + ' символів';;

TRecEditorForm.OnChange;.Panels[1].Text := StatusText;;

TRecEditorForm.OnExit : boolean;m_NeedToSave then.Run('Текст рецепту не збережений.' +

#13 +'Зберегти текст?', true, true, false, true);AskDialog.m_SelectedItem of

: OnSave;

: begin_needToSave := false;:= true;_isEntered := false;;;

: begin:= false;;;;;:= true;;TRecEditorForm.ApplyNormColorsOverRGB;.Color := RGB(196, 203, 222);.Color := RGB(196, 203, 222);_cl3Dlight := RGB(227, 227, 227);_ClCream := RGB(255, 251, 240);.Color := m_cl3Dlight;.Color := m_cl3Dlight;.Color := m_cl3Dlight;;


Міністерство освіти і науки України Вінницький національний технічний університет Факультет КІ Кафедра ПЗ Курсова ро

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ