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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2008, 16:16   #11
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

SunKnight понял тебя спс за помощь и терпение).

Ммм а для Write/ReadComponent если я захочу редактировать свойства объекта то мне нужно будет опять этот обьект считать в строку... найти ее в тексте файла, затем удалить, применить изменения к обьекту и заново ReadComponent и записать это в файл так?

А теперь что же все-таки мне использовать ini файл или Write/ReadComponent для сохранения ну скажем 150 обьектов... а может и больше.
Airou вне форума Ответить с цитированием
Старый 02.05.2008, 16:22   #12
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Цитата:
А теперь что же все-таки мне использовать ini файл или Write/ReadComponent для сохранения ну скажем 150 обьектов... а может и больше.
необязательно, можна создать структуру для типизированного файла(по сути ИНИ таким является) и записывать в него до 2 GB данных.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 02.05.2008, 16:29   #13
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

А принцип применения изменений правильно я указал? А от ини я все-таки наверное отойду. Зачем не лишние ограничения,да и в принципе никакой-то структуры не нужно, строки будут одна под одной и все. Читаем строку восстанавливаем обьект. Разве что разные типы обьектов наверное стоит по разным файлам распихать.

Последний раз редактировалось Airou; 02.05.2008 в 16:32.
Airou вне форума Ответить с цитированием
Старый 05.05.2008, 21:21   #14
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Код:
var step,cnt:smallint;
    IniF: TIniFile;
    RPage: TTabSheet;
Код:
IniF:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Main.ini');
  cnt:=IniF.ReadInteger('CountOfPages','Count',0);
  If cnt > 0 then
   begin
    For step:=1 to cnt do
    begin
      RPage.Create(Self);                                                                                                         
      RPage.Caption:=IniF.ReadString('Page'+IntToStr(step),'Caption','123');
      RPage.TabVisible:=False;
      RPage.PageControl:=PageControl1;
    end;
  end;
Вылетает на 5ой строчкe(cnt=1)
На этой стадии ошибка
Access violation at address C289C389. Read of address C289C389.
Airou вне форума Ответить с цитированием
Старый 05.05.2008, 21:48   #15
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Цитата:
cnt:smallint;
лучше использовать Word, т.к. у вас все равно значение будет от 0 и выше.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 05.05.2008, 23:38   #16
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Ну ладно Word.
А почему ошибка вылетает? ... уже пробовал вместо cnt вставить любое число, все равно вылетает... в чем проблема?
Airou вне форума Ответить с цитированием
Старый 06.05.2008, 07:52   #17
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
RPage.Create(Self);
где такое видано ? Надо делать так
Код:
ПЕРЕМЕННАЯ := КЛАСС.Create[(...)];
BOBAH13 вне форума Ответить с цитированием
Старый 06.05.2008, 11:51   #18
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
где такое видано ? Надо делать так
Код:
ПЕРЕМЕННАЯ := КЛАСС.Create[(...)];

Я кстати сначала так и сделал... а потом почему-то переделал. Спс.
Airou вне форума Ответить с цитированием
Старый 06.05.2008, 23:36   #19
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Так вообщем у меня программа восстанавливает компоненты из ini файла.
Восстанавливаю обьекты так.

Код:
IniF:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'BRE.ini');
  cnt:=IniF.ReadInteger('CountOfRE','Count',0);
   If cnt>0 then
   begin
    For step:=1 to cnt do
    begin
       RRE:=TRichEdit.Create(IniF.ReadString('RE'+step,'OwnerAndParent','PageControl1');
       With RRE do
       begin
         Name:='RichEdit'+step;
         Height:=IniF.ReadInteger('RE'+step,'Height',50);
         ...
         ReadOnly:=True;
       end;
    end;
   end;
Если хочу редактировать свойства то делаю следующим образом. Открываеться новая форма где мы вводим нужные значения и записываем их в ини файл.
Код:
   IniF:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'BRE.ini');
   cnt:=IniF.ReadInteger('CountOfRE','Count',0);
    For step:=1 to cnt do
    begin
      If (Sender as TRichEdit).Name=('RichEdit'+step) then
      begin
       // далее тут записываем отредактированные свойства
      end;
    end;
Так вот возникла проблема с удалением обьекта. Удаляем обьект - удаляем записи в ини файле. Удалили записи например 5го обьекта получаем что обьектов у нас 10, а имя 10го обьекта - RichEdit11. Хм тогда надо при удалении записей сдвигать их на единицу назад(дабы не было пробелов в переборе step).Получается нужно перебрать все секции после секции удаленного компонента и работать с сними на подобии 'секция'+step:='секция'+step-1 (кстати можно ли переписывать сразу всю секцию, а не отдельно по ключам? Просто в хелпе нашел только ReadSection а WriteSection там нету.). Но если я сдвину записи, тогда придеться сдвигать и ориентир (name RichEdit'ов). И в итоге получается достаточно громоздко. Может кто знает как оптимальнее это сделать.

ЗЫ Извините что много буков).
Airou вне форума Ответить с цитированием
Старый 07.05.2008, 18:21   #20
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Хелп плиз.
Еще раз повторюсь - как переписывать сразу целую секцию.
Airou вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы NeiL Win Api 3 24.07.2008 17:02
Файлы. BR@BUS Помощь студентам 5 09.04.2008 19:35
Файлы madmot Операционные системы общие вопросы 3 06.02.2008 12:10
INI файлы aesoem Общие вопросы Delphi 3 24.12.2007 21:22
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53