Смекни!
smekni.com

Проектування користувальницького інтерфейсу в C++ Builder (стр. 3 из 4)

Edit1->Show();

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

Менеджер проектів

Файли, що утворять додаток – форми та модулі - зібрані в проект. Менеджер проектів показує списки файлів і модулів проекту та дозволяє створювати навігацію між ними. Можна викликати менеджер проектів , вибравши пункт меню View/Project Manager. За замовчуванням знову створений проект одержує ім'я Project1.cpp.

Рис.5. Менеджер проектів

За замовчуванням проект спочатку містить файли для однієї форми та вихідного коду одного модуля. Однак більшість проектів містять кілька форм і модулів. Щоб додати модуль або форму до проекту, потрібно клацнути правою кнопкою миші та вибрати пункт New Form з контекстного меню. Можна також додавати існуючі форми та модулі до проекту, використовуючи кнопку Add контекстного меню менеджера проектів і вибираючи модуль або форму, яку потрібно додати. Форми та модулі можна видалити в будь-який момент протягом розробки проекту. Однак, через те, що форма зв'язані завжди з модулем, не можна видалити одне без видалення іншого, за винятком случаючи, коли модуль не має зв'язку з формою. Видалити модуль із проекту можна, використовуючи кнопку Remove менеджера проектів.

Якщо вибрати кнопку Options у менеджері проектів, відкриється діалогова панель опцій проекту, у якій можна вибрати головну форму проекту, визначити, які форми будуть створюватися динамічно, які параметри компіляції модулів (у тому числі створених в Delphi 2.0, тому що C++ Builder може включати їх у проекти) і компонування.

Рис. 6. Установка опцій проекту

Важливим елементом середовища розробки C++ Builder є контекстне меню, яке з‘являється при натисканні на праву клавішу миші та дозволяє швидкий доступ до найбільше часто використовуваних команд.

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

Практична частина

Середою розробки був вибраний інструментарій C++ Builder. Програма складається з 6 основних модулей лістинг який проводиться нище. Зауважимо лише, що вся текстова інформації системи навчання міститься у відповідних .DOCфайлах, що дозволяє досить просто та оперативно управляти самою програмою.

Лістинг 1. (project.cpp)

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

#include <vcl.h>

#pragma hdrstop

USERES("Project1.res");

USEFORM("Unit1.cpp", Form1);

USEFORM("Unit2.cpp", Form2);

USEFORM("Unit3.cpp", Form3);

USEFORM("Unit4.cpp", Form4);

USEFORM("Unit5.cpp", Form5);

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

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

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

Application->CreateForm(__classid(TForm2), &Form2);

Application->CreateForm(__classid(TForm3), &Form3);

Application->CreateForm(__classid(TForm4), &Form4);

Application->CreateForm(__classid(TForm5), &Form5);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

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

Лістинг 2. (Unit1.cpp)

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

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

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

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm2::Timer1Timer(TObject *Sender)

{

Timer1->Enabled = false;

DrawScene();

Yield();

Timer1->Enabled = true;

}

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

BOOL bSetupPixelFormat(HDC hdc)

{

PIXELFORMATDESCRIPTOR pfd, *ppfd;

int pixelformat;

ppfd = &pfd;

ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);

ppfd->nVersion = 1;

ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |

PFD_DOUBLEBUFFER;

ppfd->dwLayerMask = PFD_MAIN_PLANE;

ppfd->iPixelType = PFD_TYPE_COLORINDEX;

ppfd->cColorBits = 8;

ppfd->cDepthBits = 16;

ppfd->cAccumBits = 0;

ppfd->cStencilBits = 0;

if ( (pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0 )

{

MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);

return FALSE;

}

if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE)

{

MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);

return FALSE;

}

return TRUE;

}

void TForm2::DrawScene()

{

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();

latitude += latinc;

longitude += longinc;

polarView( radius, 0, latitude, longitude );

glIndexi(RED_INDEX);

glCallList(CONE);

glIndexi(BLUE_INDEX);

glCallList(GLOBE);

glIndexi(GREEN_INDEX);

glPushMatrix();

glTranslatef(0.8F, -0.65F, 0.0F);

glRotatef(30.0F, 1.0F, 0.5F, 1.0F);

glCallList(CYLINDER);

glPopMatrix();

glPopMatrix();

SwapBuffers(ghDC);

}

GLvoid TForm2::resize( GLsizei width, GLsizei height )

{

GLfloat aspect;

glViewport( 0, 0, width, height );

aspect = (GLfloat) width / height;

glMatrixMode( GL_PROJECTION );

glLoadIdentity();

gluPerspective( 45.0, aspect, 3.0, 7.0 );

glMatrixMode( GL_MODELVIEW );

}

GLvoid TForm2::createObjects()

{

GLUquadricObj *quadObj;

glNewList(GLOBE, GL_COMPILE);

quadObj = gluNewQuadric ();

gluQuadricDrawStyle (quadObj, GLU_LINE);

gluSphere (quadObj, 1.5, 16, 16);

glEndList();

glNewList(CONE, GL_COMPILE);

quadObj = gluNewQuadric ();

gluQuadricDrawStyle (quadObj, GLU_FILL);

gluQuadricNormals (quadObj, GLU_SMOOTH);

gluCylinder(quadObj, 0.3, 0.0, 0.6, 15, 10);

glEndList();

glNewList(CYLINDER, GL_COMPILE);

glPushMatrix ();

glRotatef ((GLfloat)90.0, (GLfloat)1.0, (GLfloat)0.0, (GLfloat)0.0);

glTranslatef ((GLfloat)0.0, (GLfloat)0.0, (GLfloat)-1.0);

quadObj = gluNewQuadric ();

gluQuadricDrawStyle (quadObj, GLU_FILL);

gluQuadricNormals (quadObj, GLU_SMOOTH);

gluCylinder (quadObj, 0.3, 0.3, 0.6, 12, 2);

glPopMatrix ();

glEndList();

}

GLvoid TForm2::initializeGL(GLsizei width, GLsizei height)

{

GLfloat maxObjectSize, aspect;

GLdouble near_plane;

glClearIndex( (GLfloat)BLACK_INDEX);

glClearDepth( 1.0 );

glEnable(GL_DEPTH_TEST);

glMatrixMode( GL_PROJECTION );

aspect = (GLfloat) width / height;

gluPerspective( 45.0, aspect, 3.0, 7.0 );

glMatrixMode( GL_MODELVIEW );

near_plane = 3.0;

maxObjectSize = 3.0F;

radius = near_plane + maxObjectSize/2.0;

latitude = 0.0F;

longitude = 0.0F;

latinc = 6.0F;

longinc = 2.5F;

createObjects();

}

void TForm2::polarView(GLdouble radius, GLdouble twist, GLdouble latitude,

GLdouble longitude)

{

glTranslated(0.0, 0.0, -radius);

glRotated(-twist, 0.0, 0.0, 1.0);

glRotated(-latitude, 1.0, 0.0, 0.0);

glRotated(longitude, 0.0, 0.0, 1.0);

}

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)

{

/* Timer1->Enabled = false;

*/

if (ghRC)

wglDeleteContext(ghRC);

if (ghDC)

ReleaseDC(Handle, ghDC);

MediaPlayer1->Close();

}

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

void __fastcall TForm2::FormCreate(TObject *Sender)

{

ghDC = GetDC(Handle);

if (!bSetupPixelFormat(ghDC))

Close();

ghRC = wglCreateContext(ghDC);

wglMakeCurrent(ghDC, ghRC);

initializeGL(ClientRect.Right, ClientRect.Bottom);

MediaPlayer1->Open();

MediaPlayer1->Play();

ProgressBar1->Position = 0;

}

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

void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

MediaPlayer1->Close();

Close();

}

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

void __fastcall TForm2::FormResize(TObject *Sender)

{

resize(ClientRect.Right, ClientRect.Bottom);

}

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

void __fastcall TForm2::Timer2Timer(TObject *Sender)

{

ProgressBar1->Position++;

}

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

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

#include <vcl.h>

#pragma hdrstop

#include "Unit3.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

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

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

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

int step=0;

TForm3::nextstep(){

switch(step){

case 0:

deltatime(300);

break;

case 1:

MediaPlayer1->FileName = "data&bsol;765888.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 2:

deltatime(1000);

break;

case 3:

Shape3->Visible=true;

deltatime(300);

break;

case 4:

MediaPlayer1->FileName = "data&bsol;9564334.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 5:

Label1->Visible = false;

Label2->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Label5->Visible = false;

Label6->Visible = false;

Label7->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

Label13->Visible = false;

Shape3->Visible=false;

/* Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

Label15->Visible = false;

Label16->Visible = false;*/

Label10->Visible = true;

Label11->Visible = true;

Label12->Visible = true;

Label14->Visible = true;

deltatime(300);

break;

case 6:

MediaPlayer1->FileName = "data&bsol;533677.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 7:

deltatime(400);

break;

case 8:

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Label5->Visible = true;

Label6->Visible = true;

Label7->Visible = true;

Label8->Visible = true;

Label9->Visible = true;

Label13->Visible = true;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

deltatime(300);

break;

case 9:

Shape2->Visible=true;

deltatime(300);

break;

case 10:

MediaPlayer1->FileName = "data&bsol;822567.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 11:

deltatime(400);

break;

case 12:

Shape2->Visible=false;

deltatime(300);

break;

case 13:

MediaPlayer1->FileName = "data&bsol;6345676.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 14:

deltatime(400);

break;

case 15:

Label1->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Label5->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

Label13->Visible = false;

deltatime(300);

break;

case 16:

MediaPlayer1->FileName = "data&bsol;123423.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 17:

deltatime(300);

break;

case 18:

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Label5->Visible = true;

Label6->Visible = true;

Label7->Visible = true;

Label8->Visible = true;

Label9->Visible = true;

Label13->Visible = true;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

deltatime(300);

break;

case 19:

MediaPlayer1->FileName = "data&bsol;908976.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 20:

deltatime(300);

break;

case 21:

Label2->Visible = false;

Label4->Visible = false;

Label6->Visible = false;

Label7->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

deltatime(300);

break;

case 22:

MediaPlayer1->FileName = "data&bsol;444555.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 23:

deltatime(300);

break;

case 24:

Label1->Visible = true;

Label2->Visible = true;