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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2012, 21:56   #11
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
Счастье

Цитата:
Сообщение от astecenko Посмотреть сообщение
проблема в отсутствии тех самых "прямых рук" про ктороые Вы в подписи пишите. Для работы с ini-файлами в Delphi есть 2 класса TIniFile и TMemIniFile - вот их и используйте.
Написали бы какие ошибки у Вас возникали при использвании этих классов - проблема бы быстрее решилась.
Не хотите классы для работы с ini используйте TStringList.
Ваще-то при компиляции проблем нет, но вот при использование программы есть. Вот когда нет этих файлов, то у меня и всё проходит удачно, а если есть то настройки сбиты. Этот баг как раз надо и решить.
Ну а прямые руки есть. Например, у меня были проблемы с сохранением и загрузкой других данных, типо данные сохранялись не туда. И ошибка вылетала. Решил введя полный путь к файлу(кстати в деректории) и всё робит на ура. Кстати это всё по теме. Сейчас потею над этим. И тут тоже дву настройки тех же трекбаров сохранятся нормально(Volume.ini и Atribute.ini), а остальные сбиваются. Трек-бары на pagecontrol ставятся в максимально положение, а форма в нулевое. Где ошибка? Незнаю, но код правильный, просто правильно робить не хочет.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 24.09.2012, 00:31   #12
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Вы точки останова ставили все-таки?
Delphi_ProGer вне форума Ответить с цитированием
Старый 24.09.2012, 12:02   #13
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Delphi_ProGer Посмотреть сообщение
Вы точки останова ставили все-таки?
какие-ещё точки? В коде всё написано.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 24.09.2012, 12:07   #14
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Delphi_ProGer Посмотреть сообщение
Вы точки останова ставили все-таки?
Цитата:
какие-ещё точки? В коде всё написано.
В мемориз, однозначно!!!

Цитата:
Сообщение от hacker_007 Посмотреть сообщение
Ну как можно не уметь работать с TIniFile???? КАК? там же три строки всего для чтения и записи......
Добавлю: КАК нужно было написать эти три строки, чтоб получить сбой инициализации потока?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Stilet; 24.09.2012 в 15:38.
Sciv вне форума Ответить с цитированием
Старый 24.09.2012, 15:40   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
КАК нужно было написать эти три строки,
Легко. Например так:
Код:
var ini:TIniFile;
...
 ini.Create;
...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2012, 20:27   #16
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

попробую трекбары вынести на форму из pagecontrol

блин не удалось решить эту проблему. Всё равно то же.

попробовал всё исправить. Получилось вот так:
Код:
procedure TForm1.OpenSet(Dir: String);
var
D, E, s, t, i: integer;
begin
if FileExists(ExtractFilePath(Application.ExeName) + Dir + 'Volume.ini') then
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'Volume.ini');
Reset(f1);
read(f1, D);
trackbar1.Position:=D;
CloseFile(f1);
end
else
trackbar1.Position:=50;

if FileExists(ExtractFilePath(Application.ExeName) + Dir + 'Atribute.ini') then
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'Atribute.ini');
Reset(f1);
read(f1, E);
trackbar2.Position:=E;
CloseFile(f1);
end
else
trackbar2.Position:=50;

if FileExists(ExtractFilePath(Application.ExeName) + Dir + 'FormLeft.ini') then
begin
AssignFile(f1,ExtractFilePath(Application.ExeName) + Dir + 'FormLeft.ini');
Reset(f1);
read(f1, s);
Form1.Left:=s;
CloseFile(f1);
end
else
Form1.Left:=184;

if FileExists(ExtractFilePath(Application.ExeName) + Dir + 'FormTop.ini') then
begin
AssignFile(f1,ExtractFilePath(Application.ExeName) + Dir + 'FormTop.ini');
Reset(f1);
read(f1, t);
Form1.Top:=t;
CloseFile(f1);
end
else
Form1.Top:=24;

for i:=1 To 10 Do begin
if FileExists(ExtractFilePath(Application.ExeName) + Dir + 'Eqwelizer' + inttostr(i) + '.ini') then
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'Eqwelizer' + inttostr(i) + '.ini');
Reset(f1);
read(f1, w);
Eqws[i]:=w;
CloseFile(f1);
end
else
Eqws[i]:=15;
end;
trackbar3.Position:=Eqws[1];
trackbar4.Position:=Eqws[2];
trackbar5.Position:=Eqws[3];
trackbar6.Position:=Eqws[4];
trackbar7.Position:=Eqws[5];
trackbar8.Position:=Eqws[6];
trackbar9.Position:=Eqws[7];
trackbar10.Position:=Eqws[8];
trackbar11.Position:=Eqws[9];
trackbar12.Position:=Eqws[10];
end;
Но форма всё равно уходит.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.

Последний раз редактировалось Stilet; 26.09.2012 в 21:18.
саша40 вне форума Ответить с цитированием
Старый 25.09.2012, 07:49   #17
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

По-моему, проблема в том, что Вы D, E передаёте в функцию, а вот s,t определяете внутри в одной из веток if - есть вероятность что ветка просто не выполняется и значения не инициализированные, ну а прогоном/отладкой/трассировкой Вы пользоваться не хотите, почитайте что ли матчасть (в идеале вообще всю статью по ссылке), а то до пришествия будете постить такой страшный код с просьбами помочь и обижаться, что Вам не помогают(хотя по-правде-то, Вам наоборот помогают, направляя на верный путь).

Попутно вижу возможную проблему такую - у Вас файлы могут быть чисто текстовые (объявленные как textfile) - и, возможно, Вы их руками поправляете, например, а читаете Вы из них и пишете integer значения. Покажите объявление файловой переменной f1

Как всё это исправить - не скажу, ибо смотря на всю эту уличную магию, даже не хочется понять, что делает программа, а точнее для чего она вообще нужна, ибо Вы сами не сможете объяснить (при такой-то реализации), а выпытывать у Вас это нет ни желания , ни времени.
Из очевидных замечаний - обернуть всю копипасту в подпрограммы, параметризуя лишь именем файла, переназвать все контролы говорящими именами, а то в куче трекбарЦифро как в куче...
Равно как и именование локальных переменных - феерично, я понимаю, если бы они были названы из первой буквы соответствующего параметра (показанного на трекбаре, что как раз в имени трекбара и надо бы показать), и как следствие, имени файла, откуда параметр читается, но таки откуда D, E, s, t для меня загадка.
Из менее очевидного - не использовать Form1."что-то" в методах класса TForm1 а использовать Self. или даже без чего-либо, просто сразу "что-то"
phomm вне форума Ответить с цитированием
Старый 25.09.2012, 09:28   #18
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Проблема в том что сохраняются и загружаются правильно только первые две настройки, а остальные ставятся так: FormTop и FormLeft на 0, а с 3 по 12 трекбары на максимум. Как это исправить?
читать предупреждения (warning) компилятора. И думать над следующими блоками.
Код:
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'Volume.ini');
Rewrite(f1);
Write(f1, D);
CloseFile(f1);
end;
Код:
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'Atribute.ini');
Rewrite(f1);
Write(f1, E);
CloseFile(f1);
end;
Код:
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'FormLeft.ini');
Rewrite(f1);
Write(f1, s);
CloseFile(f1);
end;
Код:
begin
AssignFile(f1, ExtractFilePath(Application.ExeName) + Dir + 'FormTop.ini');
Rewrite(f1);
Write(f1, t);
CloseFile(f1);
end;
А лучше как уже сказали переписать с INI.
Даже если не использовать INI то надо сократить число файлов до одного! Все настройки хранить в одном Файле, а не каждую отдельную настройку в своем файле.
во первых вы занимаете в 1000 раз больше места на диске.
Во вторых время загрузки существенно больше
В третьих вероятность ошибок увеличивается (что вы и продемонстрировали). Ваша ошибка возникла как раз из-за множественности файлов (многократного повторения однотипной конструкции.
Код:
if fileExists(......) then begin
.......
end
else begin
..........
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.09.2012, 11:59   #19
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Ну D, E -это переменые которые указывают на положение trackbar1 и trackbar2. Они уже использованы. А переменые s и t имееют значения:
s-положение формы по оси Х.
t-положение формы по оси Y.
Задача их сохранить это положение. Может сохранять остальные переменые от формы(пример её длину и ширину)?
+ я так сохраняю файлы потому что это удобно и не когда не выдаст ошибки.
+ я не хочу сохранить всё в одном файле, я сохраняю всё в папку.
FileExists-это функция windows, которая ищет указаный файл по полному пути.
У меня идет проверка на наличие файла(а вдруг пользователю взбрело в голову один удалить). Недочеты с файлами и другими возможностями, называются багами или скрытими ошибками кода. Они проявляются только при тесте программы. Я исправил это. Например уже правильно работают trackbar-ы.

Цитата:
Сообщение от phomm Посмотреть сообщение
По-моему, проблема в том, что Вы D, E передаёте в функцию, а вот s,t определяете внутри в одной из веток if - есть вероятность что ветка просто не выполняется и значения не инициализированные, ну а прогоном/отладкой/трассировкой Вы пользоваться не хотите, почитайте что ли матчасть (в идеале вообще всю статью по ссылке), а то до пришествия будете постить такой страшный код с просьбами помочь и обижаться, что Вам не помогают(хотя по-правде-то, Вам наоборот помогают, направляя на верный путь).

Попутно вижу возможную проблему такую - у Вас файлы могут быть чисто текстовые (объявленные как textfile) - и, возможно, Вы их руками поправляете, например, а читаете Вы из них и пишете integer значения. Покажите объявление файловой переменной f1

Как всё это исправить - не скажу, ибо смотря на всю эту уличную магию, даже не хочется понять, что делает программа, а точнее для чего она вообще нужна, ибо Вы сами не сможете объяснить (при такой-то реализации), а выпытывать у Вас это нет ни желания , ни времени.
Из очевидных замечаний - обернуть всю копипасту в подпрограммы, параметризуя лишь именем файла, переназвать все контролы говорящими именами, а то в куче трекбарЦифро как в куче...
Равно как и именование локальных переменных - феерично, я понимаю, если бы они были названы из первой буквы соответствующего параметра (показанного на трекбаре, что как раз в имени трекбара и надо бы показать), и как следствие, имени файла, откуда параметр читается, но таки откуда D, E, s, t для меня загадка.
Из менее очевидного - не использовать Form1."что-то" в методах класса TForm1 а использовать Self. или даже без чего-либо, просто сразу "что-то"
Попробую просто "что-то". Но я использую Delphi 7, а не 6.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.

Последний раз редактировалось Stilet; 26.09.2012 в 21:09.
саша40 вне форума Ответить с цитированием
Старый 25.09.2012, 12:24   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Из очевидных замечаний - обернуть всю копипасту в подпрограммы, параметризуя лишь именем файла,
Добавлю еще параметр (значение которое надо сохранить/прочитать).
Сделать ОДНУ процедуру Сохранить значение в указанный файл в которой проверять файл и записывать значение.
И другую процедуру (функцию) прочитать значение из указанного файла.
Далее все многочисленные if fileExises then ... else ... ; заменить на вызовы данной процедуры (при сохранении) и функции (при чтении).
При отсутствии багов в одной единственной короткой процедуре, почти сразу пропадут баги в главной процедуре. Иначе вам придется 5 и более раз исправлять один и тот же баг. И в результате окажется просмотренным тот же баг в 6-ом месте.
в моем посте один и тот же по своей сути баг приведен уж не знаю сколько раз, а в нескольких других местах этот баг вы уже исправили (или же не допустили изначально).
http://www.transl-gunsmoker.ru/2011/01/3097.html
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.09.2012 в 12:28.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема со StringGrid и INI Zuba C++ Builder 9 03.05.2012 14:55
Проблема с ini Zuba C++ Builder 4 26.04.2012 10:28
Проблема с файлами ini WinMen Общие вопросы Delphi 3 08.11.2010 10:43
Проблема с чтением из INI файла JustKurt Общие вопросы Delphi 3 04.08.2009 20:47