Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 21:29   #1
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию сохранение компонентов формы

Доброго вечера!
Создаю динамически объекты image на форме, могу перемещать их и т.д.
Эти компоненты (каждый из них) имеют индивидуальные свойства: left,top,width,height,tag и т.д.
Далее делаю сохранение компонентов формы в файл, типа Stream.writecomponent, аналогично делаю чтение- в результате все читается ОК,..... НО: если открыть из винды блокнотом файл, куда все сохранилось- то вижу кучу ерунды мегабайт эдак на 5, а я хочу увидеть значения нужных мне свойств(.
Теперь вопрос:
Подскажите пожалуйста, можно ли (и если да, то как) сохранять те свойства компонента, которые мне нужны? и чтобы через блокнот была нормально видна вся инфа?
varelik вне форума Ответить с цитированием
Старый 26.08.2009, 21:38   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

IniFiles + пишите нужные вам свой-ва практически ответ в вашем же вопросе. Как работать с ini файлами ? Как прочитать/записать свой-во компонента ? Все в сети и на форуме ясно изложено много раз.
BOBAH13 вне форума Ответить с цитированием
Старый 26.08.2009, 22:25   #3
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

BOBAH13, сделал через ини,
на скорую руку особо не думая набил:
Код:
IniFile:=TIniFile.Create('project.ini');
with timage1(new) do with IniFile do begin
Height  := writeInteger('timage1(new)','timage1(new).Height',timage1(new).Height);
//на последней строке ошибку выдает - несовпадение типов

что не так делаю?

сорри, разобрался)

Вот только как мне сохранить НЕСКОЛЬКО динамически созданных image, различающихся только своим положением (left,top) на форме в ини-файл?

Последний раз редактировалось mihali4; 15.12.2009 в 13:59.
varelik вне форума Ответить с цитированием
Старый 27.08.2009, 12:14   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

У контролов VCL есть свой-ва Controls и ControlsCount ( вроде так, по памяти пишу ). Значит, вы их в цикле перебираите, а в ini пишите по следующим правилам.

1. Объявляите переменную типа intgerer - инкремент для формирования имен секций. Прированять к нулю (ну правильно так, а так как хотите).
2. В цикле перебираем контролы и можно сделать проверку if (Controls[i] is TImage) then если тру, тогда увеличиваем наш инкремент и название новой секции для текущего TImage будет типа MySectionName := Format('Image%d', [i{инкремент}]);
3. Как только получили название новой секции для текущего TImage пишем в эту секцию Left, Top, Width, Height и т.п. и так далее для каждого контрола.

Загрузка аналогична, есть возможность открыть ини файл, и прочитать все содержащиеся в нем секции, таким образом вы получите TStrings в котором все наименовая секций, значит вы сможете перебрать и прочитать все секции и данные для каждого TImage
BOBAH13 вне форума Ответить с цитированием
Старый 27.08.2009, 13:06   #5
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

BOBAH13,
чтото не то, не подскажешь, где я ошибся?:
Код:
var i:integer; section:string;
-----
for i:=0 to panel1.controlcount-1 do
if panel1.controls[i].classname='timage' then
i:=i+1;
section:=format('image%d',[i]);
inifile.writeinteger('timage',section,panel1.controls[i].left);
У нас принято оформлять код специальным тэгом - кнопочка "#".
Модератор

Последний раз редактировалось mihali4; 15.12.2009 в 14:00.
varelik вне форума Ответить с цитированием
Старый 27.08.2009, 13:44   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
for i:= 0 to Panel1.ControlCount - 1 do
begin
  if (Panel1.Controls[i] is TImage) then
  begin
    Inc(i);
    Section := Format('Image%d', [i]);
    IniFile.WriteInteger(Section, 'Left', Panel1.Conrols[i].Left);
   end;
end;
Edit:
Ну я образно написал, не думаю... как и писал раньше i то для перечисления контролов, вместе где Section := там вы используите не i, а свой инкремент какой-либо.
На счет Format('Image%d') ну собственно да, не имеет значения, просто для нормального вида
Цитата:
Image1
Image2
Image3
...

Последний раз редактировалось BOBAH13; 27.08.2009 в 14:17.
BOBAH13 вне форума Ответить с цитированием
Старый 27.08.2009, 14:06   #7
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

боле- менее понятно, вот только на строке inc(i)- ошибка: assigment to forloop variable 'i'-(это типа i нельзя в цикле менять?).
и еще- 'Image%d'- здесь в ковычках что угодно пишется, или есть какойто смысл?

сенкс, с сохранением разобрался

Последний раз редактировалось mihali4; 15.12.2009 в 14:00.
varelik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конфликт файла записей и компонентов формы Deathwatcher Общие вопросы Delphi 9 14.11.2008 13:03
Настройка формы и компонентов В_И_К_Т_О_Р Помощь студентам 2 05.02.2008 20:52
Печать компонентов формы monushka Помощь студентам 6 07.11.2007 19:30
Сохранение имен компонентов в текстовом файле!!! LETA Помощь студентам 2 17.06.2007 15:05
обновление компонентов формы fuv Общие вопросы Delphi 2 19.05.2007 16:51