Недавно добавленные исходники

•  TDictionary Custom Sort  3 226

•  Fast Watermark Sources  2 992

•  3D Designer  4 751

•  Sik Screen Capture  3 259

•  Patch Maker  3 467

•  Айболит (remote control)  3 528

•  ListBox Drag & Drop  2 904

•  Доска для игры Реверси  80 789

•  Графические эффекты  3 843

•  Рисование по маске  3 171

•  Перетаскивание изображений  2 544

•  Canvas Drawing  2 672

•  Рисование Луны  2 500

•  Поворот изображения  2 093

•  Рисование стержней  2 120

•  Paint on Shape  1 525

•  Генератор кроссвордов  2 183

•  Головоломка Paletto  1 730

•  Теорема Монжа об окружностях  2 158

•  Пазл Numbrix  1 649

•  Заборы и коммивояжеры  2 016

•  Игра HIP  1 262

•  Игра Go (Го)  1 201

•  Симулятор лифта  1 422

•  Программа укладки плитки  1 177

•  Генератор лабиринта  1 512

•  Проверка числового ввода  1 297

•  HEX View  1 466

•  Физический маятник  1 322

•  Задача коммивояжера  1 357

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Создание компонент в Run-Time



Надпись на могиле пpогpаммеpа:
Пpичина смеpти: Run-time error at 18:12:97
Пpичина pождения: GPF at: 18:12:97

Итак, рассмотрим на первый взгляд сложный вопрос о создании компонентов в Run_time (то есть во время работы программы). Но на самом деле этот вопрос довольно просто решается.

Давайте вместе попробуем написать код, чтобы при нажатии на кнопку на форме появлялось текстовое поле с каким-нибудь текстом. Для этого надо проделать следующие действия: объявить переменную необходимого вам типа компонента, в нашем случае TEdit, затем необходимо описать процедуру Create для нашей переменной, задать обязательное свойство Parent (то есть где появится наш компонент), ну и установить необязательные параметры типа высоты, ширины и т.д. Лучше разбираться на конкретном примере, так что смотрите какой у меня получился код:


procedure TForm1.Button1Click(Sender: TObject);
var
  x: TEdit; // объявляем переменную типа TEdit
begin
  x:=TEdit.create(self);// создаем экземпляр компонента
  x.parent:=form1;// текстовое поле появится на форме
  x.left:=10;
  x.top:=10;
  x.Width:=250;
  x.Text:='Delphi World is (:-0) !!!';
end;

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

Процессы создания визуальных и невизуальных компонентов несколько отличаются (последний попроще будет). Поскольку Edit мы уже создали (а это как раз визуальный компонент), теперь будем создавать невизуальный компонент, например FontDialog. Поставьте на форму еще кнопку. Обработчик события OnClick может выглядеть так:


procedure TForm1.Button2Click(Sender: TObject);
var
  y: TFontDialog; // объявляем переменную типа TFontDialog
begin
  y:=TFontdialog.Create(self);
  y.Execute; //только для демонстрации. Показать что работает.
end;

Вы свободно можете изменять любые свойства компонента, созданного во время работы приложения.

Теперь мы попробуем вместе проделать такую вещь: мы отсортируем находящиеся в Memo данные. Для этого поставьте на форму Memo и напишите в ней 4 строки, например:


Memo4
Memo1
Memo3
Memo2  

Поскольку само Memo сортировать данные не умеет, то нам придется во время работы программы создать какую-нибудь переменную абстрактного класса TStringList (этот класс сортировать умеет), затем присвоить этому классу строки из Memo, отсортировать их и присвоить их обратно Memo. Поставим еще одну кнопку на форму, которая будет запускать процесс. Код получится примерно таким:


procedure TForm1.Button3Click(Sender: TObject);
var
  t: TStringList;
begin
  t:=TStringList.Create; //создаем
  t.AddStrings(memo1.lines); //присваиваем переменной t строки из Memo
  t.Sort; // сортируем
  memo1.Clear;
  memo1.Lines.AddStrings(t); // присваиваем memo уже отсортированные строки
end;

Теперь рассмотрим еще один вопрос, касающийся создания компонентов в Run-time. Допустим вам надо создать 20 полей для ввода текста (Edit) и еще десять меток (Label), не будете же вы 20 раз писать одно и тоже для каждого edit'a. В этой ситуации есть очень элегантный выход: воспользоваться массивом компонентов. В общем виде объявление массива компонентов может выглядеть так: имя_переменной:array[нижний_индекс..верхний_индекс] of тип_компонента. Теперь поупражняемся в этом. Создайте новое приложение. На форму поместите только кнопку. Обработчик события OnClick которой у меня получился таким:


procedure TForm1.Button1Click(Sender: TObject);
var
  a: array [1..20] of TEdit; // массив элементов Edit
  b: array [1..10] of TLabel; //массив меток
  i, j: integer;
begin
  for i:=1 to 20 do
  begin
    a[i]:=TEdit.create(self);
    a[i].parent:=form1;
    a[i].left:=10;
    a[i].text:='элемент # '+inttostr(i);
    a[i].top:=i*20;
  end;
  for j:=1 to 10 do
  begin
    b[j]:=TLabel.create(self);
    b[j].parent:=form1;
    b[j].left:=200;
    b[j].Caption:='элемент # '+inttostr(j);
    b[j].top:=j*30;
  end;
end;

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





Похожие по теме исходники

Создание таблиц в Paradox

Расширение компонента TEdit

Компонент TDBF

Create Table in Runtime

 

Running Balls

Running Line

No AutoRun USB Agent

Run As

 

Dynamic Menu Runtime

Run As User

Run as System

Run-Time

 

ProgTimer

Timers

TMicroTimer

Time Alarm

 

RTimer

Registry Date Time




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте