Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Конспекты / Материалы урока-конкурса по дисциплине «Основы алгоритмизации и программирования» По теме «Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков»

Материалы урока-конкурса по дисциплине «Основы алгоритмизации и программирования» По теме «Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков»


  • Информатика

Поделитесь материалом с коллегами:

Министерство образования и науки Республики Казахстан

РГКП «Семипалатинский финансово-экономический колледж имени Рымбека Байсеитова»

















Материалы урока-конкурса по дисциплине «Основы алгоритмизации и программирования»

По теме «Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков»












Преподователь: Р.С. Раева















2015-2016 учебный год

Технологическая карта (план) урока №37


Группа

Дата

2 осн ВТ-1

10.12









Дисциплина: Основы алгоритмизации и программирования

Раздел 5 Основные компоненты Delphi. Структурированные типы и их реализация в Delphi Тема курса: 5.4 Компоненты списки, работа с массивами

Тема урока: 37 Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков Тип урока: комбинированный

Вид урока:, лекция, урок конкурс


Требования предъявляемые к уровню подготовленности обучающихся

Базовые компетенции

БК 1. Соблюдать технику безопасности и правила пожарной безопасности;

БК 4. Организовать работу с различными источниками информации – находить, обрабатывать, хранить и воспроизводить;

БК 7. Определять наиболее актуальные подходы алгоритмизации и способы решения поставленной задачи.

Профессиональные компетенции

ПК 1. Проводить трансляцию и отладку программы, управлять данными при решении задач;

ПК 2. Осуществлять решение задач из различных областей науки, техники, экономики и производства с применением математических методов и вычислительной техники на всех этапах от постановки до получения результата на ЭВМ;


Цели урока

обучающая

Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков

воспитательная

Воспитание информационной культуры учащихся, внимательности, приветие интереса к изучаемому предмету, аккуратности, дисциплинированности, усидчивости, сознательное отношение к учебе.

развивающая

Развитие интеллектуального мышления, познавательных интересов, навыков работы на компьютере, самоконтроля, умения конспектировать, анализировать, логическиий излагать свои мысли.


Межпредметные связи

Обеспечивающие

Предмет: Основы объектно-ориентированного программирования

Тема курса 5.3 Массивы. Одномерные массивы

Обеспечиваемые

Предмет: Основы объектно-ориентированного программирования

Тема курса 5.4 Компоненты списки, работа с массивами


Оборудование урока

Наглядные пособия

Опорный конспект

Раздаточный материал

карта

Технические средства обучения

ПК, Turbo Pascal 7.0.

Литература: основная

  1. Семакин И.Г., Шестаков А.П. «Основы программирования»

Дополнительная

Гофман В., Хомоненко А «Delphi 6»


Содержание урока

№ эле-мента

Элементы урока, учебные вопросы,

формы и методы обучения

Дополнения, изменения

1.

Организационный (2 мин)

  1. Приветствие обучающихся

  2. Проверка готовности учебной аудитории к учебным занятиям

  3. Проверка готовности обучающихся к учебно-практической деятельности

  4. Проверка отсутствующих, заполнение учебного журнала

  5. Постановка цели и хода урока


2.

Проверка домашнего задания (20 мин)

Индивидуальный опрос:

1.В общем случае массив?

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

var

a:array[1..10] of integer;

b:array[1..20] of char;

2.Одномерные массивы

Элементами массива могут быть данные любого типа, включая структурированные. К необходимости применения массивов (прямого или опосредованного) мы приходим всегда, когда требуется связать и использовать ряд однотипных величин. При описания массива используются зарезервированные слова array и of. За словом array в квадратных скобках указывается диапазон или перечислимый(ordinal) тип, определяющий количество элементов массива. После слова of указывается тип элементов, образующих массив. Доступ к каждому элементу массива осуществляется с помощью индекса. Нельзя указывать значение индекса, не входящий в диапазон массива.

var

a:array[1..10]of integer;

begin

a[7]:=14;

a[2]:=11;

a[0]:=20; //Ошибка!

end.

В отличие от C-подобных языков(C/C++/Java/C#), в которых начальным индексом массива всегда служит нулевое целое, в Delphi при объявлении переменной-массива или типа-массива, указывается диапазон значений индекса, а не количество элементов. Это означает, что первым элементом массива может быть элемент с индесом, отличным от нуля.

3.Заполнение массивов?

происходит поэлементно, обычно использую оператор for:

{$APPTYPE CONSOLE}

var

a:array[1..100] of integer;

i,j:integer;

begin

for i:=1 to 100 do //Заполнение массива случайными числами.

a[i]:=random(9)+1; //ф-ция random возвращает псевдослучайное число в интервале 0..<параметр>-1

for i:=0 to 9 do begin //Вывод по 10 чисел на строку

for j:=1 to 10 do //Внутренний цикл

write(a[i*10+j],' ');

writeln(' ');

end;

readln;

end.

4.Допускается инициализация каких переменных?

не-локальных переменных-массивов:

var t:array[1..3] of Integer=(1,2,3);

type TRec=record

s:string;

v:integer;

end;

var ra:array[1..2] of TRec=((s:'test';v:3), (s:'test2';v:4));

5.Другие примеры объявления массивов

procedure test4();

type TWorkingDays=(Monday,Tuesday,Wednesday,Thursday, Friday);

var ar:array[boolean]of integer;

ar2:array[TWorkingDays] of Cardinal;

ar3:array[Tuesday..Thursday] of Cardinal;

bl:boolean;

wd:TWorkingDays;

begin

RandSeed:=2;

for bl in [true,false] do begin

ar[bl]:=random(13);

end;

for wd := Monday to Friday do ar2[wd]:=random(100);

for wd :=Tuesday to Thursday do ar3[wd]:=random(4);

end;

6.Переменные-массивы?

имеющие аналогичный, но не идентичный тип, вообще говоря, не являются совместимыми.

procedure test();

var tt,tt2:array[1..3] of Integer;//=(1,2,3);

tt3:array[1..3] of integer;

begin

tt[1]:=3;tt[2]:=4; tt[3]:=5;

tt2:=tt;//OK

tt3:=tt;//EROOR: Incompatible types

  • end;


3.

Объяснение нового материала (40 мин)

Тема урока: Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков


4.

Закрепление полученных знаний (10 мин)

1.Компонент TCoolBar, это новая разновидность TToolBar. TCoolBar этоэлемент управления, который обычно содержит в себе два или более TCoolBand-ов,размеры и местоположение которых можно изменять во время выполнения программы.CoolBand в свою очередь является областью элемента управления, которая можетсодержать другие оконные контролы, главным образом панели инструментов, окошкиредактирования, выпадающие списки и анимация.

Создать coolbar довольно просто: достаточно поместить компонентCoolBar из набора Win32 VCL на форму. У CoolBar-а есть довольно много настроек(настройка осуществляется через свойства): Align - поумолчанию, расположение Coolbar настроено на верхнюю часть окна, поэтому, чтобыизменить расположение кулбара, нам прийдётся подредактировать этосвойство; Bitmap - используется для закрашивания фонаCoolBar-а картинкой; свойство FixedOrder определяет, может липользователь переопределить порядок панелей.

2.TCoolBand

Как уже упоминалось выше, компонент Coolbar, это обычно наборобъектов TCoolBand. Чтобы добавить несколько CoolBand-ов в CoolBar, нампотребуется вызвать редактор Coolbar Band-ов. Сделать это можно путём нажатияна значёк, расположенный сразу после свойства Bands.

Один из способов разместить компонент (или компонент-контейнер) наCoolBar-е, это перетащить его из палитры VCL, при этом автоматически создастсяновый band для хранения компонента. Другой способ заключается в том, чтокомпонент вставляется в форму напрямую, а затем, при помощи редактора CoolBarBand-ов связывается с каким либо CoolBand-ом. Далее на кулбар обычно добавлетсяToolbar, путём простого перетаскивания его из палитры Win32 на Coolbar. Потомна тулбар добавляются одна или несколько кнопок.

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

Давайте перетащим на CoolBar выпадающий список, окошкоредактирования и один элемент анимации. Предположим, что у нас на формеприсутствует компонент memo с некоторым текстом. Например, мы можемиспользовать окно редактирования для установки размера шрифта, выпадающийсписок для установки названия шрифта, а анимацию для отображения каких-либособытий, происходищих в программе.

Во время выполнения программы пользователь может изменятьместоположение элементов управления путём перемещения и, тем самым меняяразмер.

3.Вам хочется добавить ещё компонентов ?

Как упоминалось выше, на CoolBar можно добавлять различные оконныекомпоненты. Оконные компоненты, это те, которые наследованы от TWinControl. Этозначит, что Labels и Shapes, например, не получится добавить на CoolBar.Однако, если внимательно посмотреть на Delphi IDE, то можно обнаружить, чтоcoolbar может так же содержать меню, хотя меню и не является оконнымкомпонентом. Значит должен быть способ добавлять на кулбар неоконныекомпоненты!

4.Кульные менюшки на Cool Band-ах

Итак, сперва, нам необходимо разместить на форме компонентMainMenu и добавить в него пункты при помощи Menu designer. Обратите внимание,что когда мы помещаем компонент TMainMenu на форму, то значение свойства формыMenu устанавливается в MainMenu1. Нам необходимо очистить это свойство и темсамым отключить объект MainMenu от формы, потому что нам необходимоиспользовать его в Coolbar-е.

Далее, добавляем Toolbar в Coolbar а так же добавляем несколькоToolButton - один ToolButton для каждого выпадающего меню. Если, например, уВас два меню верхнего уровня File и Edit, то добавить необходимо всего дваToolButton-а.

Далее, устанавливаем свойства тулбара. Flat и ShowCaptions устанавливаемв True. Свойства AutoSize и Grouped компонентаToolButton так же должны быть установлены в True. И, в заключение, соединяемкаждую кнопку с выпадающим меню, используя для этого свойство MenuItem.

Воттак должен выглядеть результат проделанных шагов (запущенная программа):

5.Немного программирования

Во время выполнения приложения, можно добавлять CoolBand-ы.Следующий код, добавляет CoolBand на CoolBar с размещённым на нёмTDateTimePicker.

procedure CreateDatePickerOnCoolBar;

var dtPick: TDateTimePicker;

begin

dtPick := TDateTimePicker.Create(CoolBar1);

dtPick.Parent := CoolBar1;

CoolBar1.Bands.Items[Count-1].Text := 'Pick a date';

...

end;


5

Подведение итогов урока (6 мин)


6

Постановка домашнего задания (2 мин)

Бобровский С.И. «Delphi 7», повторение



Преподаватель __________ Р.С. Раева

Цели урока:

  • Развивать логическое мышление у учащихся путем нестандартных форм обучения.

  • Развивать творческую деятельность учащихся.

  • Воспитывать интерес к профессии «техник-программист»

МТО: интерактивная доска, ноутбук.

  • Картинки, клей, кисти, крупы: гречневая, пшено, рис, перловая, пшеничная и горох.

  • Технологические карты, чайнворд, черный ящик, маркер, таблички.

Форма организации урока: творческий урок-конкурс.

Ход урока-конкурса

Организационная часть:

Приветствие.

Подгруппа делится на команды, состоящие из трех человек. Каждая команда дает себе название и указывает это на табличках.

Вводный инструктаж:

Сообщить о форме проведения урока в виде творческого конкурса.
Сообщить цели и условия проведения конкурса.
Выбрать экспертную комиссию из числа учащихся.

Роль, ведущего конкурса отводится мастеру технического обучения.

Конкурс сопровождается слайдами.

Мастер т/о: Добрый день дамы и господа! Сегодняшний урок у нас пройдет в нестандартной форме в виде творческого конкурса среди учащихся второго курса группы 2 основной ВТ-1. Группа разделилась на команды по три участника. Роль жюри будут выполнять наши учащиеся:

Конкурс будет, проходит в пять туров: 1 — разминка, 2 — «черный ящик», 3 — «угадай-ка», 4 — «золотые руки», 5 — аппликация из круп. Для каждого конкурса будут свои условия проведения и оценивание.

Уважаемые участники дайте название вашей команде.

Текущий инструктаж и самостоятельная работа учащихся

I тур «Разминка»

Условия конкурса: чайнворд будет оцениваться по количеству отгаданных слов. Каждое правильно отгаданное слово будет равно 1 баллу. Время для разгадывания — 7 минут.

Чайнворд

Составить цепочку слов. Конечная буква первого слова является начальной второго: например, оператор присваивания — Язык программирования.

1. Главное меню программы. Компонент способен создавать и обслуживать сложные иерархические меню. (оператор присваивания)
2. Турбо Паскаль это (Язык программирования)

II тур «Черный ящик»

Условия конкурса: по подсказкам команды должны, решать задачу. Команда, не угадавшая свой продукт проигрывает в этом конкурсе и дается шанс решить задачу другой команде и при этом отгадавшая команда получает дополнительные баллы — 3.
Жюри подсчитывает баллы.

Задача: 

Среди трех чисел найти среднее. Если среди чисел есть равные, вывести сообщение "Ошибка".

Алгоритм решения задачи: 

Хотя задача кажется простой, ее решение не такое очевидное. Можно, например, проверить каждое число, лежит ли оно между двумя другими. Или найти минимальное из трех, после чего вывести минимальное из оставшихся двух. Ниже выбран первый способ.

  1. Исключаем равенство чисел. Если первое число равно второму или первое равно третьему или второе равно третьему или все три числа равны (первое равно второму и второе равно третьему), то вывести сообщение "Ошибка". Иначе переходим к п. 2.

  2. Проверяем лежит ли первое число между вторым и третьим. Если первое число больше второго, но меньше третьего (т.е. второе минимально), или первое число меньше второго, но больше третьего (т.е. третье минимально), то значит оно среднее. Иначе переходим к п. 3.

  3. Проверяем лежит ли второе число между первым и третьим. Если второе число больше первого, но меньше третьего, или меньше первого, но больше третьего, то оно среднее. Иначе переходим к п. 4.

  4. Среднее число третье, так как ни один другой вариант не подошел. Действительно, числа не равны друг другу, первое и второе числа средними не являются.

Программа на языке Паскаль: 

var

a1, a2, a3: integer;

 

begin

write ('Введите три числа: ');

readln (a1, a2, a3);

 

if (a1 = a2) or (a1 = a3) or (a2 = a3) or ((a1 = a2) and (a2 = a3)) then

writeln('Ошибка')

else

if ((a1 > a2) and (a1 < a3)) or ((a1 < a2) and (a1 > a3)) then

writeln(a1)

else

if ((a2 > a1) and (a2 < a3)) or ((a2 < a1) and (a2 > a3)) then

writeln(a2)

else

writeln(a3);

 

end.

Пример работы программы:

Введите три числа: 7 4 6


Задача: 

Дано трехзначное число. Вывести на экран все трехзначные числа, которые можно получить из цифр данного числа.

Алгоритм решения задачи: 

Несмотря на кажущуюся простоту задачи, она не так проста. Если в числе есть одинаковые цифры или нули, то получается ограниченное число комбинаций.

Допустим, дано число abc, где a, b и c - цифры. Возможных вариантов, помимо abc, вроде бы будет 5: acb, bac, bca, cab, cba. Однако, если цифра a равна цифре b, то само число можно записать в виде aac, и тогда других вариантов будет всего два - это aca и caa. B таких нюансов в данной задаче много.

Предусмотреть все варианты в конструкции if-else непосильная задача. Ниже приводится лишь часть.

Есть вариант решения через массив. Записывать туда каждое очередное число, если оно больше 99 и меньше 1000 и если его еще нет в этом массиве. Но и тут возникают сложности, связанные с повторением кода.

Программа на языке Паскаль: 

var

n: 100..999;

a,b,c: byte;

 

begin

readln(n);

a := n div 100;

b := n div 10 mod 10;

c := n mod 10;

 

if (a<>b) and (a<>c) and (b<>c) and (a<>0) and (b<>0) and (c<>0) then begin

n := a * 100 + c * 10 + b;

writeln(n);

n := b * 100 + a * 10 + c;

writeln(n);

n := b * 100 + c * 10 + a;

writeln(n);

n := c * 100 + a * 10 + b;

writeln(n);

n := c * 100 + b * 10 + a;

writeln(n);

end else

if (a=b) and (a<>c) and (a<>0) and (b<>0) and (c<>0) then begin

n := a * 100 + c * 10 + b;

writeln(n);

n := c * 100 + a * 10 + b;

writeln(n);

end;

end.


III тур Конкурс «Угадай-ка»

Условия конкурса: перед участниками конкурса представлены несколько компоненты приложений стандарт ваша задача угадать эти компоненты. Произнести вслух название их.

Представлены следующие компоненты:

Пикто-
грамма

Имя

Назначение

Delphi компонент MainMenu

MainMenu

Главное меню программы. Компонент способен создавать и обслуживать сложные иерархические меню.

Delphi компонент PopupMenu

PopupMenu

Всплывающее меню. Обычно это меню появляется после нажатия правой кнопкой мыши.

Delphi компонент Label

Label

Метка. Используется для размещения не очень длинных сообщений в виде статического текста

Delphi компонент Edit

Edit

Строка ввода. Предназначена для ввода пользователем текстовой информации в виде одной строки. Имеет возможности по управлению вводимой информацией, например, переопределению символов до их появления в поле ввода, что используется в формах для ввода пароля.

Delphi компонент Memo

Memo

Многострочный текстовый редактор. Используется для ввода пользователем и отображения многострочного текста без функций форматирования.

Delphi компонент Button

Button

Командная кнопка. Используется для реализации в программе команд с помощью обработчика события OnClick этого компонента.

Delphi компонент CheckBox

CheckBox

Независимый переключатель. Используется его свойство Checked (отмечено), имеющее значения true или false, меняющееся при щелчке мышью.

Delphi компонент RadioButton

RadioButton

Зависимый переключатель. Используется для выбора только одного из нескольких вариантов. Для этого компонент объединяется как минимум с одним или несколькими такими же компонентами в группу. Щелчок по компоненту приводит к его выделению и снятию выделения ранее выбранного компонента. Также имеет свойство Checked.

Delphi компонент ListBox

ListBox

Список выбора. Содержит список предлагаемых вариантов (опций) и даёт возможность проконтролировать текущий выбор.

Delphi компонент ComboBox

ComboBox

"Выпадающий" список выбора. Представляет собой комбинацию компонентов Edit и ListBox.

Delphi компонент ScrollBar

ScrollBar

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

Delphi компонент GroupBox

GroupBox

Контейнер группы компонентов. Используется для группировки нескольких связанных по смыслу компонентов.

Delphi компонент RadioGroup

RadioGroup

Группа зависимых переключателей. Содержит специальные свойства для обслуживания нескольких связанных между собой зависимых переключателей.

Delphi компонент Panel

Panel

Панель. Этот компонент, как и GroupBox, служит для объединения нескольких компонентов. Содержит внутреннюю и внешнюю кромки, что позволяет создавать эффекты "вдавленности" и "выпуклости".

Delphi компонент ActionList

ActionList

Список действий. Служит для централизованной реакции программы на действия пользователя, связанные с выбором одного из группы однотипных управляющих элементов, таких как опции меню, кнопки и т.д.

Команды получают баллы по количеству отгаданных компонентов.


Заключительный инструктаж

— Провести анализ и подвести итог конкурса.

Жюри подводит итоги за все конкурсы вместе. Объявляется команда победителя. Все студенты, участвовавшие в данном конкурсе получают оценку — пять.


Дисциплина: Основы алгоритмизации и программирования

Раздел 5 Основные компоненты Delphi. Структурированные типы и их реализация в Delphi

Тема курса: 5.4 Компоненты списки, работа с массивами

Тема урока: 37 Работа с массивами в Delphi. Компоненты создания списков и выпадающих списков


TCoolBar TCoolBar

Компонент TCoolBar, это новая разновидность TToolBar. TCoolBar этоэлемент управления, который обычно содержит в себе два или более TCoolBand-ов,размеры и местоположение которых можно изменять во время выполнения программы.CoolBand в свою очередь является областью элемента управления, которая можетсодержать другие оконные контролы, главным образом панели инструментов, окошкиредактирования, выпадающие списки и анимация.

Создать coolbar довольно просто: достаточно поместить компонентCoolBar из набора Win32 VCL на форму. У CoolBar-а есть довольно много настроек(настройка осуществляется через свойства): Align - поумолчанию, расположение Coolbar настроено на верхнюю часть окна, поэтому, чтобыизменить расположение кулбара, нам прийдётся подредактировать этосвойство; Bitmap - используется для закрашивания фонаCoolBar-а картинкой; свойство FixedOrder определяет, может липользователь переопределить порядок панелей.

TCoolBand

Как уже упоминалось выше, компонент Coolbar, это обычно наборобъектов TCoolBand. Чтобы добавить несколько CoolBand-ов в CoolBar, нампотребуется вызвать редактор Coolbar Band-ов. Сделать это можно путём нажатияна значёк, расположенный сразу после свойства Bands.

Один из способов разместить компонент (или компонент-контейнер) наCoolBar-е, это перетащить его из палитры VCL, при этом автоматически создастсяновый band для хранения компонента. Другой способ заключается в том, чтокомпонент вставляется в форму напрямую, а затем, при помощи редактора CoolBarBand-ов связывается с каким либо CoolBand-ом. Далее на кулбар обычно добавлетсяToolbar, путём простого перетаскивания его из палитры Win32 на Coolbar. Потомна тулбар добавляются одна или несколько кнопок.

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

Давайте перетащим на CoolBar выпадающий список, окошкоредактирования и один элемент анимации. Предположим, что у нас на формеприсутствует компонент memo с некоторым текстом.

Во время выполнения программы пользователь может изменятьместоположение элементов управления путём перемещения и, тем самым меняяразмер.

Как упоминалось выше, на CoolBar можно добавлять различные оконныекомпоненты. Оконные компоненты, это те, которые наследованы от TWinControl. Этозначит, что Labels и Shapes, например, не получится добавить на CoolBar.Однако, если внимательно посмотреть на Delphi IDE, то можно обнаружить, чтоcoolbar может так же содержать меню, хотя меню и не является оконнымкомпонентом. Значит должен быть способ добавлять на кулбар неоконныекомпоненты!

Кульные менюшки на Cool Band-ах

нам необходимо разместить на форме компонентMainMenu и добавить в него пункты при помощи Menu designer. Обратите внимание,что когда мы помещаем компонент TMainMenu на форму, то значение свойства формыMenu устанавливается в MainMenu1. Нам необходимо очистить это свойство и темсамым отключить объект MainMenu от формы, потому что нам необходимоиспользовать его в Coolbar-е.

Далее, добавляем Toolbar в Coolbar а так же добавляем несколькоToolButton - один ToolButton для каждого выпадающего меню. Если, например, уВас два меню верхнего уровня File и Edit, то добавить необходимо всего дваToolButton-а.

Далее, устанавливаем свойства тулбара. Flat и ShowCaptions устанавливаемв True. Свойства AutoSize и Grouped компонентаToolButton так же должны быть установлены в True. И, в заключение, соединяемкаждую кнопку с выпадающим меню, используя для этого свойство MenuItem.


Компонент TCoolBar, это новая разновидность TToolBar. TCoolBar этоэлемент управления, который обычно содержит в себе два или более TCoolBand-ов,размеры и местоположение которых можно изменять во время выполнения программы.CoolBand в свою очередь является областью элемента управления, которая можетсодержать другие оконные контролы, главным образом панели инструментов, окошкиредактирования, выпадающие списки и анимация.

Создать coolbar довольно просто: достаточно поместить компонентCoolBar из набора Win32 VCL на форму. У CoolBar-а есть довольно много настроек(настройка осуществляется через свойства): Align - поумолчанию, расположение Coolbar настроено на верхнюю часть окна, поэтому, чтобыизменить расположение кулбара, нам прийдётся подредактировать этосвойство; Bitmap - используется для закрашивания фонаCoolBar-а картинкой; свойство FixedOrder определяет, может липользователь переопределить порядок панелей.

TCoolBand

Как уже упоминалось выше, компонент Coolbar, это обычно наборобъектов TCoolBand. Чтобы добавить несколько CoolBand-ов в CoolBar, нампотребуется вызвать редактор Coolbar Band-ов. Сделать это можно путём нажатияна значёк, расположенный сразу после свойства Bands.

Один из способов разместить компонент (или компонент-контейнер) наCoolBar-е, это перетащить его из палитры VCL, при этом автоматически создастсяновый band для хранения компонента. Другой способ заключается в том, чтокомпонент вставляется в форму напрямую, а затем, при помощи редактора CoolBarBand-ов связывается с каким либо CoolBand-ом. Далее на кулбар обычно добавлетсяToolbar, путём простого перетаскивания его из палитры Win32 на Coolbar. Потомна тулбар добавляются одна или несколько кнопок.

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

Давайте перетащим на CoolBar выпадающий список, окошкоредактирования и один элемент анимации. Предположим, что у нас на формеприсутствует компонент memo с некоторым текстом.

Во время выполнения программы пользователь может изменятьместоположение элементов управления путём перемещения и, тем самым меняяразмер.

Как упоминалось выше, на CoolBar можно добавлять различные оконныекомпоненты. Оконные компоненты, это те, которые наследованы от TWinControl. Этозначит, что Labels и Shapes, например, не получится добавить на CoolBar.Однако, если внимательно посмотреть на Delphi IDE, то можно обнаружить, чтоcoolbar может так же содержать меню, хотя меню и не является оконнымкомпонентом. Значит должен быть способ добавлять на кулбар неоконныекомпоненты!

Кульные менюшки на Cool Band-ах

нам необходимо разместить на форме компонентMainMenu и добавить в него пункты при помощи Menu designer. Обратите внимание,что когда мы помещаем компонент TMainMenu на форму, то значение свойства формыMenu устанавливается в MainMenu1. Нам необходимо очистить это свойство и темсамым отключить объект MainMenu от формы, потому что нам необходимоиспользовать его в Coolbar-е.

Далее, добавляем Toolbar в Coolbar а так же добавляем несколькоToolButton - один ToolButton для каждого выпадающего меню. Если, например, уВас два меню верхнего уровня File и Edit, то добавить необходимо всего дваToolButton-а.

Далее, устанавливаем свойства тулбара. Flat и ShowCaptions устанавливаемв True. Свойства AutoSize и Grouped компонентаToolButton так же должны быть установлены в True. И, в заключение, соединяемкаждую кнопку с выпадающим меню, используя для этого свойство MenuItem.


Создание визуальных (и не визуальных) компонентов в режиме RunTime и работа с ними может показаться не простой задачей для начинающих программистов. В данной статье, на примере своеобразного каклькулятора будет продемонстрирована работа с RunTime-созданными компонентами.
Описание будущей программы: по количеству, указанному пользователем, будет создавать N выпадающих списков, в которых можно выбрать математическое действие: сложение, вычитани, умножение, деление. И N полей ввода сумм. В зависимости от выбранного действия будет подсчитываться Итог.
Начнем с создания интерфейса.
Кидаем на форму панель TPanel на неё 2 кнопки TButton, 2 лейбла TLabel и 1 поле TEdit.
Выстраиваем их в следующей последовательности:
1) TLabelCaption: Создать;
2) TEditName: eCmpCount; Text: 0;
3) TLabelCaption: елементов;
4) TButtonName: btnCreate; Caption: Создать;
5) TButtonName: btnClear; Caption: Очистить.
В панели TPanel очистим Caption и свойство Align устанавливаем в alTop.
Добавляем еще 1 панель TPanel с 1 лейблом TLabel и 1 полем TEdit.
TPanel — очищаем Caption и Align устанавливаем в alBottom.
TLabelCaption: Результат;
TEditName: eResult; Text: 0; ReadOnly: True;
В середину кладем TScrollBox, называем sbElements и свойство Align устанавливаем в alClient.
На него кидаем 2 лейбла lblAction и lblSum с заголовками Действие и Сумма соответственно.
В итоге наша форма должна выглядеть примерно вот так:
MainDesign
В поле eCmpCount мы будем указывать кол-во компонент, которое необходимо создать. Поэтому нужно добавить обработку на событие OnKeyPress поля eCmpCount, которое не будет давать вводить ничего кроме цифр.

1

2

3

4

5

procedure TfmMain.eCmpCountKeyPress(Sender: TObject; var Key: Char);

begin

  if not (Key in ['0'..'9', #8]) then

    Key := #0

end;

Если вводимый символ Key не входит в диапозон от 0 до 9 и не равняется #8 (Клавиша Backspace), то обнуляем вводимый символ.

Аналогично полю eCmpCount нам необходимо ограничивать ввод для создаваемых в RunTime полей ввода сумм, однако мы хотим вводить не только целые, но и дробные числа.
Код события будет выглядеть следующим образом:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

private

  // Описываем процедуру в разделе Private

  procedure onSumEditKeyPress(Sender: TObject; var Key: Char);

public

  { Public declarations }

end;

***

// и реализацию в разделе implementation

procedure TfmMain.onSumEditKeyPress(Sender: TObject; var Key: Char);

var

  fs: TFormatSettings;

begin

  fs := TFormatSettings.Create;

  if not (Key in ['0'..'9', #8, fs.DecimalSeparator]) then

    Key := #0

end;

В зависимости от настроек системы дробные числа можно писать через точку или через запятую. Что бы оградить от ошибок, получим эти настройки из специальной структуры:
TFormatSettings — Текущие настройки форматов системы.
fs.DecimalSeparator — разделитель целой и дробной части указанный в системе.

Перейдем непосредственно к созданию компонентов.
Для начала добавим глобальную переменную FTop: integer; для определения верхней границы создаваемого элемента.
На событие OnCreate формы задаим начальное значение FTop:

1

2

3

4

5

6

7

8

9

10

11

private

  F;

  procedure onSumEditKeyPress(Sender: TObject; var Key: Char);

public

  { Public declarations }

end;

 

procedure TfmMain.FormCreate(Sender: TObject);

begin

  FTop := lblAction.Top + lblAction.Height + 10;

end;

Которое будет равняться верхней границе метки lblAction плюс её высота плюс отступ в 10 пикселей.

Теперь напишем код для кнопки «Создать».

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

procedure TfmMain.btnCreateClick(Sender: TObject);

var

  i,x: integer;

  cb: TComboBox;

  edt: TEdit;

begin

  x := StrToInt(eCmpCount.Text);

  if x > 0 then

    for i := 0 to x - 1 do begin

      cb := TComboBox.Create(sbElements);

      cb.Parent := sbElements;

      cb.Top := FTop;

      cb.Left := 8;

      cb.Width := 72;

      cb.Style := csDropDownList;

      cb.Items.Add('Выбрать');

      cb.Items.Add('+');

      cb.Items.Add('-');

      cb.Items.Add('*');

      cb.Items.Add('/');

      cb.ItemIndex := 0;

      cb.OnChange := calcTotal;

 

      edt := TEdit.Create(sbElements);

      edt.Parent := sbElements;

      edt.Top := FTop;

      edt.Left := cb.Left + cb.Width + 8;

      edt.OnKeyPress := onSumEditKeyPress;

      edt.OnChange := calcTotal;

 

      cb.Tag := Integer(Pointer(edt));

 

      Inc(FTop, cb.Height + 10);

    end;

end;

Разберем код по подробнее:
x := StrToInt(eCmpCount.Text); — Получаем кол-во елементов, которое нужно создать.
cb := TComboBox.Create(sbElements); — Создаем выпадающий список.
cb.Parent := sbElements; — В качестве родительского элемента указываем ScrollBox.
cb.Top := FTop; — Задаем верхнюю координату.
cb.Left := 8; — Левая граница.
cb.Width := 72; — Ширина.
cb.Style := csDropDownList; — Тип выпадающейго списка, который позволяет только выбрать из существующих элементов и не позволяет вводить значение вручную.
cb.Items.Add — Добавляем типы математических действий.
cb.ItemIndex := 0; — По умолчанию будет выбран пункт «Выбрать».
cb.OnChange := calcTotal; — На изменение значения будет вызываться событие calcTotal, код которого я напишу немного ниже.

edt := TEdit.Create(sbElements); — Создаем поле ввода сумм.
edt.Parent := sbElements; — В качестве родительского элемента указываем ScrollBox.
edt.Top := FTop; — Задаем верхнюю координату.
edt.Left := cb.Left + cb.Width + 8; — Левая граница высчитывается относительно выпадающего списка, как его левая граница плюс ширина плюс 8 пикселей отступа.
edt.OnKeyPress := onSumEditKeyPress; — Проверяем кооректный ввод данных.
edt.OnChange := calcTotal; — При изменении пересчитываем итоговую сумму.
cb.Tag := Integer(Pointer(edt)); — Сохраняем указатель на поле суммы в свойство Tag выпадающейго списка, тем самым как бы связывая их в пару.
Inc(FTop, cb.Height + 10); — Увеличиваем переменную верхней границы на высоту созданного выпадающего списка плюс отступ 10 пикселей.

Напишем код процедуры calcTotal, которая будет подсчитывать итог:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

private

  F;

  procedure onSumEditKeyPress(Sender: TObject; var Key: Char);

  procedure calcTotal(Sender: TObject);

public

***

procedure TfmMain.calcTotal(Sender: TObject);

var

  i: integer;

  res: currency;

begin

  res := 0;

  for i := 0 to sbElements.ComponentCount - 1 do

    if (sbElements.Components[i] is TComboBox)

      and (TComboBox(sbElements.Components[i]).ItemIndex > 0) then

      case TComboBox(sbElements.Components[i]).ItemIndex of

        1: res := res + StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);

        2: res := res - StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);

        3: res := res * StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);

        4: res := res / StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);

      end;

  eResult.Text := CurrToStr(res);

end;

res := 0; — Обнулим переменную результата.
for i := 0 to sbElements.ComponentCount — 1 do — Цикл для всех комонентов содержащихся в sbElements.
if (sbElements.Components[i] is TComboBox) — Если i-ый компонент пренадлежит к классу TComboBox
and (TComboBox(sbElements.Components[i]).ItemIndex > 0) then — и выбранный в нем элемент больше 0 (так как нулевой элемент в списке у нас «Выбрать»).
case TComboBox(sbElements.Components[i]).ItemIndex of — В зависимости от выбранного элемента в списке выполним действие:
Поле суммы получаем через указатель, который мы сохранили в свойстве Tag выпадающего списка при создании компонентов.
1: res := res + StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);
2: res := res — StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);
3: res := res * StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);
4: res := res / StrToCurr(TEdit(Pointer(TComboBox(sbElements.Components[i]).Tag)).Text);
eResult.Text := CurrToStr(res);Результат запишем в соответствующее поле. Функция CurrToStr переводит число типа currency в строку.

И последнее, что нам осталось это написать код для кнопки «Очистить»:

1

2

3

4

5

6

7

8

9

10

procedure TfmMain.btnClearClick(Sender: TObject);

var

  i: integer;

begin

  for i := sbElements.ComponentCount - 1 downto 0 do

    if (sbElements.Components[i] <> lblAction) and (sbElements.Components[i] <> lblSum) then

      sbElements.Components[i].Free;

  FTop := lblAction.Top + lblAction.Height + 10;

  eResult.Text := '0';

end;

for i := sbElements.ComponentCount — 1 downto 0 do — Выполняем цикл для всех компонентов содержащихся в sbElements в обратном порядке.
if (sbElements.Components[i] <> lblAction) and (sbElements.Components[i] <> lblSum) then — Если это не лейблы «Действие» и «Сумма»
sbElements.Components[i].Free; — Уничтожим этот компонент.
FTop := lblAction.Top + lblAction.Height + 10; — Отсчет верхней границы вернем в исходное состояние.
eResult.Text := ‘0’; — Обнулим результат.

Запускаем — проверяем:
MainRunning
Сумма считается, все ОК!
































Задача: 

Среди трех чисел найти среднее. Если среди чисел есть равные, вывести сообщение "Ошибка".

Алгоритм решения задачи: 

Хотя задача кажется простой, ее решение не такое очевидное. Можно, например, проверить каждое число, лежит ли оно между двумя другими. Или найти минимальное из трех, после чего вывести минимальное из оставшихся двух. Ниже выбран первый способ.

Исключаем равенство чисел. Если первое число равно второму или первое равно третьему или второе равно третьему или все три числа равны (первое равно второму и второе равно третьему), то вывести сообщение "Ошибка". Иначе переходим к п. 2.

Проверяем лежит ли первое число между вторым и третьим. Если первое число больше второго, но меньше третьего (т.е. второе минимально), или первое число меньше второго, но больше третьего (т.е. третье минимально), то значит оно среднее. Иначе переходим к п. 3.

Проверяем лежит ли второе число между первым и третьим. Если второе число больше первого, но меньше третьего, или меньше первого, но больше третьего, то оно среднее. Иначе переходим к п. 4.

Среднее число третье, так как ни один другой вариант не подошел. Действительно, числа не равны друг другу, первое и второе числа средними не являются.


Задача: 

Дано трехзначное число. Вывести на экран все трехзначные числа, которые можно получить из цифр данного числа.

Алгоритм решения задачи: 

Несмотря на кажущуюся простоту задачи, она не так проста. Если в числе есть одинаковые цифры или нули, то получается ограниченное число комбинаций.

Допустим, дано число abc, где a, b и c - цифры. Возможных вариантов, помимо abc, вроде бы будет 5: acb, bac, bca, cab, cba. Однако, если цифра a равна цифре b, то само число можно записать в виде aac, и тогда других вариантов будет всего два - это aca и caa. B таких нюансов в данной задаче много.

Предусмотреть все варианты в конструкции if-else непосильная задача. Ниже приводится лишь часть.

Есть вариант решения через массив. Записывать туда каждое очередное число, если оно больше 99 и меньше 1000 и если его еще нет в этом массиве. Но и тут возникают сложности, связанные с повторением кода.




Автор
Дата добавления 08.01.2016
Раздел Информатика
Подраздел Конспекты
Просмотров219
Номер материала ДВ-314251
Получить свидетельство о публикации

Похожие материалы

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