Опубликован: 07.04.2008 | Уровень: специалист | Доступ: свободно
Лекция 12:

Тип TStrings

< Лекция 11 || Лекция 12: 12 || Лекция 13 >

ComboBox – выпадающий список

Такие списки вы часто встречаете при работе с Windows и различными программами. Действуют и работают они также как ListBox, с той только разницей, что выглядят по-другому, и не позволяют выбрать несколько элементов сразу. Создайте новое приложение, добавьте туда только один ComboBox и один Edit:

Внешний вид приложения

Рис. 12.3. Внешний вид приложения

Вызовите редактор строк ComboBox (свойство Items ) Впишите несколько городов:

Москва
Санкт-Петербург
Киев
Минск
Ташкент
Душанбе

Свойство ItemIndex, которое, как мы знаем, указывает индекс выделенной строки, по умолчанию установлено в -1. Это означает, что ни одна строка не выбрана. Если установить его в 0, то в поле ввода текста появится первая строка списка. Оставим -1, чтобы строк не было видно.

Создадим обработчик события OnChange для компонента ComboBox, и там напишем только одну строку:

Edit1.Text := ComboBox1.Items.Strings[ComboBox1.ItemIndex];

Как видите, это почти точная копия работы с ListBox. Сохраните пример в новую папку, откомпилируйте и попробуйте как он работает.

Управление циклами

Вы знаете уже практически все циклы – for..do, while..do, repeat..until. Однако этими циклами можно еще и управлять. Для этого служат директивы break и continue.

Breakпрерывание цикла. Если внутри цикла встретится такой оператор, происходит немедленный выход из цикла. Как правило, этот оператор используют совместно с управляющей структурой if, например:

if a <> b then break;

Следовательно, если возникнет какое-то недопустимое для цикла условие, вы всегда имеете возможность прервать цикл досрочно.

Continueпрерывание текущего шага цикла. В отличие от break, continue не прекращает цикл вовсе, а лишь прерывает дальнейшую обработку этого шага цикла, после чего цикл сразу начинается со следующего шага. Способ применения такой же, как у break. Рассмотрим работу continue на практическом примере.

Нам нужно разделить число 10 на число от -3 до 3 включительно, и результат вывести в ListBox. Поскольку выводить будем также целые числа, нам поможет функция Round(), которая принимает вещественное число, округляет его до ближайшего целого и это целое возвращает. Также мы знаем, что на ноль делить нельзя, это ошибка. Для того, чтобы не допустить это деление, мы прервем этот шаг цикла с помощью директивы continue.

Создайте новое приложение. Установите на форму ListBox, а под ним – кнопку:

Внешний вид приложения

Рис. 12.4. Внешний вид приложения

При нажатии на кнопку, напишите следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
   i, r : Integer;
begin
   for i := -3 to 3 do begin
      if i = 0 then begin
         ListBox1.Items.Add('На ноль делить нельзя!');
         Continue;
      end; //if

     r := Round(10/i);
     ListBox1.Items.Add('10/'+IntToStr(i)+'='+IntToStr(r));
  end; //for

end;

В тот момент, когда счетчик i станет равным 0, выполнится тело условия if, и после оператора Continue цикл сразу перейдет на новый виток, пропустив деление.

Самостоятельное задание

В примере мы жестко задали условия: делить именно число 10 на диапазон чисел от -3 до 3. Измените пример так, чтобы пользователь мог сам указать какое число нужно делить, и на какой диапазон. Это несложное задание, однако, придется подключить к работе мозги.

< Лекция 11 || Лекция 12: 12 || Лекция 13 >
Виктор Пелих
Виктор Пелих

Здравствуйте.
Прохожу курс "Введение в программирование на Delphi"
Добрался до Лекции 29: Введение в базы данных.

Установлена RAD Studio 11.3, у которой отсутствует вкладка BDE и, соответственно, компонент Table,  который обеспечивает доступ к таблице средствами механизма BDE.
Поиск в интернете подсказал 
BDE Installer for RAD Studio, Delphi, C++Builder 10.3 Rio
Подскажите, имеется ли ещё возможность использовать механизм BDE в Delphi11 и если такая возможность есть, как подключить BDE к Delphi11?
С уважением...

 

Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?