Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.056 c
14-1089451802
X9
2004-07-10 13:30
2004.08.01
Создание сети


1-1090081522
alice
2004-07-17 20:25
2004.08.01
$00000000


4-1087542911
alexdbases
2004-06-18 11:15
2004.08.01
Появление нового процесса в системе.


8-1084092251
X-Disa
2004-05-09 12:44
2004.08.01
Image c масштабированием


4-1087805509
besen-ok
2004-06-21 12:11
2004.08.01
Можно ли на терминальном сервере в определенной сесиси запустить





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский