Створення смужки прогресу C + + Builder

Коли користувач натискає на першу кнопку (названу Створити нову смугу прогресу), нам хотілося б створити динамічно смугу прогресу на панелі стану Створіть новий обробник для натискання на першу кнопку і додайте в нього наступний код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

FpProgress = new TProgressBar(StatusBar1) FpProgress-&gtParent = StatusBar1 FpProgress-&gtTop = 4

FpProgress-&gtHeight = STatusBar1-&gtHeight — 6 FpProgress-&gtLeft = 2

FpProgress-&gtWidth = 200 FpProgress-&gtEnabled = true

/ / Встановлюємо діапазон смужки прогресу

FpProgress-&gtMin = 0

FpProgress-&gtMax = 100

FpProgress-&gtStep = 1

/ / І робимо доступними дві інших кнопки

Button1-&gtEnabled = false Button2-&gtEnabled = true Button3-&gtEnabled = true

}

Як бачите, код дуже схожий на створення компонента в попередньому прикладі Спочатку створюється компонент, потім встановлюється властивість Parent (батько) Тут ми використовуємо панель стану (а не форму) як батька смужки прогресу Запамятайте, що всі позиційні властивості нового компонента встановлюються щодо батьківського компонента, а не компонента, в якому він створений Хоча форма і відповідає за створення смужки прогресу (тому що створення відбувається в обробнику, що належить формі), але тепер за сам керуючий елемент відповідає панель стану Повертаючись до нашої дискусії про важливі класах, масив Components панелі стану тепер буде містити покажчик на компонент – смужку стану, в той час як масив Components форми утримувати його не буде Він міститиме покажчик на саму панель стану, також як і на три кнопки на формі

Ми маємо в своєму розпорядженні смужку прогресу на панелі стану, використовуючи для установки властивостей Height (висота) і Top (верх) смужки прогресу координати панелі стану Ймовірно, вам варто трохи пограти з цим, щоб домогтися розташування, яке вам більше подобається Індивідуальні смаки різняться, і не існує загальних рецептів на цей випадок

Як тільки ми розташували смужку прогресу, ми встановлюємо деякі його важливі властивості У нашому випадку вам потрібно встановити три важливих властивості Min (мінімум) – найменше можливе значення лічильника прогресу Max (максимум), не дивно, є найбільше можливе значення лічильника прогресу Step (крок) – це значення, на яке буде збільшуватися лічильник при кожному кроці Смужка прогресу буде відображати значення від 0 до 100 (відсотків), яке займає лічильник в діапазоні Min-Max

Подбавши про смужці прогресу, ми управляємо доступністю кнопок залежно від їх поточного стану Не варто створювати другий керуючий елемент – смужку прогресу – в тому ж місці, що і перший, так що робимо кнопку Створити недоступною Тепер лічильник смужки можна змінювати, а саму смужку прогресу видаляти, так що ми робимо доступними другу і третю кнопки

Насамперед ми додамо в код можливість збільшувати лічильник прогресу Це емуляція ситуації, коли ви в своїй програмі збільшуєте його паралельно з основним завданням (збереження, завантаження файлів) Створіть обробник для натискання на кнопку Button2 (Збільшення лічильника прогресу) на формі Додайте в обробник наступний код:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if ( FpProgress )

FpProgress-&gtStepIt()

}

Цей обробник перевіряє, чи існує компонент – смужка прогресу (перевірка розумності дії) і, якщо він існує, викликає його метод StepIt

Метод StepIt збільшить лічильник прогресу на величину, зазначену у властивості Step Для перевірки додайте цей код, скомпілюйте і запустіть додаток Натисніть на кнопку створення, щоб створити нову смугу прогресу на панелі стану Ви побачите цей керуючий елемент в лівій частині панелі стану Натисніть кілька разів на кнопку збільшення лічильника, і ви побачите небудь, схоже на рис 46

Рис 46 «Динамічні компоненти 2» із збільшеним лічильником прогресу

Останній крок – видалити смужку прогресу з панелі стану Це емулює ваші дії, коли основна операція завершена Зауважте, що як тільки смужка прогресу видалена, процес можна повторити цілком по новій

Додайте наступний код в обробник натискання на третю кнопку (Видалити смугу прогресу): void __ fastcall TForm1 :: Button3Click (TObject * Sender)

{

/ / Видалити смужку прогресу, якщо вона є

if ( FpProgress ) delete FpProgress FpProgress = NULL

/ / Зробити соотв кнопки недоступними

Button2-&gtEnabled = false Button3-&gtEnabled = false

/ / Дозволити створювати нову смужку

Button1-&gtEnabled = true

}

Як бачите, видалення керуючого елемента з форми – це просто видалення покажчика на обєкт VCL Як тільки ми видалили обєкт, ми встановлюємо покажчик в NULL, щоб бути впевненими, що про цей покажчик буде точно відомо, що він порожній Це гарна звичка, її варто дотримуватися у ваших програмах на C + + Завжди ставте покажчик в NULL, як тільки ви закінчили з ним працювати

Коли обєкт віддалений, ми знову ставимо доступною першу кнопку, щоб можна було створити новий обєкт, і ставимо кнопки 2 і 3 недоступними, так як в даний момент обєкта – смужки прогресу не існує

Є один останній крок Форма буде чудово працювати і не буде виникати ніяких проблем Однак якщо користувач закриє форму, не видаливши смужку прогресу, то частина памяті в системі буде втрачена Щоб цього уникнути, ми додаємо деструктор класу форми Додайте наступне оголошення в заголовний файл:

private:  // User declarations TProgressBar *FpProgress

public: // User declarations

__fastcall TForm1(TComponent *Owner)

__fastcall ~TForm1(void)

}

А потім додайте код деструктора в вихідний файл (Unit1cpp):

__fastcall  TForm1::~TForm1(void)

{

if ( FpProgress ) delete FpProgress

}

Зауважте: ми знову перевіряємо, що вказівник не NULL Спроба видалити покажчик, рівний

NULL, може призвести до збою програми

Ось і все про динамічне створення компонентів у CBuilder Ви тепер знаєте, як створювати керуючий елемент динамічно (не забуваючи вказати, хто його батько), як встановлювати властивості керуючого елемента, а також як реагувати на події в динамічно створеному компоненті Ви також побачили, як створити популярну смужку прогресу в панелі стану і як змусити її відображати стан прогресу

Далі ми розглянемо, як перевіряти правильність введення в керуючих елементах в CBuilder

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*