Печатать книгуПечатать книгу

§ 7. Работа са стандартнымі дыялогамі

Сайт: Профильное обучение
Курс: Інфарматыка. 11 клас (Павышаны ўзровень)
Книга: § 7. Работа са стандартнымі дыялогамі
Напечатано:: Гость
Дата: Понедельник, 6 Май 2024, 03:48

7.1. Стандартныя дыялогі

Практычна любы дадатак Windows выкарыстоўвае стандартныя дыялогі, убудаваныя ў аперацыйную сістэму, для адкрыцця і захавання файлаў, выбару атрыбутаў шрыфту або ўстаноўкі колеру, пошуку тэксту, друку. У бібліятэку VCL уключаны кампаненты, якія рэалізуюць адпаведныя вокны Windows. Яны размешчаны на панэлі Dialogs (прыклад 7.1). У прыкладзе 7.2 прыведзены пералік кампанентаў для рэалізацыі стандартных дыялогаў Windows.

Аб'екты, якія прадстаўлены на старонцы Dialogsнябачныя падчас выканання, таму месца іх размяшчэння на форме не мае значэння (прыклад 7.3). Знешні выгляд акна дыялогу залежыць ад версіі Windows.

Выклік і апрацоўка дыялогаў адбываецца праграмна. Для ўсіх дыялогаў вызначаны метад Execute: Boolean (прыклад 7.4). З дапамогай гэтага метаду адбываецца адкрыццё акна адпаведнага дыялогу. Значэнне true надаецца функцыі Execute у выпадку, калі карыстальнік пстрыкнуў па кнопцы Ok (выканаў двайную пстрычку па назве файла або націснуў клавішу Enter). Ва ўласцівасцях кампанента-дыялогу запамінаецца выбар карыстальніка, які затым можна апрацаваць. Калі ў дыялогу была націснутая кнопка адмена або клавіша Esc, то функцыя атрымае значэнне false

Прыклад 7.1. Панэль Dialogs.

Прыклад 7.2. Спіс некаторых стандартных дыялогаў.

Кампанент

Прызначэнне

Стварэнне акна дыялогу «Адкрыць файл»

Стварэнне акна дыялогу «Захаваць файл»

Стварэнне акна дыялогу «Адкрыць малюнак»

Стварэнне акна дыялогу «Захаваць малюнак»

Стварэнне акна дыялогу «Шрыфт» — выбар атрыбутаў шрыфту

Стварэнне акна дыялогу «Колер» — выбар колеру

Стварэнне акна дыялогу «Друк»

Прыклад 7.3. Дыялогавыя кампаненты і кнопкі для іх выкліку на форме:

Прыклад 7.4. Стандартны зварот да дыялогу:

if (<імя дыялогу> -> Execute)
<каманды, якія выкарыстоўваюць выбар карыстальніка>

7.2. Дыялогі для работы з колерам і шрыфтам

Для выкліку стандартнага акна ўстаноўкі атрыбутаў шрыфту можна выкарыстоўваць кампанент FontDialog (прыклад 7.5). У акне Шрифт карыстальнік можа выбраць імя шрыфту, яго стыль, памер, колер. Асноўная ўласцівасць кампанента — Font тыпу TFont. Метад, які дазволіць прысвоіць значэннi ўсіх выбраных атрыбутаў шрыфту кампанента — метад Assign.

Для выкліку стандартнага акна ўстаноўкі колеру выкарыстоўваецца кампанент ColorDialog (прыклад 7.6). У ім можна выбраць колер з базавай палітры. Асноўная ўласцівасць кампанента ColorDialog — Color. Гэта ўласцівасць адпавядае таму колеру, які карыстальнік абраў у дыялогу. Дадатковыя магчымасці апісаны ў Дадатку.

Прыклад 7.7. Стварыць праект «Фарматаванне надпісу». Для надпісу на форме выбраць атрыбуты тэксту з дапамогай дыялогавага акна Шрифт. Колер фону выбраць з дапамогай дыялогавага акна Цвет.

Этапы выканання задання

  1. Змясціць на форму кампаненты: FontDialog1, ColorDialog1, Label1, Button1, Button2.
  2. Змяніць уласцівасць Caption кампанента Label1 — «Пример работы с диалогами».
  3. Устанавіць значэнне false для ўласцівасці Transparent (празрыстасць) у кампанента Label1.
  4. Змяніць уласцівасць Caption кампанента Button1 на «Смена атрибутов текста».
  5. Змяніць уласцівасць Caption кампанента Button2 на «Смена цвета фона».
  6. Напісаць апрацоўшчык падзеі OnClick для кампанента Button1.
  7. Напісаць апрацоўшчык падзеі OnClick для кампанента Button2.

Прыклад 7.5. Стандартны дыялог для налады шрыфту:

Прыклад 7.6. Стандартны дыялог для выбару колеру:

Прыклад 7.7. Форма на этапе канструявання:

Апрацоўшчык падзеі OnClick для кампанента Button1

void __fastcall TForm1::Button1Click
                TObject *Sender)

{

  if (FontDialog1 -> Execute())

    Label1 -> Font ->

    Assign(FontDialog1 -> Font);

}

Апрацоўшчык падзеі OnClick для кампанента Button2

void __fastcall TForm1::Button2Click
                (TObject *Sender)

{

  if (ColorDialog1 -> Execute())

    Label1 -> Color =

    ColorDialog1 -> Color;

}

7.3. Дыялогі для работы з файламі

Дыялогі для адкрыцця і захавання файлаў (прыклад 7.8) выкарыстоўваюцца ў розных дадатках. Асноўная ўласцівасць кампанентаў OpenDialog і SaveDialog, у якой вяртаецца ў выглядзе радка імя файла,  гэта ўласцівасць FileName. Калі задаць дадзеную ўласцівасць на этапе канструявання ў акне інспектара аб'ектаў, то пры адкрыцці дыялогу яна будзе з'яўляцца ў радку Імя файла.

Прыклад 7.9. Стварыць праект «Числа». Згенерыраваць выпадковыя лікi ў зададзеным дыяпазоне і захаваць іх у файл. Палічыць колькі ў файле лікаў, кратных зададзеным. Вынік вывесці на форме.

Этапы выканання задання

  1. Змясціць на форму кампаненты: OpenDialog1, SaveDialog1, LabeledEdit1, LabeledEdit2, LabeledEdit3, LabeledEdit4, Button1, Button2, Label1.
  2. Змяніць уласцівасць Caption кампанента LabeledEdit1 — «Количество чисел».
  3. Змяніць уласцівасць Caption кампанента LabeledEdit2 — «Начало промежутка».
  4. Змяніць уласцівасць Caption кампанента LabeledEdit3 — «Конец промежутка».
  5. Змяніць уласцівасць Caption кампанента LabeledEdit4 — «Число».
  6. Ачысціць уласцівасць Caption кампанента Label1.
  7. Змяніць уласцівасць Caption кампанента Button1 — «Записать числа в файл».
  8. Змяніць уласцівасць Caption кампанента Button2 — «Искать кратные в файле».
  9. Напісаць апрацоўшчык падзеі OnClick для кампанента Button1.
  10. Напісаць апрацоўшчык падзеі OnClick для кампанента Button2.
  11. Падключыць бібліятэкі:
    #include <fstream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
  12. Дапісаць радок:

using namespace std;

Імя файла, якое прымае дыялог, з'яўляецца радком. У сістэме праграміравання CBuilder падтрымліваецца свой уласны тып радкоў: String. Для сумяшчальнасці гэтага тыпу радкоў з тыпам string неабходна пераўтварэнне, якое можна выканаць, выкарыстоўваючы каманду c_str().

Далей праца з тэкставымі файламі адбываецца гэтак жа, як і ў асяроддзі CodeBlocks.

Разгледзім некаторыя ўласцівасці дыялогаў для працы з файламі.

Тыпы шуканых файлаў, якія з'яўляюцца ў радку Тип файла, задаюцца ўласцівасцю Filter. Дадзеную ўласцівасць можна задаць на этапе праектавання, націснуўшы кнопку каля ўласцівасці Filter у акне інспектара аб'ектаў (прыклад 7.10). Рэдактар фільтраў дазваляе ўстанаўліваць маскі шаблонаў файлаў. У полі Filter Name задаецца той тэкст, які карыстальнік убачыць у радку Тип файла акна дыялогу. У слупку Filter задаецца шаблон (сімвал «*» пазначае любы набор знакаў, сімвал «?» замяняе адзін любы знак).

Уласцівасць DefaultExt вызначае значэнне пашырэння файла, якое задаецца па змоўчанні. Калі значэнне гэтай уласцівасці не зададзена, карыстальнік павінен паказаць у дыялогу поўнае імя файла з пашырэннем. Калі значэнне зададзена, то імя файла можна паказваць без пашырэння (прыклад 7.11).

Уласцівасць FilterIndex вызначае нумар фільтра, які ўбачыць карыстальнік пры адкрыцці акна дыялогу.

Уласцівасць Initialdir кампанентаў OpenDialog і SaveDialog дазваляе наладзіць папку (прыклад 7.12), змесціва якой будзе адкрывацца пры першым выкліку дыялогавага акна. Калі значэнне не ўстаноўлена, то ў першы раз будзе адкрывацца папка Мои документы,  у далейшым — папка, якая выкарыстоўвалася апошняя.

Уласцівасць Title дазваляе задаць загаловак дыялогавага акна.

Прыклад 7.8. Стандартныя дыялогі для адкрыцця і захавання файла:

Прыклад 7.9. Форма на этапе канструявання:

Апрацоўшчык падзеі OnClick для кампанента Button1

void __fastcall TForm1::Button1Click(
TObject *Sender)

{

  srand(time(NULL));

  int n = StrToInt(LabeledEdit1 -> Text);

  int a = StrToInt(LabeledEdit2 -> Text);

  int b = StrToInt(LabeledEdit3 -> Text);

  if (SaveDialog1 -> Execute()) {

  String s = SaveDialog1 -> FileName;

  ofstream fout(s.c_str());

  fout << n << endl;

  for (int i = 0; i < n; i++){

    int x = rand() % (b - a + 1) + a;

    fout << x << endl;

  }

  fout.close();

  }

}

Апрацоўшчык падзеі OnClick для кампанента Button2

void __fastcall TForm1::Button2Click
                TObject *Sender)

{

  int z = StrToInt(LabeledEdit4 -> Text);

  if (OpenDialog1 -> Execute()) {

    String s = OpenDialog1 -> FileName;

    ifstream fin(s.c_str());

    int n, k = 0;

    fin >> n;

    for (int i = 0; i < n; i++){

      int x;

      fin >> x;

      if (x % z == 0)

        k++;

    }

    Label1 -> Caption ="Найдено " +

    IntToStr(k) + чисел";

  }

}

Дадатак у час работы:

Змесціва тэкставага файла:

Прыклад 7.10. Уласцівасць Filter:

Прыклад 7.11. Акно Сохранение

У інспектары аб'ектаў устаноўлены фільтры, якія апісаны ў прыкладзе 7.10. Значэнні ўласцівасцей DefaultExt і FilterIndex:

Прыклад 7.12. Калі неабходна, каб пры захаванні або загрузцы файла адкрывалася бягучая папка (папка, у якой знаходзіцца скампіляваны файл праекта), то ў падзеі FormCreate неабходна прапісаць каманды:

OpenDialog1 -> InitialDir = ExtractFilePath(ParamStr(0));
SaveDialog1 -> InitialDir =
OpenDialog1 -> InitialDir;

Пытанні да параграфа

1. Для чаго прызначаны кампаненты, размешчаныя на панэлі Dialogs?

2. Які метад вызначаны для ўсіх дыялогаў?

3. З дапамогай якога дыялогу можна змяніць уласцівасці шрыфта?

4. З дапамогай якога дыялогу можна змяніць колер?

5. Якая ўласцівасць з'яўляецца асноўнай у дыялогу выбару колеру?

6. Якія дыялогі прызначаныя для працы з файламі?

7. Якая ўласцівасць з'яўляецца асноўнай у дыялогаў працы з файламі?

Практыкаванні

   

1. Стварыце праект «Код цвета». Пры дапамозе стандартнага дыялогу выбіраецца колер панэлі (падзея OnClick для панэлі). Раскладзiце гэты колер на састаўляючыя. Яны будуць адлюстраваны на адпаведных каляровых панэлях. Лікавае значэнне колеру выводзіцца ў дзесятковым і *(або) шаснаццатковым прадстаўленні. Для вылучэння чырвонай, зялёнай ці сіняй састаўляючай колеру можна скарыстацца функцыямі GetRValue (TColor n), GetGValue (TColor n), GetBValue (TColor n) адпаведна. Функцыі вяртаюць лікавае значэнне, якое можа быць выкарыстана ў якасці параметра функцыі RGB.

Прыкладны выгляд формы:

2. Згенерыруйце выпадковыя лікі ў зададзеным дыяпазоне і захавайце іх у файл. Палічыце колькі ў файле простых лікаў. Вынік вывесці на форме. Прыкладны выгляд формы можа быць такім жа, як і ў прыкладзе 7.9.

3. У тэкставым файле запісаны колькасці. Палічыце лікі ў вектар. Адсартуйце іх па ўзрастанні. Вынік запішыце ў іншы тэкставы файл. Выбар файла з данымі і вынікамі рабіце з выкарыстаннем стандартных дыялогаў працы з файламі. Для выкарыстання функцыі sort падключыце бібліятэку algorithm.