![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение галочек [D5, D7, Win95/98, WinME, NT4]
Vetalich © (2004-07-15 03:07:00)Здравствуте!
У меня несколько десятков галочек (CheckBox) и нужно сделать их сохранение в ini файл.
Мне как-то друган накатал такой небольшой код (точно непомню) помоему 6-8 строк, но блин слетели винды и кода не стало :)
Сколько я не искал но везде такие большие объймы этого кода, что для моей проги это будет очень весомо...
Не могли бы вы подскозать как сделать хотя бы простейшее сохранение галочек в ini файл. (Желательно в коде, а не отрывками из своих мыслей :) )
Arm79 (2004-07-18 10:43:00) [1]> Vetalich
Обрати внимание на Юрий Зотов © (18.07.04 09:22) [24]. Очень верное замечание.
И как построена программа, которую надо сильно переделывать из-за нескольких строчек кода? И как может быть может быть весомым для программы в 7845 строк кусок кода даже в 100 строк? Неужели нельзя оформить все это одной процедурой?
Arm79 (2004-07-18 10:22:00) [2]Примерно так. Набирал от руки, может где и ошибся. Но идея такая.
var
SL : TStringList;
N : String;
tmp: TComponent;
i : integer;
begin
SL := TStringList.Create;
try
With TiniFile.Create('filename.ini')
do begin
ReadSectionValues('galochki:)', SL);
for i := 0 to SL.Count-1
do begin
N := Copy(SL[i], 1, Pos('=', SL[i])-1);
tmp := FindComponent(N);
if (tmp<>nil) and (tmp is TCheckBox)
then (tmp as TCheckBox).Checked := ReadBool('galochki:)', N, false);
end;
Free;
end;
SL.Clear;
finally
SL.Free;
end;
end;
Юрий Зотов (2004-07-18 09:22:00) [3]> Vetalich
Первый вопрос Вы задали 15.07.04 в 03:07. Последний - 18.07.04 в 02:13. То есть, прошло трое суток, а проблема так и не решена.
А ведь, имея сразу же полученный образец кода [3], справку и (самое главное!) желание приложить СВОЙ труд и поломать СВОЮ голову, Вы бы решили задачу за несколько часов. А заодно и получили бы твердые знания на будущее.
Разве это не было бы лучше для Вас же самого?
TUser (2004-07-18 07:24:00) [4]Не, точно - посавь лучше TJvFormStorage. Сам я им не пользуюсь, но смотрел - вроде то, что тебе надо.
Vetalich (2004-07-18 02:13:00) [5]А вот по этому коду ответ можно получить:
> var i:integer;
> begin
> with TiniFile.Create('filename.ini') do
> try
> for i:=0 to ComponentCount-1 do
> if Components[i] is TCheckBox then
> WriteBool('galochki:)',(Components[i] as TCheckBox).Name,(Components[i]
> as TCheckBox).Checked);
> finally
> free;
> end;
> end;
т.е как загрузить эти галочки которые сохранились в ini.
Мне этот код очень даже подходит, а переписывать всю программу это очень трудоёмкий процесс... Как никак 7845 строк.
И тем более, что CheckListBox я пользоватся не умею :( ...
------------------------------------------------------------
Заменять WriteBool на ReadBool пробовал не помогает, если чё делаю не так пожалуйста подскажите, а то ж блин хочется поскорее её закончить (хотябы за лето :) ).
Arm79 (2004-07-18 01:10:00) [6]Размещаешь где хочешь на форме компонент RxCheckListBox (по моему он называется так) из библиотеки RX. Туда в св-ва Items и Checked записываешь сколько влезет чекбоксов. Затем в цикле пробегаешь по списку и пишешь в ини. формат записи рекомендую такой
[Options]
имя чекбокса= состояние (1 или 0)
при считывании используй ReadSectionValues. Пробегись по полученному списку. В каждой строке списка все, что до "=" есть имя параметра, после - его состояние. Или, как вариант, получив имя, используй ReadBool. Это алгоритм использования специализированных компонент. А в общем случае, если только стандартные, то смотри
SergP © (17.07.04 10:37) [17]
Да, и еще. В Delphi 7 есть свой компонент CheckListBox.
Vetalich (2004-07-18 00:10:00) [7]Ну хоть кто нибудь ответит...
OSokin (2004-07-17 17:36:00) [8]Сделай битами. В один байт влезет 8 бит. 1 бит - одни чебоксары.
Vetalich (2004-07-17 17:24:00) [9]а восстановление :)
SergP (2004-07-17 10:37:00) [10]
> TUser © (17.07.04 07:15) [16]
var i:integer;
begin
with TiniFile.Create('filename.ini') do
try
for i:=0 to ComponentCount-1 do
if Components[i] is TCheckBox then
WriteBool('galochki:)',(Components[i] as TCheckBox).Name,(Components[i] as TCheckBox).Checked);
finally
free;
end;
end;
TUser (2004-07-17 07:15:00) [11]var i:integer;
ini:TIniFile;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TCheckBox then
ini.WriteBool('galochki:)',(Components[i] as TCheckBox).Name,(Components[i] as TCheckBox).Checked);
end;
Vetalich (2004-07-17 03:09:00) [12]И еще вопросик...
У меня эти галочки находятся не на форме, ну т.е они находятся вScrollBoxи когда вставляшь этот код в форму галочки которые вScrollBoxне сохраняются, а сохраняются только те которые находятся на форме.
И вот вопрос как сделать так чтобы при загрузке программы галочки восстанавливались вScrollBoxа не на форме...
SergP (2004-07-16 22:30:00) [13]
> [11] Vetalich (16.07.04 00:41)
> За подсказку конечно спасибо помогло...
> но вот непоскажете как теперь загрузить всё это :)
Тот же код, только меняешь сторочку:
> Ini.WriteBool('CheckBoxes',CB.Name,CB.Checked);
На такую:
CB.Checked:=Ini.ReadBool('CheckBoxes',CB.Name,false);
:-))
Sergey Kaminski (2004-07-16 21:09:00) [14]2 Vetalich (16.07.04 00:41) [11]
>За подсказку конечно спасибо помогло...
> но вот непоскажете как теперь загрузить всё это :)
А ReadBool слабо?
TUser (2004-07-16 04:15:00) [15]Кинь себе на форму TJvFormStorage и сделаешь за 0 строчек кода. Правда компилятор прицепит к программе этих самых строчек еще до самого не хочу. Впрочем, даже простое ini:=TIniFile.Create тоже причепит.
Vetalich (2004-07-16 00:41:00) [16]За подсказку конечно спасибо помогло...
но вот непоскажете как теперь загрузить всё это :)
Sun bittern (2004-07-15 20:11:00) [17]Gleb (15.07.04 04:54) [5]
Вам бы только над реестром поиздеваться :(
infom (2004-07-15 13:24:00) [18]а можно ещё для нескольких десятков галочек использовать CheckListBox, это вроде здорово оптимизирует, во всяком случае у оптимизировало .
Vetalich (2004-07-15 13:09:00) [19]Спасибо, буду пробовать...
Sergey Kaminski (2004-07-15 05:24:00) [20]Удалено модератором