Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Сохранение галочек   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.048 c
9-1082207751
AlexNx
2004-04-17 17:15
2004.08.01
Алгоритм попадания точки


3-1089103372
MakNik
2004-07-06 12:42
2004.08.01
ADOQuery


4-1087578704
Ник
2004-06-18 21:11
2004.08.01
Пытаюсь скопировать диск на жесткий, не могу.....


3-1089009769
Mitrofan
2004-07-05 10:42
2004.08.01
FIBPlus + префикс MAS


1-1089721108
Роман
2004-07-13 16:18
2004.08.01
наследование форм