Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++_навч_пос14_new.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.86 Mб
Скачать

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");//вставити рядок в позицію 1

S->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 на 2

Memo1->Lines=S;//помістити список в Memo1

Memo1->Lines->Assign(S);//або так

Memo1->Lines->Add(S->Strings[3]);//добавити рядок з індексом 3

Memo1->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>

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

#include "Unit2.h"

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

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

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

void __fastcall TThread1::Rand()

{

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

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

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

}

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

void __fastcall TThread1::Execute()

{

do

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

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

}

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

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

  1. Запрограмуйте методи 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();}//продовжити виконання

}

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