Програмування СОМ-порта

Графічний інтерфейс програми, в якому створено можливість вибору СОМ-порту, налаштування його параметрів, режиму передачі, прийому та передачі даних через порт. COM Port Data Emulator програма яка відправляє рендомні числа і приймає дані з нього.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 28.01.2016
Размер файла 536,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru//

Размещено на http://www.allbest.ru//

Завдання до розрахункової роботи

Використовуючи одну з мов об'єктно-орієнтованого програмування (наприклад Builder,Delphi…) написати программу для прийому та передачі даних через СОМ-порт.

У розробленому додатку забезпечити:

1). Прийом та передачу даних через СОМ-порт.

2). Графічний інтерфейс програми.

3). Можливість вибору порту для передачі.

4). Можливість налаштування режиму передачі.

Виконання роботи

Графічний інтерфейс програми в якому створено можливість вибору СОМ-порту, налаштування його параметрів, режиму передачі, прийому та передачі даних через порт

Рис.1. Графічний інтерфейс програми

Рис.2. Програма підчас виконання прийому даних через СОМ-порт

(виділено прийняті дані)

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

Рис.4. COM Port Data Emulator програма яка відправляє рендомні числа і приймає дані з СОМ-порта (останні відправлені виділено)

інтерфейс програма порт

Рис.5.ConfigureVirtualSerialPortDriver програма за допомогою якої буде створено зв'язок між фізичним СОМ-портом який приймає надіслані дані і віртуальним на який відправляються дані

Рис.6. Програма підчас виконання передачі даних через СОМ-порт

(виділено передані дані)

Рис.7 Помилка яка виникає при натисненні кнопки «Прийом» без ініціалізованого порту

Рис.8. COM Port Data Emulator програма яка відправляє рандомні числа і приймає дані з СОМ-порта (виділено останні прийняті)

Вміст файлу: Unit1.cpp

//---------------------------------------------------------------------------

#include<vcl.h>

#pragmahdrstop

#include<registry.hpp>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmaresource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

HANDLE __fastcall TForm1::GetPortHandle(){return hPort1;}

void__fastcall TForm1::FormCreate(TObject *Sender)

{

TRegistry *Reg = newTRegistry;

TStringList *Ts = newTStringList;

DCB dcb;

Reg->RootKey = HKEY_LOCAL_MACHINE;

AnsiStringkey = "HARDWARE\\DEVICEMAP\\SERIALCOMM";

Reg->OpenKey(key,false);

Reg->GetValueNames(Ts);

for(int i=0; i<Ts->Count; ++i)

{

Form1->ComboBox1->Items->Add(Reg->ReadString(Ts[i][0]));

}

Form1->ComboBox1->Text = Reg->ReadString(Ts[0][0]) ;

AnsiStringSpeedValues[14];

SpeedValues[0]="300";

SpeedValues[1]="600";

SpeedValues[2]="1200";

SpeedValues[3]="2400";

SpeedValues[4]="4800";

SpeedValues[5]="9600";

SpeedValues[6]="14400";

SpeedValues[7]="19200";

SpeedValues[8]="38400";

SpeedValues[9]="56000";

SpeedValues[10]="57600";

SpeedValues[11]="115200";

SpeedValues[12]="128000";

SpeedValues[13]="256000";

for(int i=0; i<14; ++i)

{

Form1->CBSpeed1->Items->Add(SpeedValues[i]);

}

Form1->CBSpeed1->Text = SpeedValues[5];

AnsiStringParity[5];

Parity[0]="Чет";

Parity[1]="Нечет";

Parity[2]="Нет";

Parity[3]="Маркер";

Parity[4]="Пробел";

for(int i=0; i<5; ++i)

{

Form1->CBParity1->Items->Add(Parity[i]);

}

Form1->CBParity1->Text = Parity[2];

AnsiStringStopBits[3];

StopBits[0] = "1";

StopBits[1] = "1.5";

StopBits[2] = "2";

for(int i=0; i<3; ++i)

{

Form1->CBStopBit1->Items->Add(StopBits[i]);

}

Form1->CBStopBit1->Text = StopBits[0];

AnsiStringDataBits[5];

DataBits[0] = "4";

DataBits[1] = "5";

DataBits[2] = "6";

DataBits[3] = "7";

DataBits[4] = "8";

for(int i=0; i<5; ++i)

{

Form1->CBDataBit1->Items->Add(DataBits[i]);

}

Form1->CBDataBit1->Text = DataBits[4];

Form1->LStatus1->Caption = "Порт COM1 не ініціалізований";

}

//---------------------------------------------------------------------------

void__fastcall TForm1::BitBtn1Click(TObject *Sender)

{

TRegistry *Reg = newTRegistry;

TStringList *Ts = newTStringList;

AnsiStringport;

AnsiStringSpeedValue;

AnsiStringDataBits;

AnsiStringParity;

AnsiStringStopBits;

DCB dcb;

Reg->RootKey = HKEY_LOCAL_MACHINE;

AnsiStringkey = "HARDWARE\\DEVICEMAP\\SERIALCOMM";

Reg->OpenKey(key,false);

Reg->GetValueNames(Ts);

//port = Ts->Values[0];

port=Reg->ReadString(Ts[0][0]);

SpeedValue = Form1->CBSpeed1->Text;

DataBits = Form1->CBDataBit1->Text;

Parity = Form1->CBParity1->Text;

StopBits = Form1->CBStopBit1->Text;

hPort1 = CreateFile(port.c_str(),GENERIC_READ|

GENERIC_WRITE,0,NULL,OPEN_EXISTING,

FILE_FLAG_OVERLAPPED,NULL);

// if (port == "COM1")

//{

if ((hPort1 == INVALID_HANDLE_VALUE)||

(hPort1 == NULL))

{

MessageBox(NULL,"Помилка ініціалізації COM1","Помилка",MB_ICONERROR);

return;

}

if (!GetCommState(hPort1,&dcb))

{

MessageBox(NULL,"Помилка отримання параметрів COM1","Помилка",MB_ICONERROR);

return;

}

//}

if (SpeedValue=="110") dcb.BaudRate=CBR_110;

if (SpeedValue=="300") dcb.BaudRate=CBR_300;

if (SpeedValue=="600") dcb.BaudRate=CBR_600;

if (SpeedValue=="1200") dcb.BaudRate=CBR_1200;

if (SpeedValue=="2400") dcb.BaudRate=CBR_2400;

if (SpeedValue=="4800") dcb.BaudRate=CBR_4800;

if (SpeedValue=="9600") dcb.BaudRate=CBR_9600;

if (SpeedValue=="14400") dcb.BaudRate=CBR_14400;

if (SpeedValue=="19200") dcb.BaudRate=CBR_19200;

if (SpeedValue=="38400") dcb.BaudRate=CBR_38400;

if (SpeedValue=="56000") dcb.BaudRate=CBR_56000;

if (SpeedValue=="57600") dcb.BaudRate=CBR_57600;

if (SpeedValue=="115200") dcb.BaudRate=CBR_115200;

if (SpeedValue=="128000") dcb.BaudRate=CBR_128000;

if (SpeedValue=="265000") dcb.BaudRate=CBR_256000;

if (DataBits=="4") dcb.ByteSize=4;

if (DataBits=="5") dcb.ByteSize=5;

if (DataBits=="6") dcb.ByteSize=6;

if (DataBits=="7") dcb.ByteSize=7;

if (DataBits=="8") dcb.ByteSize=8;

if (Parity=="Чет") dcb.Parity=EVENPARITY;

if (Parity=="Нечет") dcb.Parity=MARKPARITY;

if (Parity=="Нет") dcb.Parity=NOPARITY;

if (Parity=="Маркер") dcb.Parity=ODDPARITY;

if (Parity=="Пробел") dcb.Parity=SPACEPARITY;

if (StopBits=="1") dcb.StopBits=0;

if (StopBits=="1.5") dcb.StopBits=1;

if (StopBits=="2") dcb.StopBits=2;

//if (port == "COM1")

//{

if (!SetCommState(hPort1,&dcb))

{

MessageBox(NULL,"помилка встановлення параметрів COM1","Помилка",MB_ICONERROR);

return;

}

if (!PurgeComm(hPort1,PURGE_TXCLEAR | PURGE_RXCLEAR))

{

MessageBox(NULL,"Помилка очищення черги COM1","Помилка",MB_ICONERROR);

return;

}

Form1->LStatus1->Caption="Порт COM1 ініціалізовано";

//}

BitBtn2->Enabled = true;

BitBtn1->Enabled = false;

BitBtn3->Enabled = false;

BitBtn4->Enabled = false;

Form1->LStatus1->Caption="Порт COM1 ініціалізовано";

potik1 = newTReadThread(true); potik1->Resume();

potik1->Priority = tpLower;

}

//---------------------------------------------------------------------------

void__fastcall TForm1::BitBtn2Click(TObject *Sender)

{

potik1->Terminate();

//if (port == "COM1")

//{

CloseHandle(hPort1);

Form1->LStatus1->Caption="Порт COM1 деініціалізовано";

//}

BitBtn1->Enabled = true;

BitBtn2->Enabled = false;

Form1->LStatus1->Caption="Порт COM1 деініціалізовано";

}

//---------------------------------------------------------------------------

void__fastcall TForm1::BitBtn3Click(TObject *Sender)

{

if (!SetCommMask (hPort1, EV_RXCHAR))

{

ShowMessage("ПОМИЛКА ВСТАНОВЛЕННЯ МАСКИ ПОРТУ");

};

COMSTAT CommStat;

DWORD dwError;

DWORD dwRead;

BYTE *Buf;

OVERLAPPED OverRead;

int i;

AnsiString STR;

OverRead.hEvent = CreateEvent(NULL, True, False, NULL);

if (OverRead.hEvent == Null)

{ShowMessage("Помилка при спробі зчитування порту");}

if(!Clear Comm Error(hPort1,&dwError,&CommStat)) {

Message Box(NULL,"Помилка очищення порта","Помилка",MB_ICONERROR);}

dwRead = CommStat.cbInQue;

if (dwRead> 0)

{

Buf = new BYTE[dwRead];

if (!ReadFile(hPort1,Buf,dwRead,&dwRead,&OverRead))

{

MessageBox(NULL,"Помилка читання порта","Помилка",MB_ICONERROR);

}

// В chReadBuff знаходяться прочитані байти

// Далі йде обробка отриманих байтів

for(i=0; i<dwRead; ++i)

{

STR=STR+char(Buf[i]);/* IntToStr(short(Buf[i])) + " "; */

}

Form1->Memo1->Lines->Add(STR);

deleteBuf;

}

//тут Memo1 - об'єкт TMemo який слугує для відображення даних отриманих з СОМ-порта.

}

//---------------------------------------------------------------------------

void__fastcall TForm1::BitBtn4Click(TObject *Sender)

{

BYTE chWriteBuff[1024];

OVERLAPPED Sync;

DWORD dwWrite;

AnsiStringstr_buf;

int i;

str_buf = Edit1->Text;//.c_str()-48;

for(i=0;i<str_buf.Length();i++)

{

chWriteBuff[i]=char(str_buf[i+1]);

}

Sync.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

if (Sync.hEvent==NULL)

{

ShowMessage("ПОМИЛКА СТВОРЕННЯ ПОДІЇ");

};

if (!WriteFile(hPort1, &chWriteBuff,str_buf.Length(), &dwWrite, &Sync))

{

if (GetLastError()!=ERROR_IO_PENDING)

{

ShowMessage("ПОМИЛКА ЗАПИСУ ДАНИХ");

}

}

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button1Click(TObject *Sender)

{

BitBtn3->Enabled = true;

BitBtn4->Enabled = true;

}

//---------------------------------------------------------------------------

Вміст файлу: Unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Buttons.hpp>

#include "Unit3.h"

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published:// IDE-managed Components

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TComboBox *CBSpeed1;

TComboBox *CBParity1;

TComboBox *CBStopBit1;

TComboBox *CBDataBit1;

TBitBtn *BitBtn1;

TBitBtn *BitBtn2;

TLabel *LStatus1;

TComboBox *ComboBox1;

TLabel *Label6;

TMemo *Memo1;

TEdit *Edit1;

TBitBtn *BitBtn3;

TBitBtn *BitBtn4;

TLabel *Label7;

TLabel *Label8;

TLabel *Label9;

TLabel *Label10;

TButton *Button1;

void __fastcallFormCreate(TObject *Sender);

void __fastcall BitBtn1Click(TObject *Sender);

void __fastcall BitBtn2Click(TObject *Sender);

void __fastcall BitBtn3Click(TObject *Sender);

void __fastcall BitBtn4Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

private:// User declarations

TReadThread *potik1;

public:// User declarations

AnsiString port;

HANDLE hPort1;

HANDLE __fastcallGetPortHandle();

__fastcallTForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Вміст файлу: Unit3.cpp

//---------------------------------------------------------------------------

#include<vcl.h>

#pragmahdrstop

#include "Unit1.h"

#include "Unit3.h"

#pragmapackage(smart_init)

//---------------------------------------------------------------------------

// Important: Methodsandpropertiesofobjectsin VCL canonlybe

// usedin a methodcalledusingSynchronize, forexample:

//

// Synchronize(UpdateCaption);

//

// whereUpdateCaptioncouldlooklike:

//

// void__fastcall TReadThread::UpdateCaption()

// {

// Form1->Caption = "Updatedin a thread";

// }

//---------------------------------------------------------------------------

__fastcall TReadThread::TReadThread(boolCreateSuspended)

: TThread(CreateSuspended)

{

}

//---------------------------------------------------------------------------

void__fastcall TReadThread::Execute()

{

HANDLE hPort;

COMSTAT CommStat;

DWORD dwError;

OVERLAPPED OverRead; int i;

AnsiString STR;

FreeOnTerminate = true;

hPort = Form1->GetPortHandle();

if (!SetCommMask (hPort, EV_RXCHAR))

{

ShowMessage("ПОМИЛКА ВСТАНОВЛЕННЯ МАСКИ ПОРТУ");

};

OverRead.hEvent = CreateEvent(NULL, True, False, NULL);

if (OverRead.hEvent == Null)

{ShowMessage("Помилка при спробі зчитування порту");

}

while(1){

if(!ClearCommError(hPort,&dwError,&CommStat))

{

MessageBox(NULL,"Помилка очищення порту","Помилка",MB_ICONERROR);

}

dwRead = CommStat.cbInQue;

if (dwRead> 0)

{

Buf = new BYTE[dwRead];

if (!ReadFile(hPort,Buf,dwRead,&dwRead,&OverRead))

{

MessageBox(NULL,"Помилка читання порту","Помилка",MB_ICONERROR);

}

Synchronize(DoRead); deleteBuf; }

}

}//---------------------------------------------------------------------------

void__fastcall TReadThread::DoRead(void)

{

AnsiString STR;

for(int i=0; i<dwRead; ++i)

{

STR=STR+char(Buf[i]);/* IntToStr(short(Buf[i])) + " "; */

}

Form1->Memo1->Lines->Add(STR); deleteBuf;

}

//-----------------------------------------------------------------------------

Вміст файлу: Unit3.h

//---------------------------------------------------------------------------

#ifndef Unit3H

#define Unit3H

//---------------------------------------------------------------------------

#include <Classes.hpp>

//---------------------------------------------------------------------------

classTReadThread : public TThread

{

private:

DWORD dwRead; BYTE *Buf;

void __fastcallDoRead(void);

protected:

void __fastcall Execute();

public:

__fastcallTReadThread(boolCreateSuspended);

};

//---------------------------------------------------------------------------

#endif

Вміст файлу: Project1.cpp

//---------------------------------------------------------------------------

#include<vcl.h>

#pragmahdrstop

//---------------------------------------------------------------------------

USEFORM("Unit1.cpp", Form1);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception&exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throwException("");

}

catch (Exception&exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

//---------------------------------------------------------------------------

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

Михаил Фленов. БиблияDelphi Издательство:БХВ-Петербург, 2005 г., 880 стр.

Михаил Фленов Программирование в Delphi глазами хакера Издательство:БХВ-Петербург, 2003 г., 362 стр.

АрхангельскийА.Я.,ПрограммированиевDelphi7Издательство:Бином-Пресс, 2003 г., 1152 стр.

ПавловскаяТ.А.,ЩупакЮ.А.C++.Объектно-ориентированное программирование.ПРАКТИКУМ.-СПб.:Питер,2004

Чепмен Дэвис.Освой самостоятельно Visual C++.NETза21день.: Пер с англ.- М.:Изд.дом«Вильямс», 2002.- 720 с.

В.Кораблев.СамоучительVISIALC++.NET.-СПб.:Питер,2004.

Х. Дейтел,П.Дейтел.Как программировать на С++.М.:БИНОМ, 2000 г.

Размещено на Allbest.ru

...

Подобные документы

  • Опис інтерфейсу паралельного порту Centronics, який має 25-контактний 2-рядний роз'єм DB-25-female. Швидкість передачі даних, фірмові розширення. Розгляд BIOS для LPT-порту. Опис програмного середовища. Приклад виконання програми, блок-схема алгоритму.

    курсовая работа [1,2 M], добавлен 23.04.2014

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

    курсовая работа [29,9 K], добавлен 07.06.2010

  • Формати прийому та передачі даних через послідовний порт, його технічні характеристики, будова і принцип роботи. Характеристика протоколів послідовної передачі. Способи керування портами у WINDOWS95 та WINDOWS XP. Опис алгоритму і функціонування програми.

    дипломная работа [752,6 K], добавлен 09.06.2010

  • Програма, яка приймає дані з зовнішнього пристрою через паралельний порт і використовується на комп’ютері з паралельним адаптером, операційною системою MS-DOS. Огляд існуючих пристроїв, систем, програмного забезпечення. Реалізація проекту, текст програми.

    курсовая работа [18,0 K], добавлен 08.08.2009

  • Процес послідовної передачі даних, режим її здійснення. Типова схема інтерфейсу. Структурна схема модуля шифрування. Розробка генератора псевдовипадкових чисел на основі регістра зсуву з оберненими зв’язками. Симуляція роботи розробленої моделі пристрою.

    курсовая работа [594,1 K], добавлен 09.04.2013

  • Розробка інтелектуального програмного продукту для рішення завдання оптимізації у заданій предметній області. Алгоритм розрахунку пласкої конічної передачі. Оптимізація параметрів та вибір мови програмування. Приклад розрахунку конічної передачі.

    курсовая работа [1,5 M], добавлен 24.06.2013

  • Функціонально-логічні та технічно-функціональні аспекти програми. Структурна схема приладу. Обмін інформацією між вузлами метеорологічного комплексу. Розробка протоколу передачі даних. Розрахунок антенного модуля для прийомо-передавального пристрою.

    дипломная работа [467,2 K], добавлен 21.06.2009

  • Характеристика ланцюгової передачі, альтернативний спосіб передачі крутного моменту від двигуна до вхідного вала верстата. Розробка програми, написаної в середовищі візуального проектування Delphi 7.0. для розрахунку зубчастої ланцюгової передачі.

    курсовая работа [67,1 K], добавлен 27.03.2011

  • Особливості cтвoрення графічного iнтерфейcу тестової програми, яка рoзрoблена в візуальному cередoвищi програмування Delphi. Пoбудoва iнфoрмацiйнo-математичнoї мoделi задачi. Реалiзацiя прoекту у вiзуальнoму cередoвищi. Iнcтрукцiя з екcплуатацiї прoграми.

    курсовая работа [4,8 M], добавлен 25.09.2010

  • Інтерфейс Centronics як радіальний, асинхронний, паралельний інтерфейс, особливості та сфери його застосування, характеристика та аналоги. Послідовність погодження режиму передачі. Перспективи інтерфейсу IEEE 1284, порівняльні характеристики з USB.

    реферат [575,3 K], добавлен 25.03.2011

  • Призначення менеджеру пристроїв. Обґрунтування вибору мови програмування. Розробка структурної схеми і опис діалогового інтерфейсу програми. Блок-схема програмного додатку, основні функції і алгоритм його роботи. Методики і інструкція його тестування.

    курсовая работа [3,4 M], добавлен 17.11.2014

  • Розробка програми на мові програмування С++ в середовищі Borland C++ Builder, яка надає можливість відкривати певну програму в певний час або через певний час. Проектування блок-схеми та інтерфейсу користувача. Підключення бібліотек, опис змінних.

    дипломная работа [90,0 K], добавлен 21.01.2013

  • Порівняння характеристик топології мережі передачі даних, таких як: діаметр, зв’язність, ширина бінарного поділу та вартість. Загальний опис механізмів передачі даних – алгоритмів маршрутизації, а також методів передачі даних між процесорами мережі.

    курсовая работа [167,3 K], добавлен 20.06.2015

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

    курсовая работа [1,2 M], добавлен 27.08.2014

  • Проектування інтерфейсу програми. Вимоги до продукту. Вхідні дані на розробку автоматизованої системи. Вибір середовища програмування. Розробка структури бази даних. Функціональна та логічна структура програми. Розробка структури таблиць бази даних.

    курсовая работа [43,1 K], добавлен 30.06.2015

  • Побудова логічно-фізичної моделі даних за допомогою CASE-засобу ERWin. Інструкція користувача програми. Форма "Складський ордер", "Автотранспорт", "Оператори". Логічна та фізична модель бази даних. Форма "Меню", "Акт прийому", форми для введення даних.

    курсовая работа [6,6 M], добавлен 14.09.2012

  • Основні операції над стеком. Бінарне дерево пошуку. Абстрактний тип даних "Черга". Динаміка вмісту списку при внесенні до нього елемента. Написання програми синтаксичного аналізу відповідностей відкриваючих і закриваючих дужок в арифметичному виразі.

    курсовая работа [2,9 M], добавлен 14.05.2015

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

    курсовая работа [605,0 K], добавлен 06.05.2015

  • Об’єктно-орієнтований аналіз, визначення класів та методів. Загальна схема функціонування системи. Представлення учбового матеріалу, питань та відповідей. Графічний інтерфейс користувача для роботи з програмою. Використання програми викладачами.

    курсовая работа [1,3 M], добавлен 09.01.2014

  • Загальний алгоритм програми. Алгоритм проходження тесту. Алгоритм загрузки тесту в пам'ять програми. Програма "Тестер" на мові програмування TurboPascal в середовищі Borland Delphi 7. Інтерфейс програми "Тестер". Зовнішній вигляд вікна результату.

    контрольная работа [177,0 K], добавлен 26.02.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.