Читайте также:
|
|
Иногда компоненты надо создавать динамически. Например, на форме вашей программы может находится кнопка "Дополнительно...", при нажатии на которую ваша форма должна увеличится в размерах и на ней должны появится дополнительные элементы управления. Именно такой пример мы сейчас и рассмотрим.
Откройте Delphi, уменьшите форму и расположите на ней кнопку Button1. Установите свойство Caption для кнопки в "Дополнительно...":
Щелкните на кнопке Button1 и внесите в появившуюся заготовку следующий код:
procedure TForm1.Button1Click(Sender: TObject);var btn: TButton; //Переменная для кнопки edt: TEdit; //Переменная для Edit'аbegin //Увеличиваем размер формы Form1.Height:=Form1.Height+40; //Отключаем кнопку Button1.Enabled:=false; //Создаем новую кнопку btn:=TButton.Create(Form1); btn.Parent:=Form1; //Устанавливаем расположение новой кнопки btn.Top:=Form1.Height div 2+20; btn.Left:=10; btn.Width:=100; btn.Height:=25; btn.Caption:='Новая кнопка'; //Создаем новый Edit edt:=TEdit.Create(Form1); edt.Parent:=Form1; //Устанавливаем расположение нового Edit'а edt.Top:=Form1.Height div 2+20; edt.Left:=120; edt.Width:=100; edt.Height:=25;end;рис. 1
Запускайте программу и нажимайте на кнопку. Форма увеличит размеры и на ней появятся два новых компонента - кнопка и Edit:
Динамическое создание компонентов можно использовать и для создания массивов компонентов.
Например, нам надо расположить на форме 3 конопки. Если они будут выполнять в программе схожие функции, то лучше их оформить в виде массива. Для этого сначала этот массив объявляем:
...var Form1: TForm1; btn: Array[1..3] Of TButton;...После этого добавьте в окно кода следующий обработчик для события OnCreate (для этого перейдите в Инспекторе объектов на вкладку Events, и сделайте двойной щелчок на событии OnCreate):
procedure TForm1.FormCreate(Sender: TObject);var i:Integer;begin for i:=1 To 3 do begin btn[i]:=TButton.Create(Form1); //Создаем кнопку btn[i].Parent:=Form1; //Задаем родительское окно btn[i].Top:=10; btn[i].Left:=10+60*(i-1); btn[i].Width:=50; btn[i].Height:=50; btn[i].Caption:=IntToStr(i) //Задаем заголовок для кнопки endend;Теперь можете запускать программу (F9). Будет создан массив из трех кнопок:
Давайте сейчас посмотрим, как к созданной динамически кнопке можно добавить (также динамически) код, который будет выполнятся при нажатии на ней.
Возьмите за основу программу рис 1. Добавьте на её форму компонент ActionList с вкладки Standard:
Для добавления действия в наш компонент ActionList1 сделайте двойной щелчок на нем. Появится окно Editing Form1.ActionList1. Нажмите в нем на кнопку New Action:
В правом списке появится новое действие Action1:
Сделайте на нем двойной щелчок для перехода в окно кода. Добавьте следующие строки:
procedure TForm1.Action1Execute(Sender: TObject);begin MessageDlg('Событие для новой кнопки', mtConfirmation, [mbOK], 0);end;Мы добавили в нашу программу некоторое действие (появление MessageBox'а). Это действие называется Action1. Теперь свяжем этой действие с нашей кнопкой. Для этого добавьте в обработчик Button1Click следующую строку:
... btn.Caption:='Новая кнопка'; btn.Action:=Action1; //Создаем новый Edit...В этой строке мы связываем свойство Action для кнопки с конкретным событием Action1.
Это свойство присутствует и в Инспекторе объектов. Например, для нашей обычной кнопки Button1 оно выглядит так:
Теперь запускайте программу, нажимайте на кнопку "Дополнительно", потом на нашу динамически созданную кнопку. Появится MessageBox - как мы и задумывали:
Таким образом мы присоединили к динамически созданной кнопке некотрое действие.
Дата добавления: 2015-07-15; просмотров: 133 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Дикий белок 16 страница | | | У ДИПЛОМНИХ ПРОЕКТАХ (РОБОТАХ) |