Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];

Вниз

Как сохранить Форму в файл и затем в работающем проекте восст....   Найти похожие ветки 

 
IgorRu   (2003-07-26 21:37) [0]

Задачка :
Есть проект с множеством форм (конечным). Хотелось бы сохранить act эти формы в виде файлов ?????.dat. Затем создать новый проект, который ничего об этих формах не знает, кроме названий файлов ?????.dat, но может их из этих самых файлов создавать и показывать.
Для чего:
Слишком много пользователей работает с этой прогой, к тому же они разбросаны по городу и несколько по РФ. В случае изменений в отдельно взятой форме достаточно было бы разослать определенный ?????.dat
Бъюсь уже неделю. Не получается.... Hellllp


 
dim-   (2003-07-27 01:10) [1]

а не проще посмотреть в сторону dll


 
XenonXX   (2003-07-28 04:48) [2]

Сохрани инфу про все компоненты, а потом восстанавливай.
типа

for i:=0 to Form1.ComponentCount do
.....

Знаю, гемороя мноого-го, но больше ничего в голову не приходит.


 
Rouse_   (2003-07-28 04:52) [3]

Так есть же системы контроля версий...
И они довольно распространены.

Желаю успехов


 
Zergling   (2003-07-28 06:02) [4]

Поопрбуй это. Правда у меня это было для TPageControl, но думаю работать будет.

// Сохранение проекта
Procedure SaveProject(AFileName: TFileName);
var
FS: TFileStream;
begin
FS:=TFileStream.Create(AFileName, fmCreate or fmShareDenyRead);
try
FS.WriteComponent(Form1);
finally
FS.Free;
end;
End;

// Чтение проекта
Procedure LoadProject(AFileName:TFileName);
var
FS: TFileStream;
begin
FS:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyRead);
try
Form1 := TForm1(FS.ReadComponent(Form1));
finally
FS.Free;
end;
End;


 
___Nikolay   (2003-07-28 06:08) [5]

Так можно сохранить всю форму в файл:


constructor TForm1.Create(AOwner: TComponent); // override;
var
fname: string;
begin
{ Для динамически создаваемых контролов, может требоваться
RegisterClasses(..); }
fname := FormFilename;
if FileExists( fname ) then
begin
CreateNew(AOwner);
ReadComponentResFile(fname, Self);
end
else
inherited Create( AOwner );
end;

procedure TForm1.FormCloseQuery( Sender: TObject;
var CanClose: Boolean);
begin
WriteComponentResFile(FormFileName, Self);
end;


 
IgorRu   (2003-07-28 10:08) [6]

Все это не помогает. Может есть возможность из Формы &&&.bpl создать? Как?


 
mike-d   (2003-07-28 10:23) [7]

еще раз - dim- © (27.07.03 01:10)
самый выгодный вариант...


 
IgorRu   (2003-07-28 10:31) [8]

Это про DLL , а сколько весит одна DLL как минимум 50K умножить на 200 юзверей получаем 10М. Система обмена информацией не выдержит.


 
MalkoLinge   (2003-07-28 10:49) [9]

Там тебе хороший кусок кода для записи компонента (а форма тоже компонент) в поток. Это, ИМХО то, что тебе надо :)


 
Armen   (2003-07-28 11:12) [10]

см Zergling.

Только не забудь регистрировать все компоненты, которые использует форма.

RegisterClasses?


 
IgorRu   (2003-07-28 11:14) [11]

Какой кусок кода, это типа WriteComponentResFile(FormFileName, Self);. Я так понял это, что то типа DFM файла создает, мне же надо все вместе с кодом сбытий, рабочая форма, а не картинка.


 
Плохиш   (2003-07-28 11:18) [12]

мне же надо все вместе с кодом сбытий
Волшебные слова, тогда только >dim- © (27.07.03 01:10)


 
Armen   (2003-07-28 11:46) [13]

А событие и есть published property, так что оно будет в dfm-е.
Delphi так и хранит проект.
Ты не бойся, попробуй, и увидишь что с событиями все в порядке.


 
Armen   (2003-07-28 11:57) [14]

Можно еще использовать TWriter.WriteRootComponent, TReader.ReadRootComponent и писать не только Published Properties, но и что угодно.


 
Smithson   (2003-07-28 12:00) [15]

Товарищи! Код событий не сохраняется в DFM, только ссылка на процедуру (по имени).
Если тебе надо не только внешний вид формы менять, но и поведение - только и исключительно dll (ну или извращенный вариант - пакеты).


 
Armen   (2003-07-28 12:14) [16]

>Smithson © (28.07.03 12:00)
Естественно Код событий не сохраняется в DFM, но он же существует в самай программе, и нужно только ссылка? А если надо менять и это, то никакой dll, bpl не помогут, надо будет или свой интерпретатор (таких полно, когда то я работал с TatScriptCompiler, компилирует в P код, вполне пригодный), или компилятор.


 
IgorRu   (2003-07-28 12:43) [17]

Надо что бы форма Main умела и генерить форму по вызову из Меню

procedure TFmMain.WM_OpenList(var Msg: TMessage);
begin
with TFmList.Create(Self) do begin
Show;
end;
end;

Это работает а вот TFmList умела только

constructor TFmList.Create( aOwner: TComponent);
begin
CreateNew( aOwner );
ReadComponentResFile("FmList.dat", Self);
end;

Или что то подобное. В данной контрукции есть проблема, если прни компиляции TFmList какие либо компоненты не будут указаны (присутствующие в FmList.dat) возникает ошибка и уж темболее при компиляции должны быть описаны все процедуры и события. Хотелось бы иметь пустой TFmList при компиляции, а всю информацию брать из FmList.dat.
Есть идей как это сделать так чтобы FmList.dat или dll или bpl имел размер до 10K да еще умел взаимодействовать с другими элементами проекта, например DataModule.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
7-33378
BJValentine
2003-05-28 10:52
2003.08.11
Tray+Reboot


9-33038
Rotate3f
2003-02-11 11:05
2003.08.11
Динамические лайтмапы


3-33050
Z_man7777
2003-07-17 19:40
2003.08.11
Типы полей в InterBase6.0 FireBird


3-33070
M126
2003-07-18 08:41
2003.08.11
Копирование из одной базы в другую


9-33039
Кен
2003-02-07 02:37
2003.08.11
GLScene Как сделать реальную воду ? Типа океан. Чтобы было правдо





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский