Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизСохранение галочек Найти похожие ветки
← →
Vetalich (2004-07-15 03:07) [0]Здравствуте!
У меня несколько десятков галочек (CheckBox) и нужно сделать их сохранение в ini файл.
Мне как-то друган накатал такой небольшой код (точно непомню) помоему 6-8 строк, но блин слетели винды и кода не стало :)
Сколько я не искал но везде такие большие объймы этого кода, что для моей проги это будет очень весомо...
Не могли бы вы подскозать как сделать хотя бы простейшее сохранение галочек в ini файл. (Желательно в коде, а не отрывками из своих мыслей :) )
← →
Sergey Kaminski (2004-07-15 03:11) [1]...но везде такие большие объймы этого кода, что для моей проги это будет очень весомо...
А что, в твоей программе есть уже 2-3 строки и для нее это будет неподьемный груз? ;-)
← →
Vetalich (2004-07-15 03:16) [2]>>>А что, в твоей программе есть уже 2-3 строки и для нее это будет неподьемный груз?<<<
В моей программе 7845 строк...
← →
Sergey Kaminski (2004-07-15 03:21) [3]
uses IniFiles,.....
..............
var
I: Integer;
Ini: TIniFile;
CB: TCheckBox;
begin
Ini := TIniFile.Create("filename.ini");
try
for I := 0 to ControlCount-1 do
begin
if Controls[I] is TCheckBox then
begin
CB := TCheckBox(Controls[I]);
Ini.WriteBool("CheckBoxes",CB.Name,CB.Checked);
end;
end;
finally
Ini.Free
end;
end;
........
Сохранит состояние всех чекбоксов на форме и будет тебе счастье!!
:-)
Однако, боюсь, что может не подойти, ибо это уже 19-20 строк, а восстановление "галочек" из файла займет еще столько же. И для твоей проги это наверняка окажется очень весомо :(
Хотя можно оптимизировать - загнать в одну строку - есть такая фича.
← →
Sergey Kaminski (2004-07-15 03:23) [4]:)))))
← →
Gleb (2004-07-15 04:54) [5]Да я вообще в реестре сохранил бы. Испробовано, и как по мне - код простейший, главное - не залезть в чужие ветки настроек.
← →
Sergey Kaminski (2004-07-15 05:23) [6]2 главное - не залезть в чужие ветки настроек.
Нет, главное - знать как сохранять в реестре ;-)
2 Vetalich:
См. Sergey Kaminski (15.07.04 03:21) [3]
← →
Sergey Kaminski (2004-07-15 05:24) [7]Удалено модератором
← →
Vetalich (2004-07-15 13:09) [8]Спасибо, буду пробовать...
← →
infom © (2004-07-15 13:24) [9]а можно ещё для нескольких десятков галочек использовать CheckListBox, это вроде здорово оптимизирует, во всяком случае у оптимизировало .
← →
Sun bittern © (2004-07-15 20:11) [10]Gleb (15.07.04 04:54) [5]
Вам бы только над реестром поиздеваться :(
← →
Vetalich (2004-07-16 00:41) [11]За подсказку конечно спасибо помогло...
но вот непоскажете как теперь загрузить всё это :)
← →
TUser © (2004-07-16 04:15) [12]Кинь себе на форму TJvFormStorage и сделаешь за 0 строчек кода. Правда компилятор прицепит к программе этих самых строчек еще до самого не хочу. Впрочем, даже простое ini:=TIniFile.Create тоже причепит.
← →
Sergey Kaminski © (2004-07-16 21:09) [13]2 Vetalich (16.07.04 00:41) [11]
>За подсказку конечно спасибо помогло...
> но вот непоскажете как теперь загрузить всё это :)
А ReadBool слабо?
← →
SergP © (2004-07-16 22:30) [14]
> [11] Vetalich (16.07.04 00:41)
> За подсказку конечно спасибо помогло...
> но вот непоскажете как теперь загрузить всё это :)
Тот же код, только меняешь сторочку:
> Ini.WriteBool("CheckBoxes",CB.Name,CB.Checked);
На такую:
CB.Checked:=Ini.ReadBool("CheckBoxes",CB.Name,false);
:-))
← →
Vetalich (2004-07-17 03:09) [15]И еще вопросик...
У меня эти галочки находятся не на форме, ну т.е они находятся вScrollBox
и когда вставляшь этот код в форму галочки которые вScrollBox
не сохраняются, а сохраняются только те которые находятся на форме.
И вот вопрос как сделать так чтобы при загрузке программы галочки восстанавливались вScrollBox
а не на форме...
← →
TUser © (2004-07-17 07:15) [16]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;
← →
SergP © (2004-07-17 10:37) [17]
> 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;
← →
Vetalich (2004-07-17 17:24) [18]а восстановление :)
← →
OSokin (2004-07-17 17:36) [19]Сделай битами. В один байт влезет 8 бит. 1 бит - одни чебоксары.
← →
Vetalich (2004-07-18 00:10) [20]Ну хоть кто нибудь ответит...
← →
Arm79 (2004-07-18 01:10) [21]Размещаешь где хочешь на форме компонент RxCheckListBox (по моему он называется так) из библиотеки RX. Туда в св-ва Items и Checked записываешь сколько влезет чекбоксов. Затем в цикле пробегаешь по списку и пишешь в ини. формат записи рекомендую такой
[Options]
имя чекбокса= состояние (1 или 0)
при считывании используй ReadSectionValues. Пробегись по полученному списку. В каждой строке списка все, что до "=" есть имя параметра, после - его состояние. Или, как вариант, получив имя, используй ReadBool. Это алгоритм использования специализированных компонент. А в общем случае, если только стандартные, то смотри
SergP © (17.07.04 10:37) [17]
Да, и еще. В Delphi 7 есть свой компонент CheckListBox.
← →
Vetalich (2004-07-18 02:13) [22]А вот по этому коду ответ можно получить:
> 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 пробовал не помогает, если чё делаю не так пожалуйста подскажите, а то ж блин хочется поскорее её закончить (хотябы за лето :) ).
← →
TUser © (2004-07-18 07:24) [23]Не, точно - посавь лучше TJvFormStorage. Сам я им не пользуюсь, но смотрел - вроде то, что тебе надо.
← →
Юрий Зотов © (2004-07-18 09:22) [24]> Vetalich
Первый вопрос Вы задали 15.07.04 в 03:07. Последний - 18.07.04 в 02:13. То есть, прошло трое суток, а проблема так и не решена.
А ведь, имея сразу же полученный образец кода [3], справку и (самое главное!) желание приложить СВОЙ труд и поломать СВОЮ голову, Вы бы решили задачу за несколько часов. А заодно и получили бы твердые знания на будущее.
Разве это не было бы лучше для Вас же самого?
← →
Arm79 (2004-07-18 10:22) [25]Примерно так. Набирал от руки, может где и ошибся. Но идея такая.
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;
← →
Arm79 (2004-07-18 10:43) [26]> Vetalich
Обрати внимание на Юрий Зотов © (18.07.04 09:22) [24]. Очень верное замечание.
И как построена программа, которую надо сильно переделывать из-за нескольких строчек кода? И как может быть может быть весомым для программы в 7845 строк кусок кода даже в 100 строк? Неужели нельзя оформить все это одной процедурой?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c