Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Компоненти Indy для роботи з мережею
(TIdTCPServer, TIdPeerThread, TIdTCPClient) Постановка задачі: розробити програму для обміну текстовими повідомленнями через мережу. Послідовність виконання: 1 Помістіть на форму програми-сервера компоненти TIdTCPServer, TMemo і заповніть код: //конструктор форми __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { IdTCPServer1->DefaultPort=8090;//задати порт IdTCPServer1->Active=true;//зробити сервер активним Memo1->Lines->Clear();//очистити Memo1 } //обробник події OnExecute компонента IdTCPServer1 //AThread - потік, який використовується для клієнтських з'єднань void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread) { try {//добавити в Memo1 отриманий рядок Memo1->Lines->Add(AThread->Connection->ReadLn()); //добавити в Memo1 віддалену IP адресу Memo1->Lines->Add(AThread->Connection->Binding->PeerIP); //надіслати локальну IP адресу AThread->Connection->WriteLn(AThread->Connection->Binding->IP); } catch(...) {//при помилці надіслати "помилка" AThread->Connection->WriteLn("помилка"); } AThread->Connection->Disconnect();//роз'єднати з'єднання }
3 Для можливості роботи програми-сервера на комп’ютері без середовища Borland C++ Builder 6 задайте опції проекту: Project/Options.../Packages/зніміть прапорець Build with runtime packages. На цей комп’ютер також необхідно скопіювати файли: borlndmm.dll і cc3260mt.dll. 4 Скомпілюйте програму-сервер. 5 Помістіть на форму програми-клієнта компоненти TEdit (2 штуки), TButton, TIdTCPClient, і заповніть код: //конструктор форми __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Edit1->Text="127.0.0.1";//локальний адрес } //обробник події OnClick void __fastcall TForm1::Button1Click(TObject *Sender) { IdTCPClient1->Host=Edit1->Text;//вказати адресу віддаленого комп'ютера IdTCPClient1->Port=8090;//вказати порт try { IdTCPClient1->Connect();//з'єднати з сервером IdTCPClient1->WriteLn(Edit2->Text);//надіслати рядок Edit2->Text = IdTCPClient1->ReadLn();//отримати рядок } catch(...) {//при помилці вивести повідомлення ShowMessage("Помилка з'єднання"); } IdTCPClient1->Disconnect();//роз'єднати з'єднання } 6 Скомпілюйте програму-клієнт. 7 Скопіюйте програму-сервер та файли borlndmm.dll і cc3260mt.dll на віддалений комп’ютер з адресою, наприклад, 192.168.1.5. Виконайте програму-сервер на віддаленій машині і програму клієнт на локальній. Введіть в Edit1 клієнта адресу віддаленого комп’ютера і передайте йому будь-який текст. Для тестування програм без мережі на локальній машині слід вводити адресу 127.0.0.1. Створення компонентів VCL Постановка задачі: розробити компонент VCL TButtonEx на основі класу TButton, який додатково має властивість State логічного типу, яка визначає стан компоненту (true або false). Стан (State) компоненту змінюється на протилежний при натиску на кнопку (коли відбувається подія OnClick).
Послідовність виконання: 1 Закриваємо все: File/Close All 2 Створюємо новий компонент: File/New/Other.../Component/Ok 3 В діалоговому вікні вводимо: Ancestor type – TButton [StdCtrls], Class name – TButtonEx, Palette page – Samples, UnitFileName – вказуємо C:\Program Files\Borland\CBuilder6\Projects\ButtonEx.cpp. Натискаємо Ok. 4 Зберігаємо все: File/Save All, закриваємо все: File/Close All 5 Створюємо новий додаток: File/New/Application 6 В unit1.cpp дописуємо директиву #include "ButtonEx.cpp" 7 В модулі unit1.cpp після рядка TForm1 *Form1; оголосіть об’єкт типу TButtonEx: TButtonEx *btn; 8 За допомогою Class Explorer в клас TButtonEx добавляємо властивість New Property... 9 В діалоговому вікні вводимо: Property name – State, Type – bool, create Set method, implement in: ButtonEx.cpp, create field, use this field for the read specifier, use this field for implementing the Set method, Default: true. 10 За допомогою Class Explorer в клас TButtonEx добавляємо метод New Method... 11 В діалоговому вікні вводимо: Method name – Click, Arguments – void, Function result – void, Visibility – public, Directives - __fastcall, Call Inherited. 12 В класі TButtonEx позначте цей метод словом DYNAMIC так: DYNAMIC void __fastcall Click(void); 13 Вставте в реалізацію цього методу код: (FState)?this->SetState(false):this->SetState(true); перед рядком TButton::Click(); 14 За допомогою Class Explorer в клас TForm1 добавляємо метод New Method... 15 В діалоговому вікні вводимо: Method name – btn_click, Arguments – TObject *Sender, Function result – void, Visibility – public, Directives - __fastcall. 16 В реалізацію методу вставте код: if (btn->State) btn->Caption="true"; else btn->Caption="false"; Application->MessageBoxA("Changed","State",0); 17 В конструктор класу TForm1::TForm1 вставте код: btn=new TButtonEx(this); btn->Parent=this; btn->Left=100; btn->Top=100; btn->OnClick=btn_click; 18 Зберігаємо все: File/Save All. 19 Виконайте програму: Run/Run. 20 Component/Install Component, виберіть Into new package і вкажіть назву пакету TButtonEx. 21 Закриваємо все: File/Close All 22 Приклад використання нового компоненту. Створіть новий додаток, який використовує новий компонент TButtonEx. Добавте на форму компонент ButtonEx і створіть обробник події OnClick. В функцію TForm1::ButtonEx1Click вставте код: Application->MessageBoxA(BoolToStr(ButtonEx1->State, true).c_str(),"State",0); і виконайте програму.
Код компоненту TButtonEx Файл ButtonEx.h
Створення DLL Постановка задачі: створити бібліотеку dll, яка містить простий клас. Послідовність виконання: Створюємо бібліотеку DLL: 1 File/New/Other/DLL Wizard 2 Source Type: C++ 3 Забрати прапорець з: Use VCL, Ok 4 Добавляємо файл заголовків File1.h: File/New/Other/Header File 5 File/Save/File1.h 6 Project/Add To Project.../File1.h 7 Вставте у файл File1.h код: __declspec(dllexport) class My { private: double x; public: My(); double RetSqr(); }; 8 Добавте до Unit1.cpp: #include "File1.h" а також реалізацію методів: My::My() { x=2; } double My::RetSqr() { return x*x; } 9 Компілюємо: Project/Build Project1 Створюємо додаток, який використовує DLL: 10 Створюємо додаток: File/New/Application 11 Помістіть на форму поле і кнопку. 12 Добавте до модуля cpp: #include "File1.h" 13 Добавляємо до проекту бібліотеку: Project/Add To Project.../Project1.lib 14 Добавте в клас TForm1 в розділ private: My *obj; 15 В конструктор класу TForm1::TForm1 вставте код: obj = new My(); 16 В метод TForm1::Button1Click вставте код: { Edit1->Text=AnsiString(obj->RetSqr()); } 17 File/Save Project As... Назвіть модуль Unit2, а проект Project2. 18 Run. Повинен появитись результат: 4.
|
||||||
Последнее изменение этой страницы: 2017-01-24; просмотров: 186; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.88.249 (0.021 с.) |