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

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

Сохранение параметров программы одним числом [D7, WinXP]


Страницы:   1 2

kyn66 ©   (2009-11-05 12:16:00) 

Уважаемые мастера. Подскажите алгоритм сохранения параметров программы и последующее их извлечение. К примеру ситуация такая. Программа должна выполнять определенные действия в зависимости от дня недели. Т.е. в параметрах программы есть семь CheckBox

Понедельник
Вторник
Среда
... и т.д

каждый из которых соответственно может принимать значение True или False. Я могу назначить каждому дню(CheckBox) свои персональные условные номера 1 -:- 7. По какому алгоритму мне сохранить данные по этим параметрам одним числом(слыхал можно так) и потом считать его и решить, какой из CheckBox помечен, а соответственно и выполнить программу по тому или иному пути. Слыхал(но оооочень далеко) про такую науку комбинаторику. Это не из этой области?


Сергей М.   (2009-11-05 14:39:00) [21]


> WeekDaysMask and (1 shl i) = 1;


Потому что это выражение истинно как раз только для Пн.
Для Вт. = 2
Для Ср. = 4
Для Чт. = 8

Выводы сделаешь сам или как ?)


Сергей М.   (2009-11-05 14:32:00) [22]


> ваще ничего на помечается


А отладчик на что ?)


RWolf   (2009-11-05 14:32:00) [23]

потому что WeekDaysMask and (1 shl i) в общем случае не равно 1.


kyn66   (2009-11-05 14:26:00) [24]


> Оно как раз и соответствует набору,  в составе которого
> есть Пн, Ср, Пт


Тогда почему CheckBox-ы не отмечаются? Получается код получения параметров или не правильно работает или.... даже не знаю

 for i := 0 to 6 do
  TCheckBox(FindComponent('CheckBox' + IntToSTr(i))).Checked := WeekDaysMask and (1 shl i) = 1;


При таком раскладе кода и значении 21 - помечается только Понедельник. Стоит отметить что либо среди недели(среда и пятница к примеру) - ваще ничего на помечается.


Сергей М.   (2009-11-05 14:20:00) [25]


> одно и то же значение 21


Оно как раз и соответствует набору,  в составе которого есть Пн, Ср, Пт


kyn66   (2009-11-05 14:11:00) [26]


> Сергей М. ©   (05.11.09 13:48) [13]
> Ну попробуй так:WeekDaysMask := WeekDaysMask or Byte(CheckBox.
> Checked) shl i


Сделал, ошибки нет, но результат не соответствует требуемому. Т.е. я к примеру отмечаю 0, 2, 4 (Пон., Сред, Пятн), Сохраняю. Повторно загружаю - помечен тока Понедельник (0). ПРи Сохранении и при получении данных WeekDaysMask имеет одно и то же значение 21 в данном случае.


Anatoly Podgoretsky   (2009-11-05 13:56:00) [27]


> Пардон, просто она у меня по умолчанию в браузере стоит.

Сменить


Сергей М.   (2009-11-05 13:48:00) [28]

Ну попробуй так:

WeekDaysMask := WeekDaysMask or Byte(CheckBox.Checked) shl i


kyn66   (2009-11-05 13:43:00) [29]


> Сергей М. ©   (05.11.09 13:36) [11]
> > Так было задуманоКонечно)Считай что это было дом.задание)


Спасибо. Оно выполнено

 // при инициализации
 for i := 0 to 6 do
  TCheckBox(FindComponent('CheckBox' + IntToSTr(i))).Checked := WeekDaysMask and (1 shl i) = 1;


А вот с сохранением какой то трабл, тут не пойму что за ошибка

// сохраняем
 WeekDaysMask := 0;
 for i := 0 to 6 do
  WeekDaysMask := WeekDaysMask or (1 shl i and TCheckBox(FindComponent('CheckBox' + IntToStr(i))).Checked);


Ошибка - [Error] Param.pas(78): Operator not applicable to this operand type


Сергей М.   (2009-11-05 13:36:00) [30]


> Так было задумано


Конечно)
Считай что это было дом.задание)


kyn66   (2009-11-05 13:31:00) [31]


Сергей М. ©   (05.11.09 13:25) [9]
> Не думай что орешник вырос сам по себе)


:)... Кстати, а в приведенном коде ошибочка

 CheckBox[i].Checked := WeekDaysMask and (1 shl i);


Булевому значению попытка присвоить Integer. Это конечно устранимо, но всетаки... Так было задумано или рука дрогнула?


Сергей М.   (2009-11-05 13:25:00) [32]


> kyn66 ©   (05.11.09 13:15) [8]


> грамотно и доходчиво может донести их до других


Смотря до кого "нести".
Другие другим рознь.
Не думай что орешник вырос сам по себе)


kyn66   (2009-11-05 13:15:00) [33]


> 2Сергей М. ©   (05.11.09 13:10) [7]


Как обычно мастер на высоте! Не зря орден мастера присвоен! Спасибо, Сергей! Дальше уже сам!

PS
Мастер не тот, кто козыряет своими знаниями, а тот кто грамотно и доходчиво может донести их до других.

Тема закрыта.


Сергей М.   (2009-11-05 13:10:00) [34]

for i := 0 to 6 do
CheckBox[i].Checked := WeekDaysMask and (1 shl i);


kyn66   (2009-11-05 13:07:00) [35]


> Сергей М. ©   (05.11.09 13:00) [5]


Это мы схранили значения флагов CheckBox. Теперь нужно извлечь необходимые данные из WeekDaysMask и инициализировать CheckBox-ы полученными значениями.


> 2{RASkov} ©   (05.11.09 12:56) [4]

Классно, спасибо, изучаю...


Сергей М.   (2009-11-05 13:00:00) [36]

var
 WeekDaysMask: Byte;
..
WeekDaysMask := 0;
for i := 0 to 6 do
 WeekDaysMask := WeekDaysMask or (1 shl i and CheckBox[i].Checked);


{RASkov}   (2009-11-05 12:56:00) [37]

> [3] kyn66 ©   (05.11.09 12:48)
> Про это место можно подробнее?

http://www.podgoretsky.com/ddp/bits.aspx


kyn66   (2009-11-05 12:48:00) [38]


> И чего тебя так в "основную" тянет ? Как медом она для тебя
> намазана) .


Пардон, просто она у меня по умолчанию в браузере стоит.

> А далее в цикле бежишь по всем чекбоксам и взводишь/сбрасываешь
> в переменной соотв.биты


Про это место можно подробнее? С примером если можно, нагляднее воспринимается.


Сергей М.   (2009-11-05 12:38:00) [39]

И чего тебя так в "основную" тянет ? Как медом она для тебя намазана) ..
Вопросу-то самое место в "Начинающим" - самые азы затрагиваются ..


Сергей М.   (2009-11-05 12:34:00) [40]


> могу назначить каждому дню(CheckBox) свои персональные условные
> номера 1 -:- 7


Лучше 0..6 - это будут индексы битовв переменной (например типа Byte), которая будет хранить состояние чекбоксов.

А далее в цикле бежишь по всем чекбоксам и взводишь/сбрасываешь в переменной соотв.биты в зависимости от зн-ний св-ва Checked каждого чекбокса.


Страницы:   1 2

Наверх

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