powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамическая вставка DFM
25 сообщений из 26, страница 1 из 2
Динамическая вставка DFM
    #32083193
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All! Как динмически вставить из кода на Delphi кусочек DFM. Нажно что то типа-
type
tMyForm= class(Tform)
тут что-то своё родное...:-))
end;
const mydfm=
' object DBGrid1: TDBGrid
Align = alClient
DataSource = DataSource1
TabOrder = 0
end';

var
frm:TMyform;
begin
frm:= TMyform.Create(nil);
frm.LoadDfm(mydfm);//?????
С уважением Михаил
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083195
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем?
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083202
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пример вообще запутал.............
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083223
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже советовал здесь
Брать JVCL 2.0 в который включен RALIB.
Тама специальный компонентик есть, который загружет форму.
Можно в базе хранить формы

http://jvcl.sourceforge.net/
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083410
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон за путаницу! Короче - в Delphi каждая форма это новый unit. В крупном проекте крошечных окошек, отличающихся друг от друга пустяшным контролом, набирается огромное количество. Поэтому возникает идея - иметь одну форму (или вообще создавать её динамически), а нужные контролы подгружать из кусочкок DFM которые храняться в нужных константах. Проблема в том как?
С уважением Михаил
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083412
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Про наследование слыхал?
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083413
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну здесь можно и без загрузки всего DFM.
Зделай базовый класс- форму, а от него пронаследуй формы которые отличаются на один контрол
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083486
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причем тут вообще DFM ???????????

Он служит только для того, чтобы скомпилять dcu.
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083549
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще можно фреймы прикрутить ...
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083560
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2MBorovik
1. Сделай базовую форму-шаблон и включи ее в проект
Например

type
tMyForm= class(Tform)
тут что-то своё родное...:-))
end;

2. Дальше ты можешь включать динамически сколько угодно
экземпялров этой формы
f1=tMyForm.Create(self);

3. В случае необходимости можно динамически создавать
экземпляры компонент и помещать их на экземпляры форм
(с указанием parent)
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083602
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе можно и в коде писать
Код: plaintext
tMyForm= class(TSuperform) 

И на форму кидать новые контролы

2Tigra
Оказывается DFM может служить не только для компиляции
В RaLib мжно программно загружать формы из DFM - этакий интерпритатор форм и модулей. Смотреть можно здесь http://ralib.hotbox.ru/
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083613
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается DFM может служить не только для компиляции
В RaLib мжно программно загружать формы из DFM - этакий интерпритатор форм и модулей. Смотреть можно здесь http://ralib.hotbox.ru/


Это для интереса, когда начинаешь изучать программирование, Delphi - все можно и интересно, только не нужно оно
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083618
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как знать... Задачи бывают разные как и способы решения.
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083623
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё раз - в чем проблема. Некоторые думают что такой код работает
Type
TmyForm = class(Tform)
end;
var
MyForm:TmyForm;
begin
MyForm:= TmyForm.Create(self);
end;
Если его попробовать выполнить то появится сообщение об ошибке - "Ресурс не найден"!!! В Дельфи есть единственую форма, которую можно создавать динамически - это Tform. Использую функцию
ReadComponentFromTextStream( sInitDfm, Self, Self );
можно вставлять не визуальные элементы -
сonst
sInitdfm: string =
'object TDataSet ' +
'object OU_DEBCRED:TIntegerField ' + и так далее
Михаил
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083625
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to MBorovik
Ещё раз - в чем проблема. Некоторые думают что такой код работает
Type
TmyForm = class(Tform)
end;
var
MyForm:TmyForm;
begin
MyForm:= TmyForm.Create(self);
end;

Самое интересное, что такой код работает :)
Только при выполенение след условий
1. Класс TmyForm сформирован в отдельном dfm
2. dfm - включен в проект
3. Из вызываемой формы ресурс виден - есть uses

Тогда генери динамически форм столько, сколько хочешь:)
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083653
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда я уж и не пойму, чего нужно????????????????
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083685
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Формулировка проблемы - как динамически подключать DFM разработанные конечным пользователем ПОСЛЕ того как им отдали Ваш проект. Пользователь, как правило, хочет перенастроить форму ввода. Первый вариант - если бы мы ему могли предоставить нашу форму, он в Delphi потаскал бы элементы куда нужно, нажал кнопочку и получил то, что ему нужно без нашего участия. Второй вариант -написать простенькую программу которая сохраняет в DFM ( в текстовом формате) любое активное окно не проблема. Более того, там же легко дать возможность исправит названия кнопок, лейблов, закладок и так далее но "куды ложить" так что бы после нового открытия этого окна вся правка сохранилась?
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083690
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тут Dfm ни при чем

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

А вообще - странная задача. Может тогда юзер, если такой умный, и программы сам писать будет?
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083694
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2MBorovik

Если Вы хотите дать возможность изменять форму в Run-Time,
то могу предложить след схему

1. Определяете псевдоязык возможных изменений типа
- добавить визуальный компонент с именем
- расположить его в верхнем углу
- передать управление стандарнтому обработчику
и т.п.
2. Сделать tool-bar menu - в котором пользователь может
настраивать это все под себя (или, скажем, читать из
текстового файла или таблицы сервера)
3. Разработать соответсвующий универсальный интерпретатор
1.
4. Сделать соответствующий универсальный интерпретартор 2

Скомпилировать все это - и пошло...

Однако, такая работа требует очень серьезного опыта
и квалификации. На первых порах сложности 1-4 будут
существенно превышать прост модификацию проекта.
Но портенциально - при достаточном упорстве, знаниях
и спасобностях такой подход весьма перспективен ...
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083699
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, прочитал еще коментарий.
Эта задача существенно проще.
И вариантов "куды положить" море -
на взлет StartUp файл (типа ini),
Registry, текстовый файл, таблица сервера ....

И все прекрасно работает :)
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083755
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2MBorovik
Хм, ссылку на RaLib вроде давал, чем не устраивает?
Там и дизайнер форм и загрузчик dfm есть.
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083781
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про raLib - скачать скачал, но где дизайнер и прочее - там море, в котором утонуть не проблема
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083784
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такой код работает!!! Кнопка "Привет" появляется!!!
const
sInit:string=
'object _1 '+
'object TBitBtn'#13#10+
'Left = 180'#13#10+
'Top = 24'#13#10+
'Width = 75'#13#10+
'Height = 25'#13#10+
'Caption = ''Привет'''#13#10+
'TabOrder = 0'#13#10+
'OnClick = BitBtn1Click '+
'end'#13#10+
'end';
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ReadComponentFromTextStream( sInit, Self, Self );
end;
появляется кнопка. Процедура ReadComponentFromTextStream посроена на двух преобразованиях
ObjectTextToBinary( TextStream, BinaryStream );
Result := ReadComponentFromBinStream( BinaryStream, AOwner, Instance );
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083788
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
награда нашла героя :)
...
Рейтинг: 0 / 0
Динамическая вставка DFM
    #32083907
MBorovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последний пример работает (то есть добавляет элемент) если на форме уже есть такой же - можно добвать кнопку если есть кнопка и так далее.
Кто нибудь знает где документированы ReadComponent и прочее ???
>:-(((
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамическая вставка DFM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]