Приклади використання компонентів VCL 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Приклади використання компонентів VCL



4.1 Поради для вивчення компонентів:

1 Переглядайте вміст Object Inspector.2 Користуйтесь довідкою F1.3 Користуйтесь підказкою коду Ctrl+Space.4 Користуйтесь довідковою літературою і прикладами.5 Перед копіюванням прикладів в код програми розмістіть на формі усі необхідні компоненти (наприклад, Label1, Label2, Button1 і т.д.) та створіть усі необхідні функції-обробники подій (наприклад, TForm1::Button1Click, TForm1::FormCreate і т.д.), які використовуються в прикладі.

4.2 Простий проект типу Win32 Application у C++ Builder

Постановка задачі: створити додаток Win32 у C++ Builder, вікно якого містить кнопку і поле вводу. При натиску на кнопці в полі повинен з’явитись текст "Hello World!"

Послідовність виконання:

1 Створіть проект, якщо він не створений (File|New| Application)

2 Добавте на Form1 компоненти Edit і Button з панелі компонентів

3 Двічі клацніть на кнопці Button1 і у функцію TForm1::Button1Click вставте код:

Edit1->Text="Hello World!";

4 В конструктор форми TForm1::TForm1 вставте код:

Caption="First program";

Button1->Caption="Click Me!";

5 Відкомпілюйте проект (Run|Run)

6 Збережіть проект (File|Save Project As...).

7 Закрийте проект (File|Close All)

 

Код програми

//файл Unit1.h з описом класу форми#ifndef Unit1H//директива умовної компіляції "якщо не визначено"#define Unit1H//директива визначення макросу//директиви підстановки файлів#include <Classes.hpp>//бібліотека службових класів#include <Controls.hpp>//бібліотека класів компонентів#include <StdCtrls.hpp>//бібліотека класів стандартних компонентів#include <Forms.hpp>//бібліотека класів форм//клас форми TForm1, який успадкований від TFormclass TForm1: public TForm{__published://компоненти, які обслуговуються IDE TButton *Button1;//компонент VCL кнопка класу TButton TEdit *Edit1;//компонент VCL поле вводу класу TEdit //метод обробки події OnClick void __fastcall Button1Click(TObject *Sender);private: //закриті члени класуpublic: //відкриті члени класу __fastcall TForm1(TComponent* Owner);//конструктор};//специфікатор вказує, що Form1 визначена в окремому файліextern PACKAGE TForm1 *Form1;#endif//кінець директиви умовної компіляції //файл Unit1.cpp з визначенням методів форми#include <vcl.h>//бібліотека VCL//директива закінчує список заголовочних файлів,//придатних для попередньої компіляції#pragma hdrstop#include "Unit1.h"//під’єднати файл Unit1.h//вказує, що упаковані модулі ініціалізовані//в порядку, визначеному їх залежностями#pragma package(smart_init)//помічає файли *.dfm як модулі форми#pragma resource "*.dfm"TForm1 *Form1;//створити об’єкт форми класу TForm1//визначення конструктора форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){//присвоїти властивості форми Form1 рядок//властивість Caption відповідає надпису на компонентіCaption="First program";//присвоїти властивості кнопки Button1 рядокButton1->Caption="Click Me!";}//визначення методу обробника події OnClickvoid __fastcall TForm1::Button1Click(TObject *Sender){//присвоїти властивості поля вводу Edit1 рядок//властивість Text відповідає тексту на компонентіEdit1->Text="Hello World!";} //файл Project1.cpp з головною функцією WinMain#include <vcl.h>#pragma hdrstop//використовувати файл форми Unit1.cppUSEFORM("Unit1.cpp", Form1);//головна функціяWINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){try//блок обробки виключних ситуацій{//Application - об’єкт, який описує додатокApplication->Initialize();//ініціалізувати//створити форму Form1Application->CreateForm(__classid(TForm1), &Form1);Application->Run();//виконати}//перехоплення виключної ситуації Exceptioncatch (Exception &exception){Application->ShowException(&exception);}//показати помилку//перехоплення інших виключних ситуаційcatch (...){ try {throw Exception("");}//генерувати виключну ситуацію //перехоплення виключної ситуації Exception catch (Exception &exception) {Application->ShowException(&exception);}//показати помилку}return 0;}

Класи

AnsiString (String) – тип рядків String s; //або тип AnsiString – створити рядок ss="Hello"; //оператор присвоєнняString s2(s); //створити рядок s2 і викликати конструктор з параметром ss=s+" User"; //оператор конкатенаціїs+="!"; //оператор присвоєння (додати до рядка "!")bool cmp=s>s2; //оператор порівнянняs[6]='_'; //оператор []char *c; //вказівник на масив символівc=s.c_str(); //присвоїти c вказівник на масив символів рядка sApplication->MessageBoxA(c,"",0); //вивести повідомленняs=AnsiString(c); //присвоїти s рядок з масиву символів c int i=s.Pos("User"); //позиція входження рядка "User" в ss.Delete(7,4); //видалити 4 символи починаючи з позиції 7s.Insert("User",7); //вставити рядок "User" в позицію 7int l=s.Length(); //довжина рядкаs2=s.SubString(7,4); //підрядок з позиції 7 довжиною 4 символиbool d=s.IsDelimiter("_,.",6); //true, якщо символ 6 належить до розділювачів з рядка "_,."s=s.LowerCase(); //перетворює рядок до нижнього регіструdouble x=12.356; //змінна дійсного типуint y=12; //змінна цілого типуs=FloatToStr(x); //перетворити дійсне число в рядокx=s.ToDouble(); //перетворити рядок в дійсне числоs=IntToStr(y); //перетворити ціле число в рядокy=s.ToInt(); //перетворити рядок в ціле числоTVarRec args[4] = {" x=",x,"; y=",y}; //масив аргументівs=Format("%s%8.3f%s%d", args, 3); //присвоїти форматований рядокs.printf("x=%f",x); //установити значення форматованого рядкаs=s.Trim(); //видалити пробіли на початку і в кінціEdit1->Text=s; //присвоїти властивості Text поля Edit1 TApplication - додаток(див. також TApplicationEvents) 1.Змініть модуль Project1.cpp так:USEFORM("Unit1.cpp", Form1);//точка входу в додаток WindowsWINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){try //перехоплювати виключення{Application->Initialize(); //ініціалізуватиApplication->CreateForm(__classid(TForm1), &Form1); //створити формуApplication->Title=Application->ExeName; //змінити підпис на ім’я exe-файлуApplication->MainForm->Caption="1"; //надпис головної формиApplication->Icon->LoadFromFile("C:/Program Files/Borland/CBuilder6/Examples/Icons/internet.ico"); //іконкаApplication->ShowMainForm=false; //не показувати головну формуApplication->Run(); //виконати додаток}catch (Exception &exception) //при перехопленні виключення{Application->ShowException(&exception);} //показати виключенняreturn 0;}2.Змініть модуль Unit1.cpp так://конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)//зареєструвати гарячу клавішу Ctrl+Alt+A{RegisterHotKey(Handle,25,MOD_ALT|MOD_CONTROL,int('A'));}//при натиску кнопки Button1 void __fastcall TForm1::Button1Click(TObject *Sender){Application->Minimize(); //звернути додатокSleep(2000); //зупинити виконання на 2 секундиApplication->Restore(); //відновити додатокForm1->Refresh(); //обновити формуApplication->MessageBoxA("Terminate!","!",0); //вивести повідомленняApplication->Terminate(); //знищити додаток}//при перехопленні повідомлення WM_HOTKEY//цей метод створюється за допомогою інструмента Add Method//з вказівкою Message Handler - WM_HOTKEYvoid __fastcall TForm1::WMHotKey(TWMHotKey& key){//якщо id гарячої клавіші=25if (key.HotKey=25){Form1->Show(); //показати формуApplication->Restore(); //відновити додатокApplication->BringToFront(); //помістити на передній план}}//при знищенні формиvoid __fastcall TForm1::FormDestroy(TObject *Sender){UnregisterHotKey(Handle,25);} //відмінити реєстрацію гарячої клавіші//при мінімізації (звертанні) додаткуvoid __fastcall TForm1::ApplicationEvents1Minimize(TObject *Sender){Form1->Hide(); //сховати формуstatic int i=0;//відрахувати 10 секунд зі звуковим сигналомfor (i=1;i<=10;i++) {Beep();Sleep(1000);}} TScreen – стан екрану Height=Screen->Height;//висота форми=висоті екрану у пікселяхMemo1->Lines->Add(Height);Width=Screen->Width;//ширина форми=ширині екрану у пікселяхMemo1->Lines->Add(Width);//абоScreen->Forms[0]->Height=Screen->Height;//абоScreen->ActiveForm->Height=Screen->Height;Memo1->Lines->Add(Screen->Fonts->Strings[0]);//перший екранний шрифтScreen->Cursor=crCross;//змінює курсорMemo1->Lines->Add(Screen->ActiveControl->Name);//активний елемент керуванняMemo1->Lines->Add(Screen->DesktopHeight);//висота робочого столуMemo1->Lines->Add(Screen->WorkAreaHeight);//висота робочої зони Set – шаблон класу множина Set <int, 1, 10> S,S2;//множина S і S2 цілих від 1 до 10S<<1<<2;//добавити в множину S 1,2S2<<1<<2<<3<<4;//добавити в множину S2 1,2,3,4S=S+S2;//множина S містить 1,2,3,4S>>4;//видалити з множини 4Caption="";for (int i=1;i<=10;i++)//якщо множина S мітить i то вивести йогоif (S.Contains(i)) Caption=Caption+i;S.Clear();//очистити множину TList – список вказівників, TObject – базовий клас VCL TList *List = new TList;//списокTClass C=Button1->ClassType();//тип об’єкту Button1//в циклі від першого по останній компонент формиfor (int i=0;i<ComponentCount;i++){List->Add((TObject *)Components[i]);//добавити у список компонентTObject *obj=(TObject *)List->Items[i];//створити об’єкт obj з елементу спискуMemo1->Lines->Add(obj->ClassName());//вивести ім’я класу//або так://TClass C2=obj->ClassType();//Memo1->Lines->Add(C2->ClassName());//якщо клас об’єкту obj успадкований від базового класу класу TButtonif (obj->InheritsFrom(C->ClassParent()))//вивести ім’я базового класу об’єкту objMemo1->Lines->Add(obj->ClassParent()->ClassName());} TComponent – базовий клас компонентів, TControl – базовий клас візуальних компонентів //створити компонент Btn, власник - форма Form1TButton *Btn=new TButton(Form1);Btn->Parent=Panel1;//батько - Panel1//видалити компонент зі списку володіння (Components) Form1Form1->RemoveComponent(Btn);Panel1->InsertComponent(Btn);//добавити у список володіння Panel1//в циклі від першого по останній компонент формиfor (int i=0;i<ComponentCount;i++){Memo1->Lines->Add(Form1->Components[i]->ComponentIndex);//індекс компонентуMemo1->Lines->Add(Form1->Components[i]->Name);//ім’я компоненту//визначення стилю компонента csInheritableif (Form1->Components[i]->ComponentStyle.Contains(csInheritable))Memo1->Lines->Add("csInheritable");Memo1->Lines->Add(Form1->Components[i]->Owner->Name);//ім’я власника//якщо компонент має батькаif (Form1->Components[i]->HasParent())Memo1->Lines->Add("HasParent");//вивести "HasParent"TControl *C;//вказівник на елемент керування//якщо можливе приведення компоненту до типу TControl//(якщо компонент є елементом керування)if (C=dynamic_cast<TControl *>(Components[i])){C->Top=0;//змінити розташуванняMemo1->Lines->Add(C->Parent->Name); //вивести ім’я батькаC->Hide();//зробити невидимим//якщо невидимий то відобразитиif (C->Visible==false) C->Show();C->Enabled=false;//зробити недоступним}} TWinControl – базовий клас віконних компонентів, TGraphicControl – базовий клас графічних компонентів for (int i=0;i<ComponentCount;i++){TWinControl *C;//вказівник на віконний елемент керування//якщо можливе приведення компоненту до типу TWinControl//(якщо компонент є віконним елементом керування)if (C=dynamic_cast<TWinControl *>(Components[i])){Memo1->Lines->Add(C->Name+"(WinControl)");//вивести ім’яbool cf=C->CanFocus();//чи може елемент прийняти фокус вводуbool f=C->Focused();//чи елемент у фокусі вводуC->SetFocus();//установити фокус вводуC->TabStop=true;//дозволяє клавішу табуляції для перебору елементівC->ScaleBy(1,2);//зменшити у 2 разиvoid *p=C->Handle;//віконний дескриптор елементу}TGraphicControl *C2;//вказівник на графічний елемент керування//якщо можливе приведення компоненту до типу TGraphicControl//(якщо компонент є графічним елементом керування)if (C2=dynamic_cast<TGraphicControl *>(Components[i]))Memo1->Lines->Add(C2->Name+"(GraphicControl)");//вивести ім’я} TStrings – базовий клас списку рядків, TStringList – список рядків TStringList *S=new TStringList;//створити список рядківS->Add("String3");//добавити в список рядокS->Insert(1,"String2");//вставити рядок в позицію 1S->Append("String1");//добавити рядок в кінецьS->Sort();//сортувати списокS->AddStrings(S);//добавити копію себеint i;S->Find("String2",i);//знайти індекс рядкаS->Delete(i);//видалити рядок з індексом іS->Delete(S->IndexOf("String3"));//видалити рядокS->Move(1,2);//змінює позицію рядка 1 на 2Memo1->Lines=S;//помістити список в Memo1Memo1->Lines->Assign(S);//або такMemo1->Lines->Add(S->Strings[3]);//добавити рядок з індексом 3Memo1->Lines->Add(S->Text);//добавити весь текст спискуS->SaveToFile("file.txt");//зберегти у файлdelete S;//знищити S TStream – базовий клас потокових об’єктів, TMemoryStream – потік в динамічній пам’яті TMemoryStream* pms = new TMemoryStream();//потік динамічної пямятіTStringList *S=new TStringList;//список рядківchar Buffer[10];//буферmemset(Buffer, 0, 10);//установити буферS->DelimitedText="1,2,3,4,5";//заповнити список рядківS->SaveToStream(pms);//записати список в потікpms->Position = 0;//установити позицію на початокpms->Read(Buffer, 4);//прочитати 4 байти з потоку в буферpms->Position = 0;pms->Write(Buffer, strlen(Buffer) + 1);//записати буфер в потікpms->Position = 0;Memo1->Lines->LoadFromStream(pms);//завантажити рядки з потокуMemo1->Lines->Add(AnsiString(Buffer));//додати вміст буферуdelete pms,S;

TThread – потік керування

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

Послідовність виконання:

1 Створіть проект (File|New| Application)

2 Добавте на форму три компонента Button

3 Створіть новий клас потоку (File|New|Other...|Thread Object)

4 Назвіть клас TThread1

5 Добавте в файл Unit2.cpp директиви

#include "Unit1.h"

#include <stdlib.h>

6 Добавте в файл Unit1.cpp директиву

#include "Unit2.h"

7 Виберіть в Class Explorer клас TThread1 і в контекстному меню виберіть New Method...

8 Вкажіть ім’я методу: Rand, тип результату: void, доступ: Private, директиви: __fastcall

9 Запрограмуйте метод Rand():

void __fastcall TThread1::Rand()

{

//Змінити випадковому пікселю на канві колір на чорний

Form1->Canvas->Pixels[rand()%1000][rand()%1000] =clBlack;

Sleep(1);//Зупинити потік на 1мс

}

10 Запрограмуйте метод Execute ():

void __fastcall TThread1::Execute()

{

do

Synchronize(Rand);//виконати метод Rand синхронізовано

while(!Terminated);//поки потік не знищений

}

11 Вставте в Unit1.cpp код:

TThread1 *Thread1;//оголосити вказівник на потоковий об'єкт

12 Запрограмуйте методи TForm1::Button1Click, TForm1::Button2Click, TForm1::Button3Click:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Thread1=new TThread1(false);//динамічно створити і виконати потік

Thread1->Priority=tpIdle;//встановити пріоритет на найнижчий

Thread1->FreeOnTerminate=true;//знищити об’єкт при завершенні

}

//натиснута кнопка 2

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Thread1->Terminate();//завершити роботу потоку

}

//натиснута кнопка 3

void __fastcall TForm1::Button3Click(TObject *Sender)

{

if (!Thread1->Suspended)//якщо потік не призупинено

{Thread1->Suspend();}//зупинити виконання

else

{Thread1->Resume();}//продовжити виконання

}

13 Запустіть програму: Run.

 

TForm - форма

Створення модальних форм

Постановка задачі: створити додаток, в якому використовуються модальні форми, створити і використати модальні форми, які розміщені у dll.

Послідовність виконання:

1 Створюємо додаток: File/New/Application

2 Добавте кнопку на форму Form1.

3 Добавляємо нову форму: File/New/Form

4 Добавте кнопку на форму Form2.

5 У файл Unit1.cpp дописуємо код:

#include "Unit2.cpp"

6 У конструктор форми TForm1::TForm1 вставте:

Form2=new TForm2(Application);

7 У реалізацію методу TForm1::Button1Click вставте:

Form2->ShowModal();

8 У реалізацію методу TForm2::Button1Click вставте:

Form2->Close();

9 Зберігаємо усе: File/Save All

10 Компілюємо: Run.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 213; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.186.92 (0.04 с.)