Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
6-69945
otari
2002-02-09 22:48
2002.04.22
Это очен интересно !!!


1-69904
ProNix
2002-04-09 16:00
2002.04.22
Преобразование мелких букв


4-70058
Alexeyk
2002-02-18 11:22
2002.04.22
Создание окна средствами WinAPI


14-69969
Hiks1
2002-03-13 07:15
2002.04.22
Alt+F4


7-70052
НЕО
2002-01-26 10:58
2002.04.22
LOGIN пользователя, работающего на машине в сети...