- •Задание 1.2. Исследуем компонент RadioGroup1
- •Задание 1.3 Изучим полезный оператор With … do.
- •Задание 1.4 Используя данные свойства, запрограммируем щелчок на Button3 так, чтобы отменить выбор всех кнопок с зависимой фиксацией в RadioGroup1.
- •Задание 2.3 Изменим вид отображения компонента DateTimePicker1, при щелчке на CheckBox1.
- •Задание 2.6 Пусть при щелчке на UpDown1 в CheckListBox1 напротив текстовых значений (строк) ставится галочка, а во всех остальных её не будет.
- •Задание 2.8 Рассмотрим компонент генерирующий стандартную анимацию при копировании файлов, поиске файлов, очистки корзины и т.Д.
- •Задание 2.9 Кратко рассмотрим компонент OleContainer1
Лабораторная работа №6. Работа в DELPHI.
Краткий обзор некоторых стандартных компонентов
Задание 1.1. Исследуем компоненты GroupBox и RadioGroup
Рассмотрим компонент GroupBox – стандартный элемент управления Windows для объединения кнопок с зависимой фиксацией, флажков опций и других элементов управления, которые являются неотъемлемой частью большинства windows – приложений.
Создайте новый проект.
Перенесите GroupBox1, GroupBox2, Button1 на форму. Затем перенесите по 3 компонента RadioButton в GroupBox1 и в GroupBox2 (рис. 1)
Рис 1 Компоненты TGroupBox могут содержать в себе Объекты TRadioButton
RadioButton – это кнопка с зависимой фиксацией, в любом наборе из таких кнопок для выбора доступна только 1 кнопка, каждый компонент GroupBox как раз объединяет один конкретный набор таких кнопок. Выбор конкретной кнопки указывается её свойством Checked, точно также как и у компонента CheckBox.
Поэтому запрограммируем обработчик щелчка на Button1 так чтобы выдавалось сообщение какая кнопка RadioButton и в каком компоненте GroupBox она выбрана.
В обработчике щелчка на Button1 напишите следующее:
if RadioButton1.Checked
then MessageDlg('выбрана RadioButton1 в GroupBox1',mtInformation,[mbOk],0);
if RadioButton2.Checked
then MessageDlg('выбрана RadioButton2 в GroupBox1',mtInformation,[mbOk],0);
if RadioButton3.Checked
then MessageDlg(' выбрана RadioButton3 в GroupBox1',mtInformation,[mbOk],0);
if RadioButton4.Checked
then MessageDlg(' выбрана RadioButton4 в GroupBox2',mtInformation,[mbOk],0);
if RadioButton5.Checked
then MessageDlg(' выбрана RadioButton5 в GroupBox2',mtInformation,[mbOk],0);
if RadioButton6.Checked
then MessageDlg(' выбрана RadioButton6 в GroupBox2',mtInformation,[mbOk],0);
Далее добавьте кнопку BitBtn1 из палитры Additional, это функциональная кнопка. Измените значение её свойства Kind на bkClose и теперь при щелчке на ней приложение будет закрываться.
Запустите программу. Выберите произвольно некоторые кнопки в наборах и щелкните на Button1. Убедитесь в правильности работы программы. Вернитесь в режим программирования.
Задание 1.2. Исследуем компонент RadioGroup1
Есть более удобный способ объединения кнопок с зависимой фиксацией, который реализует компонент RadioGroup1 аналог компонента GroupBox. Сбросьте на форму компонент RadioGroup1. Выберите его свойство Items, и чуть справа щелкните на на надписи TSrings (так же как и для компонента Memo), наберите там вручную следующее:
Рис 2 Добавление имен кнопок TRadioButton в TRadioGroup
И нажмите OK. Получите уже сформировавшийся, готовый к работе набор кнопок RadioButton.
Рис. 3 Сформированные кнопки TRadioButton в TRadioGroup
Для RadioGroup1 измените значение свойства Columns – количество столбцов на 2 или 3. Чтобы добраться до конкретной кнопки RadioButton нужно просматривать массив Items (свойство представляющее из себя набор строк типа TStrings) компонента RadioGroup1.
Массив Items начинается с нуля, поэтому запись Items[0] определяет первую кнопку RadioButton внутри RadioGroup1, Items[1] определяет вторую кнопку RadioButton и т.д.
Значение свойства Count массива Items равно числу строк в свойстве Strings и следовательно числу объектов–кнопок RadioButton принадлежащих RadioGroup1.
Значение ItemIndex определяет индекс выбранной кнопки. Если ItemIndex=-1 не выбрана ни одна кнопка, если ItemIndex=0 выбрана первая кнопка, если ItemIndex= 1 вторая и т.д.
Сбросьте кнопку Button2 на форму и запрограммируете щелчок на ней так чтобы при выборе кнопки с фиксацией выводилась информация, во первых: присутствует ли в RadioGroup1 кнопка с надписью ‘aaaaa’ и во вторых, кнопка с каким индексом выбрана в данный момент.
Для этого в обработчике Button2 напишите следующее:
var i:integer;
begin
for I:=0 to RadioGroup1.Items.Count-1 do
if RadioGroup1.Items[i]='aaaaa' then
MessageDlg('Knopka aaaaa присутствует',mtinformation,[mbOk],0);
MessageDlg(RadioGroup1.Items[RadioGroup1.ItemIndex],mtinformation,[mbOk],0);
end;
Запустите программу. Выберите произвольно кнопку в RadioGroup1 и щелкните на Button2. Убедитесь в правильности работы программы. Вернитесь в режим программирования.
Задание 1.3 Изучим полезный оператор With … do.
Далее, в обработчике Button2 закомментируете набранный ранее текст чтобы его не воспринимал компилятор, и измените обработчик следующим образом :
var i:integer;
begin
{ for I:=0 to RadioGroup1.Items.Count-1 do
if RadioGroup1.Items[i]='aaaaa' then
MessageDlg('Knopka aaaaa присутствует',mtinformation,[mbOk],0);
MessageDlg(RadioGroup1.Items[RadioGroup1.ItemIndex],mtinformation,[mbOk],0); }
With RadioGroup1 do
for I:=0 to Items.Count-1 do
if Items[i]='aaaaa' then MessageDlg('Knopka aaaaa присутствует',mtinformation,[mbOk],0);
With RadioGroup1 do
MessageDlg(Items[ItemIndex],mtinformation,[mbOk],0);
end;
Запустите программу. Выберите произвольно кнопку в RadioGroup1 и щелкните на Button2. Программа будет работать точно также как и в предыдущем случае. Мы просто немного изменили код. Вернитесь в режим программирования.
Данный оператор With … Do используется для того, чтобы обращаться к полям, свойствам или методам объекта только один раз указав имя объекта, без использования операции доступа “.” что является очень удобным.
В частности для RadioGroup1 указали его имя один раз, а затем в теле оператора With RadioGroup1 do просто записываем Items.Count вместо RadioGroup1.Items.Count.
Также например для упрощения кода удобно написать вместо a:=RadioGroup1.Items.Count инструкцию With RadioGroup1, Items do a:=Count перечисляя через запятую члены класса. Подобные инструкции используются часто и делают код программы более читабельным.
Так как многие объекты (компоненты) в Delphi могут содержать другие объекты (компоненты), то для обработки этих других объектов есть ряд полезных свойств благодаря которым можно до них добраться программным путем, 3 таких свойства приведем в следующей таблице:
Свойство |
Описание |
Components |
Массив, содержит все внутренние объекты(компоненты) находящиеся в некотором объекте (компоненте). Нумеруется начиная с нулевого номера, например первый объект это Components[0], второй – Components[1] и т.д. |
ComponentIndex |
Определяет номер внутреннего объекта (компонента) выбранного или активированного в данный момент времени в некотором объекте (компоненте). (0–первый, 1 – второй, 2 – третий и т.д.) |
ComponentCount |
Число всех внутренних объектов содержащихся в некотором объекте. |
Приведенные свойства в частности также имеются и у формы.