Урок 14 - Знакомство с компонентами (часть 5/12)

  В этом уроке мы переходим на вкладку Win32! Первый компонент, который мы будем рассматривать на этой вкладке называется ImageList или как говорят в народе "хранилище картинок".
Кидаем данный компонент на форму и щелкаем по нему 2 раза. Нам открывается окно редактора картинок. Здесь жмем на кнопку "Add..." и выбираем понравившуюся картинку.
Я выбрал две картинки из папки, которая устанавливается вместе с Delphi и находится вот по такому адресу:
C:\Program Files (x86)\Common Files\Borland Shared\Images\Buttons. И так, выбираем картинки и нажимаем кнопку "Открыть". Далее появится окно, в котором Delphi спросит: "Разделить ли картинку на 2 части, то есть на левую половинку и правую)". Нажимаем кнопку "Yes" (или кнопку "Yes to All", если вы как и я выбрали две картинки).

Окно с вопросом


Если все сделано правильно, то картинки отобразятся в редакторе картинок.

Редактор картинок


Заметьте, что каждая картинка получила свой индекс, он отображается снизу картинки. Теперь удалим "бледные" картинки (на скриншоте под индексами 1 и 3), выделив их и нажав кнопку "Delete". Что они, мешать нам будут? :)

Редактор картинок


Закрываем редактор картинок, нажимая на кнопку "OK", чтобы все изменения сохранились.

Далее выделяем на форме знакомый нам компонент MainMenu. У него есть свойство Images, в котором нужно выбрать наш ImageList из выпадающего списка.

Images


Теперь кликнем два раза по компоненту MainMenu. Откроется окно редактирования меню, в котором выбираем пункт "Файл -> Посчитать".

Файл -> Посчитать


В инспекторе объектов ищем свойство ImageIndex.

ImageIndex


ImageIndex это индекс картинки в нашем "хранилище" (ImageList), по умолчанию оно имеет значение "-1", то есть картинка не выбрана. выбираем любую картинку из "хранилища", изменяя индекс например на "0" (ноль), а пункту "Файл -> Выход" поменяем индекс на "1" (единица). Всё готово, закрываем редактор и компилируем программу. Наблюдаем результат.

Результат


По-моему, всё так, как мы и хотели! Кстати, проделать ту же работу можно и с компонентом PopupMenu.

Переходим к изучению следующего компонента, который откликается на имя PageControl. Он позволяет создавать вкладки, на подобие тех, в которых расположены компоненты в Delphi.

Поместим компонент PageControl на форму, кликнем по нему правой кнопкой мыши и выберем пункт "New Page", чтобы создать новую вкладку. Таким же образом создайте еще три вкладки, чтобы в итоге у вас получилось четыре вкладки.

Сразу объясню один момент, чтобы не было ошибок и недопонимания. Компонент PageControl имеет два выделения: Выделение всего компонента и выделение отдельной вкладки. Если вы выделили весь компонент, то черные квадратики, обозначающие выделение будут располагаться над выбором вкладок. Если же вы выделили отдельную вкладку, то черные квадратики будут находиться под выбором вкладок.
Не знаю поняли вы меня или нет, поэтому покажу на скриншоте.

Выделение всего компонента


Выделение отдельной вкладки


И так, выделите первую вкладку. В инспекторе объектов измените свойство Caption на "Калькулятор". Теперь это же свойство, только у второй вкладки заменяем на "История". Свойство Caption третей вкладки заменяем на "Диаграмма". Про название четвертой вкладки мы поговорим позже.
У компонента PageControl есть еще такое интересное свойство MultiLine. Если оно принимает значение True, то вкладки, при недостаточном месте, располагаются в несколько строк.
Свойство TabPosition определяет позицию отображения вкладок.
Кстати, компонент PageControl тоже имеет свойство Images, в котором вы можете выбрать наше "хранилище картинок" и назначить вкладкам определенные картинки по индексу. Ну вот и всё, компонент готов!

Приступим к использованию этого компонента по назначению, а именно к экономию места в программе.
Если сейчас попробовать перетащить Edit1 на первую вкладку компонента PageControl, то наш Edit1 будет находиться как бы под компонентом PageControl. Что бы перенести компоненты, которые находились на форме раньше чем PageControl, нужно выделить эти компоненты, вырезать их и вставить в PageControl. И так, выделяем мышкой:
  • Label1
  • Edit1
  • Edit2
  • RadioButton1
  • RadioButton2
  • RadioButton3
  • RadioButton4
  • Button1
  • Button2
  • ComboBox1
Нажимаем правой кнопкой мыши по одному из выделенных компонентов и выбираем пункт меню "Edit -> Cut" (вырезать).
Теперь выделяем вкладку "Калькулятор" и вставляем в нее вырезанные компоненты, выбирая в пункте меню "Edit -> Paste" (вставить).
То же самое проделайте с остальными вкладками, вставляя в них нужные компоненты. У меня получилась вот так.

Калькулятор


История


Диаграмма


Сейчас я предлагаю скомпилировать программу и потестировать наш новый интерфейс! Если всё отлично и результат вас устраивает, то переходим к изучению следующего и последнего на этот урок компонента RichEdit.

RichEdit по сути то же самое, что и Memo, но с более расширенными возможностями. Например форматирование отдельных абзацев текста и поддержка формата ".rtf".
Разместим RichEdit в четвертой вкладке компонента PageControl, а вкладку переименуем в "RichEdit". Еще нам потребуется парочка кнопок, поэтому кинем их туда же, куда и RichEdit.

Переходим из визуальной части программы во внутреннюю и начинаем печатать код.
Создаем обработчик события Button3Click и пишем код:
procedure TForm1.Button3Click(Sender: TObject);
begin
RichEdit1.Lines.Add('Добавленная строка');
end;
Компонент RichEdit имеет свойство Lines, точно такое же как и в Memo. Этот код, как вы уже наверно догадались, добавляет в самый конец новую строку в RichEdit.
Теперь изменим код в обработчике на следующий:
procedure TForm1.Button3Click(Sender: TObject);
begin
RichEdit1.Text:='Новый текст';
end;
Этот код не добавляет новую строку, как предыдущий, а заменяет весь текст в RichEdit на присваевымый.
Кстати, этим способом тоже возможно добавить новую строку:
procedure TForm1.Button3Click(Sender: TObject);
begin
RichEdit1.Text:='Новый текст'+#13#10+'Новая строка';
end;
Сначала мы присваиваем новый текст в RichEdit, потом прибавляем комбинацию "#13#10" и потом еще прибавляем текст новой строки.

Копипаст для ознакомления:
Тип данных string представляет собой совокупность одного или нескольких символов, каждый из которых записывается в виде символа "#" и числа от 0 до 255 (в десятичной или шестнадцатеричной форме) - каждая такая комбинация обозначает соответствующий ASCII-символ.
Комбинация "#13#10" - это комбинация возврата каретки и символа новой строки.
"#13" - это ASCII-эквивалент значения CR (carriage return - возврат каретки);
"#10" представляет собой LF (line feed - признак новой строки).

Как я говорил раньше, RichEdit позволяет форматировать текст, давайте это сейчас и сделаем:
procedure TForm1.Button3Click(Sender: TObject);
begin
RichEdit1.Paragraph.Numbering:=nsBullet;
end;
Если сейчас скомпилировать программу, то строка, на которой стоит каретка будет отображаться в маркированном списке.
Так же можно выровнять наш текст, по левому краю, по центру или по правому.
Выравнивание по центру:
procedure TForm1.Button3Click(Sender: TObject);
begin
RichEdit1.Paragraph.Alignment:=taCenter;
end;
Таким же образом можно изменять и выделенный текст. Перейдем в обработчик события четвертой кнопки Button4Click и напишем код:
procedure TForm1.Button4Click(Sender: TObject);
begin
RichEdit1.SelAttributes.Color:=clRed;
end;
Запускаем программу, выделяем какой-нибудь текст и нажимаем на четвертую кнопку. Текст окрашивается в красный цвет. Вместо clRed можно написать любые другие цвета, например clGreen, clBlue, clYellow и так далее...
Тут же можно изменить стиль текста:
procedure TForm1.Button4Click(Sender: TObject);
begin
RichEdit1.SelAttributes.Color:=clRed; // Окрашивание
RichEdit1.SelAttributes.Style:=[fsbold]; // Жирный стиль текста
end;
Вот таким образом происходит форматирование текста в компоненте RichEdit.

Как я говорил раньше, компонент RichEdit умеет работать с форматом ".rtf". Давайте научимся сохранять текст в этом формате и загружать его обратно в RichEdit.
Добавим для удобства еще две кнопки на четвертую вкладку компонента PageControl и назовем их "Сохранить" и вторую кнопку "Загрузить".

В обработчике события для кнопки "Сохранить" пишем код:
procedure TForm1.Button5Click(Sender: TObject);
begin
RichEdit1.Lines.SaveToFile('MyFile.rtf'); // Save = Сохранить
end;
А для кнопки "Загрузить" следующий код:
procedure TForm1.Button6Click(Sender: TObject);
begin
RichEdit1.Lines.LoadFromFile('MyFile.rtf'); // Load = Загрузить
end;
В одинарных кавычках указываем путь, куда сохраняем файл и откуда загружаем файл. Файл сохранится в папку, где находится сама программа, то есть сам ".exe" файл.
Теперь вы можете открыть сохраненный файл "MyFile.rtf" например в программе Microsoft Office Word.
Сейчас измените текст в RichEdit и загрузите сохраненный файл.

В следующем уроке мы продолжим изучение компонентов с вкладки Win32.

Ну вот и всё! Удачи!
Встретимся в следующем уроке!




Добавил(а): SyGaK Дата: 2012-12-22
Ура! Спасибо! Супер!



Добавил(а): Mikhail Дата: 2013-03-19
Круто . Когда следующий урок



Добавил(а): Nester_Novopolotsk Дата: 2016-03-12
спасибо за урок. все получилось, но где теперь найти место в голове, чтобы это все запомнить=)



Добавил(а): pronin106 Дата: 2017-05-24
Спасибо за урок. Было бы круто, если бы открывалось окно с выбором файла


  1. RqeTR
    RqeTR 3 months ago
    Medicament information for patients. Short-Term Effects. <a href="https://viagra4u.top">can you get cheap viagra pill</a> in Canada. Everything information about pills. Read here.
    [url=http://www.cheatsguru.com/gamecube/paper_mario_the_thousand_year_door/questions/280849/#answer3467792]Some news about medicines.[/url] [url=https://www.bestattung-glueck.at/sterbefall.php?id=13&amp;art=sterne&amp;timestamp=1580252400]Actual trends of medicines.[/url] [url=https://gratefulbadass.com/index.php/2020/11/20/gb111-election-2020-discussion-w-rev-dr-cynthia-hale/]Some news about medicine.[/url] 0550b19
  2. Wtep
    Wtep 26 days ago
    Я ща умру от смеха

    ------
    [url=https://novikon.ua/service/]замена ремонт пластиковых окон[/url]


    Я извиняюсь, но, по-моему, Вы не правы. Могу это доказать. Пишите мне в PM, пообщаемся.

    ------
    [url=https://www.plit24.ru/cat/plitka-dlya-kuxni]плитка для кухни на фартук[/url]


    В этом что-то есть. Спасибо за помощь в этом вопросе.

    ------
    [url=https://bboom.pro/service/sozdanie-sajtov/]Создать сайт[/url]


    Восхитительно

    ------
    [url=https://www.antiban.pro/ru/]разблокировать приватный instagram[/url]


    Бесподобный топик, мне очень интересно ))))

    ------
    [url=https://cityrider.biz/]купить электросамокат адреса магазинов[/url]


    Какие нужные слова... супер, отличная идея

    ------
    [url=https://muzish.net/8662-Luchik-devochka-zmeya]https://muzish.net/8662-Luchik-devochka-zmeya[/url]


    Конечно. Это было и со мной. Давайте обсудим этот вопрос.

    ------
    [url=https://muzod.net/8535-dvoetochie-krasnyj.html]https://muzod.net/8535-dvoetochie-krasnyj.html[/url]


    Браво, эта блестящая мысль придется как раз кстати

    ------
    [url=https://remuz.net/7058-mordor-arktika.html]https://remuz.net/7058-mordor-arktika.html[/url]


    Как раз то, что нужно. Интересная тема, буду участвовать. Я знаю, что вместе мы сможем прийти к правильному ответу.

    ------
    [url=https://zaycevmp3.ru/1927-Kamazz_V_klube_v_odnogo.html]https://zaycevmp3.ru/1927-Kamazz_V_klube_v_odnogo.html[/url]


    Подтверждаю. Я согласен со всем выше сказанным.

    ------
    [url=https://videochat.world]videochat mail[/url]
  3. avenue17pet
    avenue17pet 23 days ago
    Браво, идеальный ответ.
    ----
    [url=https://avenue17.ru/]https://avenue17.ru/[/url] https://avenue17.ru/

    Браво, отличный ответ.
    ----
    [url=https://novopet.ru/]https://novopet.ru/[/url] https://novopet.ru/
  4. master-climat
    master-climat 21 days ago
    Советую Вам посетить сайт, на котором есть много статей на интересующую Вас тему.

    -----
    [url=https://master-climat.com.ua/ventilyatsiya]https://master-climat.com.ua/ventilyatsiya[/url] https://master-climat.com.ua/
  5. JMam
    JMam 20 days ago
    я ожидала лучшего


    -----
    [url=http://pornowarp.info/]порно 365[/url] http://pornowarp.info/
  6. KeBex
    KeBex 19 days ago
    Извините за то, что вмешиваюсь… Мне знакома эта ситуация. Приглашаю к обсуждению.

    ----
    [url=https://01service.spb.ru/cat/audit_pozharnoj_bezopasnosti/index.htm]независимый пожарный аудит[/url]

    Не вижу в этом смысла.

    ----
    [url=https://assistant.poker]assistant for poker online[/url]

    Вы ошибаетесь. Пишите мне в PM.

    ----
    [url=https://xn--58-6kc6ajr0ai.xn--p1ai/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3/%D1%80%D0%B0%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8/%D0%B4%D0%BB%D1%8F-%D0%BF%D0%B5%D1%81%D0%BA%D0%BE%D1%81%D1%82%D1%80%D1%83%D0%B9%D0%BD%D1%8B%D1%85-%D1%80%D0%B0%D0%B1%D0%BE%D1%82/]купить расходные материалы для пескоструйных работ[/url]

    Пожалуй, я соглашусь с вашей фразой

    ----
    [url=https://lolz.guru/market/steam/]steam аккаунт[/url]

    Замечательно, это очень ценное мнение

    ----
    [url=https://lolz.guru/threads/2389327/]https://lolz.guru/threads/2389327/[/url]

    В этом что-то есть. Благодарю за помощь в этом вопросе, теперь я не допущу такой ошибки.

    ----
    [url=https://top1smm.ru/]интернет продвижение в социальных сетях[/url]

    зачем так палится!!!!!!!!

    ----
    [url=https://apparatov.net/all/15-obezjany.html]обезьянки автоматы играть бесплатно[/url]

    Весьма ценная штука

    ----
    [url=https://igrovyeavtomatyc.com/all/15-obezjanki-crazy-monkey.html]игровые автоматы обезьянки играть бесплатно без регистрации[/url]

    Буду надеятся что втарая часть будет не хуже первой

    ----
    [url=https://book-ofra-online.ru/kniga_ra_deluxe.html]https://book-ofra-online.ru/kniga_ra_deluxe.html[/url]

    Присоединяюсь. И я с этим столкнулся. Можем пообщаться на эту тему. Здесь или в PM.

    ----
    [url=https://igrovye-avtomati-online.com.ua/fruitilicious_avtomat.html]https://igrovye-avtomati-online.com.ua/fruitilicious_avtomat.html[/url]
  7. DavidJeody
    DavidJeody 17 days ago
    Жаль, что сейчас не могу высказаться - тороплюсь на работу. Но вернусь - обязательно напишу что я думаю.

    ----
    [url=https://lolz.guru/threads/1866477/]https://lolz.guru/threads/1866477/[/url]

    Я считаю, что Вы допускаете ошибку. Давайте обсудим. Пишите мне в PM.

    ----
    [url=https://poker-bot.nl]poker bot pro[/url]

    Вполне

    ----
    [url=https://poker-it.net]aiuto per giocare a poker[/url]

    Говорить на эту тему можно долго.

    ----
    [url=https://venro.ru/]накрутка 50 лайков в инстаграме[/url]

    Я считаю, что Вы ошибаетесь. Давайте обсудим. Пишите мне в PM.

    ----
    [url=http://www.vietrus.ru/catalog/polotencesushiteli]полотенцесушитель купить в интернет магазине[/url]

    Прошу прощения, это мне не подходит. Есть другие варианты?

    ----
    [url=https://igrovyeavtomatynadengi.net/all/59-shary-lucky-ladys-charm.html]бесплатно без регистрации игровой автомат шар[/url]

    По-моему это уже обсуждалось

    ----
    [url=http://igrovyeavtomatynadengi.top/]вулкан игровые автоматы без регистрации[/url]

    Полностью разделяю Ваше мнение. В этом что-то есть и я думаю, что это отличная идея.

    ----
    [url=https://japanesecasino-x.com/]https://japanesecasino-x.com/[/url]

    Я извиняюсь, но, по-моему, Вы не правы. Я уверен. Давайте обсудим это. Пишите мне в PM, пообщаемся.

    ----
    [url=https://crazy-monkey-online1.ru/keks_igrovoi_avtomat.html]https://crazy-monkey-online1.ru/keks_igrovoi_avtomat.html[/url]

    радует глаз ..........

    ----
    [url=https://fruit-cocktail-online1.ru/avtomat_sweet_life.html]https://fruit-cocktail-online1.ru/avtomat_sweet_life.html[/url]
  8. JulianHAF
    JulianHAF 17 days ago
    Вы не правы. Могу это доказать.

    ----
    [url=https://casino-x-officialniy-sayt.com/]https://casino-x-officialniy-sayt.com/[/url]

    Я думаю, что Вы допускаете ошибку. Предлагаю это обсудить. Пишите мне в PM, пообщаемся.

    ----
    [url=https://japancasino-x.com/]https://japancasino-x.com/[/url]

    Спасибки , кто ищет тот всегда найдет

    ----
    [url=https://joycasino-oficialniy-sayt.com/]https://joycasino-oficialniy-sayt.com/[/url]

    Я извиняюсь, но, по-моему, Вы не правы. Я уверен. Могу отстоять свою позицию.

    ----
    [url=https://kajino.fun/bao-casino-new-zealand/]https://kajino.fun/bao-casino-new-zealand/[/url]

    бесспорно-впечатляет!

    ----
    [url=https://online-ruletka.ru/mif_o_ruletke.html]https://online-ruletka.ru/mif_o_ruletke.html[/url]

    Я считаю, что Вы не правы. Давайте обсудим. Пишите мне в PM, пообщаемся.

    ----
    [url=https://super-million.ru/casino-million/million-besplatno.html]https://super-million.ru/casino-million/million-besplatno.html[/url]
Отменить.