Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.06.2008, 14:51
sid401 sid401 вне форума
Прохожий
 
Регистрация: 14.06.2008
Сообщения: 6
Репутация: 10
По умолчанию Создание элементов на форме созданной в run-time

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

Такой вот вопрос.
Есть функция, внутри нее создается форма строчкой

AskForm:=TForm.Create(nil);

Теперь нужно на этой AskForm создать пару элементов, например типа TLabel или TButton.

Заранее спасибо за ответ.
Ответить с цитированием
  #2  
Старый 17.06.2008, 15:00
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Код:
var
AskButton:TButton;
begin
AskButton:=TButton.Create(AskForm);
AskButton.Parent:=AskButton;
AskButton.Caption:='Кнопка';
{далее идёт присвоение таких свойств как Left, Top, Height, Width и любое другое на твоё усмотрение}
__________________

Ответить с цитированием
  #3  
Старый 17.06.2008, 15:39
sid401 sid401 вне форума
Прохожий
 
Регистрация: 14.06.2008
Сообщения: 6
Репутация: 10
По умолчанию

Большое спасибо.

Только наверное вместо:
AskButton.Parent:=AskButton;

Нужно
AskButton.Parent:=AskForm;
Ответить с цитированием
  #4  
Старый 17.06.2008, 15:55
sid401 sid401 вне форума
Прохожий
 
Регистрация: 14.06.2008
Сообщения: 6
Репутация: 10
По умолчанию

Теперь не могу допереть как обрабатывать события по нажатию этой кнопки. Т.е. в обычном случае то понятно - двойной клик на Event - OnClick и процедура новая появляется. Здесь эту процедуру нужно как-то самому писать?



Да, кстати после того как выполнение этой функции закончиться, все элементы на ней и сама форма прекращают свое существование?
Ответить с цитированием
  #5  
Старый 17.06.2008, 16:54
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Цитата:
Сообщение от sid401
Теперь не могу допереть как обрабатывать события по нажатию этой кнопки. Т.е. в обычном случае то понятно - двойной клик на Event - OnClick и процедура новая появляется. Здесь эту процедуру нужно как-то самому писать?

В объявлении класса AskForm надо записать:
Код:
procedure DoButtonClick(Sender: TObject);
Наименование процедуры не имеет значения.
В секции implementation реализацию этой процедуры:
Код:
procedure AskForm.DoButtonClick(Sender: TObject);
begin
///
end;
В функции после создания кнопки, ее событию присвоить имя процедуры:
Код:
  ...
  AskButton.OnClick := DoButtonClick;
  ...
Цитата:
Сообщение от sid401
Да, кстати после того как выполнение этой функции закончиться, все элементы на ней и сама форма прекращают свое существование?
Нет, не прекращают. Надо явно пристрелить созданную форму:
Код:
AskForm.Free;
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #6  
Старый 18.06.2008, 10:40
sid401 sid401 вне форума
Прохожий
 
Регистрация: 14.06.2008
Сообщения: 6
Репутация: 10
По умолчанию

У меня форма объявляется так, внутри функции:

function AskYesNoRus(txt2: String):boolean;
var AskForm:TForm;
....

Не совсем понимаю что значит "В объявлении класса AskForm надо записать"

сорри за глупые вопросы
Ответить с цитированием
  #7  
Старый 18.06.2008, 11:05
sid401 sid401 вне форума
Прохожий
 
Регистрация: 14.06.2008
Сообщения: 6
Репутация: 10
По умолчанию

А, все, сорри, разобрался, сделал по примеру уже существующей формы Form1.

Спасибо.
Ответить с цитированием
  #8  
Старый 18.06.2008, 11:12
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Подобного (локального) объявления переменной типа TForm мало чтобы с этой формой можно было полноценно работать.
Надо создавать модуль с объявлением собственного класса, наследника от формы. Ну, что поделаешь, если хочется обрабатывать еще и события от компонентов на этой форме, в таких случаях по другому не получится.
Собственно, все такие временные "формочки" для запросов, оповещений и пр. нужд делаются одним и тем же способом: создается модуль через
File > New > Forrm (или кнопкой "New form", которая находится в палитре инструментов) и уже в этом модуле делается все чего надо для конкретных целей.
Из главной же формы (или других рабочих форм) эти "формочки" только создаются, вызываются и уничтожаются после того как становятся не нужными.

К тому же, при создании таких форм в run-time нужно прописать окаянное количество свойств как самой формы, так и ее компонентов. Зачем горбатиться, если можно не прописывать большое количество строк кода для этого, а просто задать значения этих свойств в design-time.
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 18.06.2008 в 11:19.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025