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

Вниз

save/load to/from file   Найти похожие ветки 

 
Nikit   (2002-04-08 12:58) [0]

В форме находятся комбобоксы со значениями и созданные run-time
объекты (панели с дочерними Timage). В процессе работы панели
перемещаются пользователем по форме (drag-n-drop). Все прекрасно
работает - осталось последнее - SAVE/Load to File все properties всех
объектов формы (включая дочерние) чтобы при открытии файла все объекты
встали на места и приняли значения на момент последнего сохранения
файла. Надеюсь что не очень путанно объяснил. Очень буду блгодарен за
подробный пример. Спасибо.
Никит@


 
Song   (2002-04-08 13:04) [1]

Вам нужно просто запомнить значения Left и Top панелей в реестре или в файле. Проблема-то в чём, в невозможности реализации сохранения?


 
Nikit   (2002-04-09 14:10) [2]

все верно - вся проблема только в том,что я начинающий:)
Я сохраняю в реестре все значения - и когда считываю - то объектов, для которыx сохранены параметры, нет на форме ( они были созданы Run-time).
Поэтому наверняка (я так думаю) должен быть способ сохранения формы со всеми компонентами на определенный момент времени и при считывании из файла - создание формы с нуля.
Ну как бы - текст самой формы записывается в файл в бинарном или другом виде (только не текстовом а то юзеры будут там шариться)
и при считывании форма образуется просто из этого текста. Вот так бы было идеально.
Спасибо за ответ.
Никит@


 
Song   (2002-04-09 14:21) [3]

Просто надо сначала создать объекты, а потом считывать значения их положения. И они все переустановятся в нужные позиции.


 
Nikit   (2002-04-09 15:02) [4]

Спасибо Song ©
а попроще никак?
для меня это сложно (либо исходник какой-нибудь - если можно - покажите - так я разберусь)
Пока так и делаю - создаю и пытаюсь поставить на нужную позицию
нифига не получается и непонятно где ошибка -
потому и прошу помочь - бъюсь уже неделю
Никит@


 
Song   (2002-04-09 15:38) [5]

Пока так и делаю - создаю и пытаюсь поставить на нужную позицию
нифига не получается и непонятно где ошибка -
потому и прошу помочь - бъюсь уже неделю

Без кода ничего не получится. Приведите того место где Вы ставите, а он не ставится.

а попроще никак?
Я не думаю, что это сложно.
Решение 1. Реестр
Делаете в ключе Software ключ с названием своей программы, в нём ключ, например Settings, а в нём, ключи последовательно всех меток, восстановить положение которых Вам нужно. А в него уже добавляете два подключа: Left и Top. Для них записываете нужные позиции. При чтении эти же позиции загоняете в соответствующие свойства.

Решение 2. TIniFile
Здесь тоже самое, но только в файл *.ini такие же секции. Извини, я не перевариваю этот класс, поэтому разбирайтесь сами.

Решение 3. Нетипизированный файл.
Храните все данные в таком файле.
Задаёте Record, например

Type Settings=Record
Panel1Left,Panel1Top
....
PanelNLeft,PanelNTop:ShortInt;
End;

Procedure SaveSettings;
Var ff:File of Settings;
R:Setings;
Begin
// Здесь присваиваете переменной R все положения панелей/
AssignFile("имя_файла");
ReWrite(ff);
Write(ff,R)
CloseFile(ff);
End;

Procedure ReadSettings;
Var ff:File of Settings;
R:Setings;
Begin
{$I-}
AssignFile("имя_файла");
Reset(ff);
IF IOresult<>0 then Exit; //к примеру
Read(ff,R)
CloseFile(ff);
// Здесь читаете все значения позиций из переменной R
{$I+}
End;


 
Nikit   (2002-04-09 15:56) [6]

вот за это большое спасибо
буду делать по третьему варианту
так как количество меток всегда разное и первый вариантр не подходит
с ini - тоже как-то громоздко ( объектов около 80-100 штук) - для каждого писать позицию простым текстом... как-то это...
СПАСИБО - СЕЛ делать
Никит@


 
Song   (2002-04-09 15:59) [7]

Кстати, по-моему т.к. "так как количество меток всегда разное" не подходит как раз третий вариант, а первый-то самый подходящий...


 
Nikit   (2002-04-09 16:05) [8]

так-так-так:(
>>а в нём, ключи последовательно всех меток, восстановить положение которых Вам нужно...
1. Количество меток всегда разное - какое количество ключей нужно сделать для меток?
2. Как работать с реестром в смысле сохранить/загрузить - направьте пожалуйста (адрес или место хэлпа или название компонента или программной конструкции)
спасибо
Никит@


 
Song   (2002-04-09 16:14) [9]

Создавая метки в run-time, сохраняйте ссылки памяти на них в массиве статическом или динамическом, например:

Var arr: array [1..100] of TPanel;

n:=1;
Arr[n]:=TPanel.Create(nil);
...

а потом записывайте ключи по кол-ву n или High(Arr)+1

А лучше всего динамический массив
Var arr: array of TPanel;


 
Song   (2002-04-09 16:16) [10]

А по поводу 2, см. TRegistry


 
Nikit   (2002-04-09 16:18) [11]

ok - спасибо - сел разбираться
Никит@


 
Nikit   (2002-04-10 18:17) [12]

и все-таки - возвращаясь к раннему
что-то не так в коде...




//сохраняем форму в текстовый файл
procedure TForm1.SaveFile(Component: TComponent; const FileName: string);
var
ms: TMemoryStream;
fs: TFileStream;
begin
fs := TFileStream.Create(FileName, fmCreate or fmOpenWrite);
ms := TMemoryStream.Create;
try
ms.WriteComponent(Form1);
ms.position := 0;
ObjectBinaryToText(ms, fs);
finally
ms.Free;
fs.free;
end;
end;

??????????????? Объектов, созданных run-time - в файле - нет
почему?????
Ведь...Parent у них - Form1

...
//так были созданы run-time панели класса TMyPanel дочернего TPanel
...
smPan:=TMyPanel.Create(Panel3);
smPan.Top:=53+i*(625 div (s-1));
smPan.Parent:=Form1;
...




procedure TForm1.LoadFile(Component: TComponent; const FileName: string);
var
ms: TMemoryStream;
fs: TFileStream;
begin
ms := TMemoryStream.Create;
fs := TFileStream.Create(FileName, fmOpenRead);
try
DelComponents(Form1);//free все компоненты формы
{осовбождаем форму от компонентов чтобы не получилось что объект с таким же именем уже существует}
ObjectTextToBinary(fs, ms);
ms.position := 0;
ms.ReadComponent(Form1);
finally
ms.Free;
fs.free;
end;
end;
здесь все нормально и со свойствами и с объектами.

Поясните коли несложно для Вас,

Спасибо
Никит@





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

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

Наверх





Память: 0.48 MB
Время: 0.007 c
14-70031
Sergey_
2002-03-13 13:39
2002.04.22
печать под досом на hp-1100


1-69843
snoup
2002-04-10 19:56
2002.04.22
Как сделать TButton например круглым и красным?


1-69928
Dimaiv
2002-04-09 20:39
2002.04.22
Что делает процедура ProcessFile


1-69876
zombi
2002-04-08 11:39
2002.04.22
Сохранение текста из richedit в .txt


14-69990
Gaynew
2002-03-12 22:55
2002.04.22
Минимальные системные требования Delphi5!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский