Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение галочек [D5, D7, Win95/98, WinME, NT4]


Страницы:   1 2

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]

Удалено модератором


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо