Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Розробка проекту «Чат для локальної та глобальної мережі»Содержание книги
Поиск на нашем сайте
Завдання. Створити програму «Чат для локальної та глобальної мережі», яка обробляє клієнтські запити. ХІД РОБОТИ 1. Створити папку С:\Delphi\lab_12. 2. Створити новий проект.Присвоюємо властивості Caption форми значення Чат. 3. Розмістити на формі компоненти MainManu з вкладкиStandart палітри компонентів і створимо меню. Присвоїмо властивості Name пунктів меню З’єднання наступні значення: Створити - create1; З’єднати - connect1; Роз’єднати - disconnect1. Властивості Enabled пункту меню З’єднання – Роз’єднати присвоюємо значення false, щоб зробити цю команду недоступною. 4. Розмістимо на формі компонент Memo і встановити цьому компоненту властивості за табл. 1. Таблиця 1
5. Нижче розмістимо компонент Edit і присвоїмо його властивостям значення, як в табл. 2. Таблиця 2
6. Справа від поля SMS розмістимо компонент Button і надамо його властивостям наступні значення (табл.3). Таблиця 3
7. Два важливих компоненти нашої програми, які будуть виконувати роль клієнта і сервера, знаходяться в палітрі компонентів на закладці Internet. Це компоненти TServerSocket та TClientSocket. 8. Для компонента ClientSocket змінимо значення властивості Port на 1945, Host – на 127.0.0.1, а Name – на Client. Для ServerSocket встановимо для властивості Port значення 1945, а для властивості Name – server. Форма набуде такого вигляду:
Розробка форми на настройок 9. Тепер створимо ще одну форму, яка буде служити для зміни настойок. Для цього виконаємо команду меню File–New–Form. В результаті чого з’явиться нова форма з іменем form2. присвоїмо її властивостям значення згідно табл. 4. Таблиця 4
10. Розмістимо на формі три компоненти Label, три компоненти Edit та Button. Задано їхнім властивостям значення згідно таблиці 5. Таблиця 5
В результаті форма набуде такого вигляду: Розробка програмного коду 11. Для того, щоб користувач не вводив всі настройки кожен раз заново, будемо зберігати їх в INI-файлі. Для форми Settings оголосимо змінну path типу String і Win типу TIniFile: Var settings: Tsettings; path:string; win:TiniFile; також для роботи з INI-файлами добавимо в розділ uses посилання на IniFiles: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IniFiles, StdCtrls; Таке посилання необхідно добавити і в розділ uses головної форми програми. Змінимо також розділ var: Var Form1: TForm1; win:TiniFile; path, s, disco:string; f:file of byte; i: integer; ipc, ips, name:string;
12. Створимо обробник події OnClick для пункту меню Настройки: procedure TForm1.N5Click(Sender: TObject); begin settings.ShowModal; win:=TIniFile.Create(path); name:=win.ReadString('settings','name',name); ips:=win.ReadString('settings','ips',ips); ipc:=win.ReadString('settings','ipc',ipc); win.Free; end; 13. При натисненні кнопки встановити буде виконано запис запам’ятовування введених настройок: procedure Tsettings.Button1Click(Sender: TObject); begin path:=getcurrentdir+'\settings.ini'; win:=TIniFile.Create(path); win.WriteString('settings','name',name.Text); win.WriteString('settings','ips',ips.Text); win.WriteString('settings','ipc',ipc.Text); win.Free; close; end;
14. Тепер розглянемо головну форму. Створимо для неї обробник події OnCreate: procedure TForm1.FormCreate(Sender: TObject); begin path:=getcurrentdir+'\settings.ini'; if fileExists(path)=false then begin assignfile(f,path); rewrite(f); closefile(f); win:=TIniFile.Create(path); win.WriteString('settings','name','Noname'); win.WriteString('settings','ips','127.0.0.1'); win.WriteString('settings','ipc','127.0.0.1'); win.Free; end; win:=TIniFile.Create(path); name:=win.ReadString('settings','name',name); ips:=win.ReadString('settings','ips',ips); ipc:=win.ReadString('settings','ipc',ipc); win.Free; client.Host:=ipc; end;
15. Тепер створимо обробник події onClick для пунктів меню З’єднання. Для пункту Створити:
procedure TForm1.create1Click(Sender: TObject); begin server.Active:=true; txt.Lines.Add('створюємо новий чат...'); create1.Enabled:=false; connect1.Enabled:=false; disconnect1.Enabled:=true; send.Enabled:=true; end; Для пункту З’єднати: procedure TForm1.connect1Click(Sender: TObject); begin Client.Host:=ips; Client.Active:=true; create1.Enabled:=false; connect1.Enabled:=false; send.Enabled:=true; disconnect1.Enabled:=true; end;
Для пункту Роз’єднати: procedure TForm1.disconnect1Click(Sender: TObject); begin if Client.Active=true then Client.Active:=false else Server.Active:=false; send.Enabled:=false; disconnect1.Enabled:=false; create1.Enabled:=true; connect1.Enabled:=true; send.Enabled:=false; end; Тут ми спочатку перевіряємо, чи активний клієнт. Якщо так, то від’єднаємо його, в протилежному випадку від’єднаємо сервер. Як ви замітили, постійно йде активація/деактивація кнопки і пунктів меню. Це запобігає від помилок, які можуть виникнути при виборі команди Роз’єднати у випадку відсутності з’єднання або ж спроби відіслати повідомлення, коли ви знаходитись в чаті і т.д.
16. Для відправлення повідомлення потрібно натиснути кнопку Відправити або натиснути клавішу Enter. Обробник події OnClick для кнопки відправити: procedure TForm1.sendClick(Sender: TObject); begin txt.Lines.Add(name+':'+sms.Text); if Server.Active=true then begin Server.Socket.Connections[0].SendText(name+':'+sms.Text); end else begin Client.Socket.SendText(name+':'+sms.Text); end; sms.Clear; end; Тут ми перевіряємо, є ми сервером чи клієнтом, а потім відправляємо своє ім’я разом з повідомленням у відповідності з поставленою умовою.
17. Для того, щоб користувачу не приходилось тягнутися до мишки після кожної репліки, забезпечимо відправку повідомлення при натисненні клавіші Enter. Для того створимо для компонента smsобробник події OnKeyPress; procedure TForm1.smsKeyPress(Sender: TObject; var Key: Char); begin if (key=#13) and (send.Enabled=true)then send.Click; end;
18. Тепер залишилось обробити події клієнта і сервера. Для клієнта створимо обробник події OnConnect: procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Socket.SendText('!d1~'+name); txt.Lines.Add('Ви в чаті...'); end; Подія клієнта OnDisconnect виникає при виході із чату або при роз’єднані: procedure TForm1.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Socket.SendText('!d2~'+name); txt.Lines.Add('Ви покинули чат...'); end; 19. Створимо для сервера обробник події OnClientRead: procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); begin disco:=''; s:=Socket.ReceiveText; if (s[1]='!')and (s[2]='d') and (s[3]='1') and (s[4]='~') then begin for i:=5 to length(s) do disco:=disco+s[i]; txt.Lines.Add('В чат зайшов '+disco); end; if (s[1]='!')and (s[2]='d') and (s[3]='2') and (s[4]='~') then begin for i:=5 to length(s) do disco:=disco+s[i]; txt.Lines.Add('Чат покинув '+disco); end; if (s[1]<>'!')and(s[4]<>'~') then txt.Lines.Add(s) end;
20. Для сигналізації про помилки в обробниках подій OnError(для клієнта) і OnClientError(для сервера): procedure TForm1.ServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin txt.Lines.Add('Виникла помилка...'); end; procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin txt.Lines.Add('Виникла помилка...'); end;
Обробник подіїOnDestory: procedure TForm1.FormDestroy(Sender: TObject); begin if Client.Active= true then Client.Active:=false; if Server.Active=true then Server.Active:=false; end;
21. Зберегти проект у палці C:\Delphi\lab_l3. 22. Запустити проект та перевірити правильність його виконання.
Питання для самоконтролю:
Лабораторна робота №14. Тема: Створення аліасів в BDE та модуля даних. Мета роботи: Навчитись створювати та записувати у файл конфігурації аліас бази даних. Навчитись створювати модуль даних бази даних Delphi та заносити його до репозиторію.
Завдання 1. Створіть аліас для вашої бази даних. 2. Використовуючи аліас відкрийте почергово всі три створені вами таблиці за допомогою команди File – Open – Table. Заповніть таблиці Покупець, Замовник та Товар записами по 10 покупців, 20 замовлень та 15 товарів (при цьому необхідно вибрати для таблиці режим редагування Table – Edit Data). 3. Створіть модуль даних згідно описаної інструкції та внесіть його до репозиторію. 4. Модифікуйте таблицю Покупець додавши до неї поле Data_nar (Дата народження) і заповніть це поле таблиці. 5. Задайте вторинні індекси для таблиці покупець по полям Prizv та Imja. 6. Задайте паролі для таблиць. 7. Задайте максимальне значення для ціни товару. 8. Задайте маску введення для полів дати. 9. Задайте значення за замовчуванням для поля кількості замовлення. 10. Створіть новий проект 11. Створіть модуль даних згідно описаної інструкції 12. В розділі Uses головної форми додайте назву модулю даних, щоб він став доступним. 13. Розмістіть на формі компоненти TDBGrid та TDBNavigator. Налаштуйте ці компоненти на перегляд таблиці Покупець, Товар та Замовник. Вилучіть з таблиці стовпець Kod_Tovaru за допомогою редагування властивості Columns. 14. Змініть конфігурацію набору кнопок навігатора. ХІД РОБОТИ 1. Створимо нову базу даних. Для цього виконаємо команду Object – New, після чого в діалоговому вікні вибору драйвера вказується значення STANDART. Після натискування кнопки Ok в списку з’являється новий елемент, помічений зеленим трикутником. Це означає, що реєстрація бази даних не завершена. За замовчуванням формується ім’я бази STANDART1, змінимо його на ім’я своєї бази даних, наприклад Торгівля. Переконаймося, що у властивості DEFAULT DRIVER (Драйвер за замовчуванням) стоїть значення PARADOX. У властивості PATH (Шлях пошуку для каталога, в якому зберігаються таблиці) вкажемо робочий каталог, наприклад D:\Student\IH46\BazaData\Data. 2. Тепер зареєстровану в системі BDE базу даних необхідно зберегти. Для цього в контекстному меню об’єкта Торгівля виберемо пункт Apply (Примінити настройки). На запитання про необхідність збереження змін дамо відповідь Yes. Якщо розкрити об’єкт Торгівля, клацнувши по значку “ + ” перед його іменем, на правій панелі SQL Explorer будуть показані всі три таблиці створеної нами бази даних, а значок бази помічається зеленою рамкою, що вказує, що база даних Торгівля відкрита. Робота з базами даних нагадує роботу з файлами. Їх спочатку потрібно відкрити а потім після виконання всіх операцій – обов’язково закрити. Після вивчення структури базу даних Торгівля потрібно закрити за допомогою команди Close контекстного меню. Виділення об’єкту буде знято. Тепер можна закрити вікно SQL Explorer і вернутися в середовище Delphi. 3. Створимо новий проект і додамо до нього модуль даних командою File – New – Data Module. На панелі модуля необхідно розмістити компоненти, що забезпечать доступ до потрібних нам трьох таблиць бази даних Торгівля. Для цього виберемо три компонента TТable та три компонента TDataSource. 4. Налаштуємо компоненти TTable. Для цього властивості DataBaseName присвоїмо з випадаючого списку псевдонім Торгівля. Після цього властивості TableName присвоїмо ім’я відповідної таблиці бази даних із списку. Для активізації таблиць потрібно встановити властивість Active в True. Властивість Name таблиць краще переіменувати в TPrizv, TTovar, TZamov відповідно. 5. Налаштуємо компоненти TDataSource. Для цього властивість DataSet зв’яжіть з відповідною таблицею, а Name переіменуйте в DataSourcePrizv, DataSourceTovar, DataSourceZamov відповідно. 6. Збережемо готовий модуль даних в Object Repository. Для цього клацніть правою кнопкою миші на модулі даних і виберіть Add to Repositoty (Додати до сховища). В полі Title (Назва) наберіть dmTorgivlja. В полі Description (Опис) – форма модуля даних для бази даних Торгівля. Виберіть Data Module із списку Pages і натисніть Ok. Тепер ваш модуль буде зберігатися в репозиторії на вкладинці Data Modules під іменем dmTorgivlja і його можна буде викликати з своїх проектів. Для того щоб можна було звертатися з інших модулів до компонентів доступу до даних, що зберігаються в модулі даних проекту, необхідно включити ім’я файлу модуля даних в секцію uses Перевагою розміщення компонентів доступу до даних в модулі даних є те, що зміна значень довільної властивості проявиться відразу ж в усіх звичайних модулях, до яких підключено цей модуль даних. Крім цього, всі обробники подій цих компонентів, тобто вся логіка роботи с даними програми, зібрані в одному місці, що також дуже зручно.
ТЕОРЕТИЧНІ ВІДОМОСТІ Потужність і гнучкість Delphi при роботі с базами даних базується на низкорівневому ядрі – процесорі баз даних Borland Database Engine (BDE). Його інтерфейс з прикладними програмами називається Integrated Database Application Programming Interface (IDAPI). BDE дозволяє здійснюватися доступ до даним як з використанням традиційного record-орієнтованого (навігаційного) підходу, так і з використанням set-орієнтованого підходу, що використовується в SQL-серверах баз даних. Крім BDE, Delphi дозволяє здійснювати доступ до баз даних, використовуючи технологію (і, відповідно, драйвери) Open DataBase Connectivity (ODBC) фірми Microsoft. Всі інструментальні засоби баз даних Borland – Paradox, dBase, Database Desktop – використовують BDE. Всі особливості, що є в Paradox або dBase, "спадкуються" BDE, і тому цими ж особливостями володіє і Delphi. Аліаси Таблиці зберігаються в базі даних. Деякі СУБД зберігають базу даних в виді декількох окремих файлів, які являють собою таблиці (в основном, всі локальні СУБД), в той час як інші складаються з одного файла, який містить в собі всі таблиці і індекси (InterBase, Access). Наприклад, таблиці dBase і Paradox завжди зберігаються в окремих файлах на диску. Директорій, що містить dBase .DBF файли чи Paradox .DB файли, розглядаються як база даних. Іншими словами, довільний директорій, що містить файли в форматі Paradox чи dBase, розглядається Delphi як єдина база даних. Для переключення на іншу базу даних необхідно просто переключитися на інший директорій. Для успішного доступу до даних програма і BDE повинні володіти інформацією про місцезнаходження файлів потрібної бази даних. Завдання маршруту входить до обов’язків розробника. Самий простий спосіб полягає в явному завдання повного шляху до каталогу, в якому зберігаються файли БД. Але в випадку зміни шляху, що трапляється не так вже рідко (наприклад, при переносі готової програми на комп’ютер замовника), розробник повинен перекомпілювати проєкт з урахуванням майбутнього місцезнаходження БД або передбачити спеціальні елементи керування, в яких можна задати шлях до БД. Для вирішення такого роду проблем розробник може використовувати псевдонім бази даних, який являє собою іменовану структуру, що містить шлях до файлів БД і деякі додаткові параметри. В першому наближенні можна сказати, що ви просто присвоюєте маршруту довільне ім’я, яке використовується в програмі. Тоді при переносі програми на комп’ютері замовника досить створити стандартними засобами BDE одноіменний псевдонім і настроїти його на потрібний каталог. При цьому сама програма не вимагає переробок, так як вона звертається до псевдоніму з одним іменем, а ось BDE вже "знає", куди направити запит програми, що використовує цей псевдоним. Помимо маршруту до файлів бази даних, псевдонім BDE обов’язково містить інформацію про драйвер БД, який використовується для доступу до даних. Наявність інших параметрів залежить від типу драйвера, а значить від типу СУБД. Для керування псевдонімами баз даних, настройки стандартних і додаткових драйверів в складі BDE є спеціальна утиліта – BDE Administrator (виконуваний файл BDEADMIN.EXE). Стандартна конфігурація BDE зберігається в файлі IDAP1.CFG. Для реєстрації створеної групи таблиць як цілістної бази даних ми з вами будемо використовувати іншу утиліту BDE – SQL Explorer (Провідник SQL) яка запускається з середовища Delphi командою DataBase – Explore (Бази даних – Провідник). При цьому на екрані з’явиться діалогове вікно: В лівій частині вікна приводиться список всіх зареєстрованих в системі BDE баз даних, а в правій – властивості поточної бази, що вибрана в списку. Вся інформація структурована в виді ієрархічного дерева. При виборі в лівій панелі утиліти будь-якого вузла, в правій частині на сторінці Definition відображується вся необхідна інформація для цього об’єкта. Для чотирьох локальних драйверів список параметрів в правій части панелі утиліти на сторінці Definition обмежується параметрами стандартного драйвера (STANDARD). Призначення параметрів локальних драйверів BDE (Paradox, dBASE, FoxPro, ASCII) подано в таблиці.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-18; просмотров: 324; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.148.106.49 (0.011 с.) |