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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2007, 18:24   #1
vitalij-cher
Пользователь
 
Регистрация: 13.06.2007
Сообщений: 12
Восклицание Подскажите по Delphi!

Вот процедура! Она записывает данные о открытие программы один раз в ini файл! как сделать чтобы записывалось каждое открытие программы (что бы если открыли её 10 раз так чтоб и было 10 записей а не одна)?
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var dir:string;
ConfigFile:TiniFile;
begin
dir:=GetCurrentDir;
ConfigFile:=TIniFile.Create(dir+'\C onfig.ini');
ConfigFile.WriteInteger('START','Co untStart',n+1);
ConfigFile.WriteString('START','Las tDate',DateToStr(Date));
ConfigFile.WriteString('START','Tim e',TimeToStr(Time));
ConfigFile.Free;
end;
vitalij-cher вне форума Ответить с цитированием
Старый 21.06.2007, 19:02   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Наверно нужно вначале прочитать из файла, сколько раз до этого уже запускалась программа:
N := ConfigFile.ReadInteger('START','Cou ntStart',0);
а уже потом записывать новое значение:
ConfigFile.WriteInteger('START','Co untStart',n+1);

И еще, в коде есть строка dir:=GetCurrentDir;
Если перед выходом из программы не контролировать текущий каталог, то файл может создаваться в совершенно разных местах и, соответственно, счетчик потеряет всякий смысл. Тогда уж лучше писать в тот каталог, где лежит программа:
dir := ExtractFileDir(Application.ExeName) ;
Jeni вне форума Ответить с цитированием
Старый 21.06.2007, 19:23   #3
vitalij-cher
Пользователь
 
Регистрация: 13.06.2007
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Jeni Посмотреть сообщение
Наверно нужно вначале прочитать из файла, сколько раз до этого уже запускалась программа:
N := ConfigFile.ReadInteger('START','Cou ntStart',0);
а уже потом записывать новое значение:
ConfigFile.WriteInteger('START','Co untStart',n+1);

И еще, в коде есть строка dir:=GetCurrentDir;
Если перед выходом из программы не контролировать текущий каталог, то файл может создаваться в совершенно разных местах и, соответственно, счетчик потеряет всякий смысл. Тогда уж лучше писать в тот каталог, где лежит программа:
dir := ExtractFileDir(Application.ExeName) ;
надо что бы выводились в файле все запуски программы(дата и время) а не переписывались!
vitalij-cher вне форума Ответить с цитированием
Старый 22.06.2007, 13:29   #4
vitalij-cher
Пользователь
 
Регистрация: 13.06.2007
Сообщений: 12
По умолчанию

Помогите плиззззззз!
vitalij-cher вне форума Ответить с цитированием
Старый 22.06.2007, 14:05   #5
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Заведи себе файл *.log, и побайтно или строками записывай туда все запуски. *.ini это фал конфигурации, зачем его засорять? А в инишку записывай только последние параметры(последняя дата, время отрытия программы).
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 22.06.2007, 14:25   #6
vitalij-cher
Пользователь
 
Регистрация: 13.06.2007
Сообщений: 12
По умолчанию

все всем спасибо сделал!
vitalij-cher вне форума Ответить с цитированием
Старый 22.06.2007, 14:29   #7
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Утебя данные пишутся в одни и те же ключи.
Чтобы данные писались в разные строки нужно назначать новые имена ключей наподабии такого:
запуск1:

ConfigFile.WriteString('START','Las tDate1',DateToSt r(Date));
ConfigFile.WriteString('START','Tim e1',TimeToStr(Ti me));

запуск2:

ConfigFile.WriteString('START','Las tDate2',DateToSt r(Date));
ConfigFile.WriteString('START','Tim e2',TimeToStr(Ti me));

...
и т.д.

Ну, а как программно менять имена ключей, надеюсь сообразишь сам
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 05.09.2007, 23:01   #8
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Лампочка Всё гениальное просто

допустим есть файл с расширением Ini (хотя кто как хочет может назвать, иногда это неважно. Т.к вам может хочется скрыть смысл файла, структура всё равно будет Ini`шная).
[START]
date1=12.12.1999
Time1=15:22:15

Способ(Шаги):
1) Заводишь переменную типа TStrings для счёта запусков и нумерации. Допустим Ls :TStrings;
Она потребуется для счёта записей в файле, путём загрузки имён всех секций:

Код:
 
    Ls.Clear;
 Ini.ReadSection('START', Ls);
2) Переменую типа Integer, для занесения колличества записей:
{ Делим на два, т.к. по две записи(Хотя в Ini файлах есть функции и процедуры для хранения и чтения дат и времени) }
Код:
Cou := Ls.Count div 2;
3) Пишешь в Ini файл:
Код:
 
Ini.WriteString( 'START', 'Date'+IntToStr(Cou), DateToStr(Date) );
Ini.WriteString( 'START', 'Time'+IntToStr(Cou), TimeToStr(Time) );
Вот так .

Последний раз редактировалось Alter; 05.09.2007 в 23:03. Причина: Забыл поставить один тэг CODE
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите где можно взять хорошую книгу по БД в Delphi 7 Diimka БД в Delphi 1 14.12.2007 01:33
Подскажите код Romuald Microsoft Office Excel 2 26.11.2007 13:53
Подскажите, как пользоваться Password Dialog в Delphi Grigoriy7 Помощь студентам 2 01.10.2007 09:19
Delphi(Stringgrid) подскажите zzzzz Помощь студентам 1 14.07.2007 11:51