Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Gorezcaid
15 / 15 / 0
Регистрация: 09.08.2010
Сообщений: 90
#1

Динамическое создание формы - Delphi

10.02.2013, 17:57. Просмотров 1667. Ответов 5
Метки нет (Все метки)

Всем привет, есть малый вопрос насчет передачи параметров.Пишу уже свои функции.
Сейчас пишу функции для работы с несколькими формами. Кратко о проблеме, по порядку:

1) Создал ещё одну форму Unit1 in 'StartUnit\Unit1.pas' {Form1}
2) Отключил её авто создание в Project - Options (для меня так требуется)
3) Как должно выглядеть без функции:
Delphi
1
2
3
4
5
procedure TForm1.Button1Click(Sender: TObject);
begin
   if(not Assigned(Form1))then//Если форма не существует,
   Form1:=TForm1.Create(Application);//Создать её
end;
4) Пытался написать функцию по выделению памяти для формы
Delphi
1
2
3
4
5
6
7
8
9
10
function fTest(pForm:TForm1):TForm1;
begin
   if(not Assigned(pForm))then//Если форма не существует,
   pForm:=TForm1.Create(Application);//Создать её
   Result:=pForm;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   Form1:=fTest(Form1);
end;
5) Теперь в чем проблема
Как видно эта функция может создавать форму только для Form1, созданный с типом TForm1.
Как переписать функцию, чтобы можно было по переданному параметру pForm создавать формы для любого типа данных. Все формы происходят от одного типа TForm, но всё равно не получается это реализовать, выдает ошибку
[Error] MainUnit.pas(78): Incompatible types: 'TForm1' and 'TForm'

PS: В 4-м пункте "рабочий" пример, TForm1 нужно как-то передать через TForm.
Это только пример, структура проекта - сложнее.

Заранее спасибо.

Добавлено через 7 минут
Можно ещё проще, как из формы Form1 получить указатель на её класс TForm1
???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2013, 17:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическое создание формы (Delphi):

Динамическое создание формы - Delphi
Всем привет. Возникла проблема при динамическом создании новой формы: На Form1 есть кнопка при нажатии которой создается Form2. Так же...

Динамическое создание формы - Delphi
вот например мне надо динамически создать новою TForm1 и обязательно присвоить событию oncreate другое,так как в основном есть открывание...

Динамическое создание формы - Delphi
Добрый день. Подскажите пожалуйста, можно-ли в Delphi динамически создавать форму, естественно с компонентами. И кто у формы родитель?

Динамическое создание формы и компонентов - Delphi
Подскажите как динамически создать форму с Edit и Button и при нажатии на кнопку получить значение Edit.

Динамическое создание формы и компонентов - Delphi
Всем доброго времени суток. Вопрос про динамическое создание форм очень много раз обсуждался, но в том контексте который нужен мне, я...

Динамическое создание формы + проверка при создании - Delphi
Здравствуйте. Есть форма, которая создается динамически. mot := TmotionInOut.Create(Application); Создает без проблем. После данного...

5
FIL
Модератор
3407 / 2545 / 490
Регистрация: 19.09.2012
Сообщений: 7,905
10.02.2013, 18:06 #2
Ты можешь четко вопрос сформулировать? А то текста много, и не понятно нифига.
Надо создать несколько одинаковых форм (таких, как Форм1) или что?
0
Gorezcaid
15 / 15 / 0
Регистрация: 09.08.2010
Сообщений: 90
10.02.2013, 18:09  [ТС] #3
Сейчас почитал, мне нужно "Имя класса объекта"
0
FIL
Модератор
3407 / 2545 / 490
Регистрация: 19.09.2012
Сообщений: 7,905
10.02.2013, 18:13 #4
Delphi
1
Form1.ClassName
1
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25521 / 17074 / 5411
Регистрация: 22.10.2011
Сообщений: 30,229
Записей в блоге: 6
10.02.2013, 18:15 #5
У объекта есть свойство ClassName, только это тебе не поможет, если объект не был создан (при попытке обратиться к этому свойству несозданного объекта программа просто вылетит и всё). Теперь что тебе надо?

Почему не создавать экземпляр по имени класса? GetClass никто не отменял... Передавай в свою функцию именно имя класса как строку, и создавай любые формы.
1
Gorezcaid
15 / 15 / 0
Регистрация: 09.08.2010
Сообщений: 90
10.02.2013, 19:03  [ТС] #6
Да, это, но с внешними формами не работает.

//Главная форма - нормально
ShowMessage(MainForm.ClassName);//Форма MainForm имеет класс TMainForm

//Подключенная форма
ShowMessage(Form1.ClassName);//выдает ошибку "Acces violation"

Добавлено через 4 минуты
А простой пример с GetClass() можете привести?

Добавлено через 42 минуты
Нашел тему в интернете "Открыть форму зная ее название"
В Unit1:
Delphi
1
2
3
4
5
6
...
implementation
 
initialization RegisterClasses([TForm1]);
{$R *.dfm}
...
На кнопку для создания формы
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
Form : TForm;
FrmClass : TClass;
s : string;
begin
s:='TForm1'; //вот тут вытягиваешь имя формы из массива
FrmClass:=GetClass(s); //по имени ищем класс
Form:=nil;
if (FrmClass<>nil) and FrmClass.InheritsFrom(TForm) then
Form:=TFormClass(FrmClass).Create(nil);// и создаем обьект
 
if Form=nil then //обрабатываем возможные ошибки
begin
MessageDlg('Нет формы с таким именем', mtError, [mbOk], 0);
Exit;
end;
Form.Show;
end;
Регистрация класса - обязательна.
Осталось только переработать этот хлам, всем спасибо.
0
10.02.2013, 19:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 19:03
Привет! Вот еще темы с ответами:

Динамическое создание формы, по нажатию в области которой создается кнопка - Delphi
Ребят, я тут запутался немного. Посмотрите код, пожалуйста. Мне нужно написать приложение, где на форме есть кнопка «создать форму»,...

динамическое удаление формы - Delphi
Здравствуйте! В интернете нашел пример как динамически создать форму procedure TForm1.Button1Click(Sender: TObject); var...

Динамическое добавление и удаление компонентов с формы - Delphi
Нужно написать программу, в рабочую область которой можно было бы помещать графические примитивы и работать с ними. Я решил использовать в...

Динамическое создание ChartLineSeries - Delphi
Есть некоторые точки, которые должна быть соединены линиями, при добавлении в ChartLineSeries, они добавляются к одной линии, а нужно много...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru