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

Вниз

Tweaker for Windows   Найти похожие ветки 

 
Zhenka ©   (2003-02-19 05:25) [0]

Вообщем такая проблема!
Написал твикер,
Пример кода сохранения настройки, сд-й пользователем
На кнопку Применить такой код
========================
Reestr.RootKey:=HKEY_CURRENT_USER;
//rescent docs
If CheckListBox1.Checked[0]=true then
begin
Reestr.OpenKey("Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",false);
Reestr.WriteInteger("NoRecentDocsMenu",1);
Reestr.CloseKey;
end
else
begin
Reestr.OpenKey("Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",false);
Reestr.WriteInteger("NoRecentDocsMenu",0);
Reestr.CloseKey;
end;
//Favorites
If CheckListBox1.Checked[1]=true then
begin
Reestr.OpenKey("Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",false);
Reestr.WriteInteger("NoFavoritesMenu",1);
Reestr.CloseKey;
end
else
begin
Reestr.OpenKey("Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",false);
Reestr.WriteInteger("NoFavoritesMenu",0);
Reestr.CloseKey;
end;
ююююююююююююююю.............
итд.
Но веедь можно как то Не проверять Все CheckListBox1.Checked[i]
Как это реализ-ть подругому??
Спасибо


 
DiamondShark ©   (2003-02-19 11:58) [1]

Типичный пример "вонючего" кода ( http://www.xprogramming.ru/Articles/CodeSmells.html)


procedure WriteBoolean(
Registry: TRegistry;
const Key: string;
const Name: string;
Value: boolean);
begin
Registry.OpenKey(Key, false);
Registry.WriteInteger(Name, ord(Value));
Registry.CloseKey;
end;


С такой процедурой уже легче жить:


Reestr.RootKey:=HKEY_CURRENT_USER;
//rescent docs
WriteBoolean(
Reestr,
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",
"NoRecentDocsMenu",
CheckListBox1.Checked[0]);
//Favorites
WriteBoolean(
Reestr,
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",
"NoFavoritesMenu",
CheckListBox1.Checked[1]);
end;


Но этот код ещё порядком пованивает. Даже невооружённым глазом заметна регулярная структура:


const
MaxParams = 12345;
const
ParamKeys: array[0..MaxParams-1] of string = (
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",
... );
ParamNames: array[0..MaxParams-1] of string = (
"NoRecentDocsMenu",
"NoFavoritesMenu",
... );

...
Reestr.RootKey:=HKEY_CURRENT_USER;
for i := 0 to MaxParams-1 do
WriteBoolean(
ParamKeys[i],
ParamNames[i],
CheckListBox1.Checked[i])




 
RV ©   (2003-02-19 12:06) [2]

я ж те про массив сразу говорил


 
Zhenka ©   (2003-02-20 08:30) [3]

2Рв
Прости сразу не понял


 
Anatoly Podgoretsky ©   (2003-02-20 10:26) [4]

Zhenka © (19.02.03 05:25)
Можно не проверять конечно, а использовать трюки типа ord(Value), но это скажем так чревато.
Но в твоем коде очень много дублирующего кода, много кратное повторение
Reestr.OpenKey("Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",false);
Reestr.CloseKey;

Надо один раз
Reestr.OpenKey("Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",false);
запись всех параметров по данному ключу.
Reestr.CloseKey;

Вот это тоже дико If CheckListBox1.Checked[0] =true then
Надо If CheckListBox1.Checked[0] then ... else ...




 
Zhenka ©   (2003-02-24 15:51) [5]

2Anatoly Podgoretsky
Я с вами полностью согласен,
Но Ведь в реестре меняю значения ключей не для одной ветки. хочу как нибудь оптимизировать(уменьшить размер )код
Что я привел в примере это абсурд
подумайте если в прг представится врзможность настраивать несколько сотен настроек Виндовс то в таком коде мона заблудится.
То что предложил Диамонд впринц. приемлемо.
но пому тоже не очень совершенно.
Я пока в поисках оптимального решения проблемы.

2Всем Спасибо за советы. Будут свежие мысли по сабжу пишите в ветку. буду благодарен


 
Ketmar ©   (2003-02-24 16:14) [6]

>Zhenka © (24.02.03 15:51)
была куча несвежих в прошлой ветке, ты их обкакал. и проигнорировал.

Satanas Nobiscum! 24-Feb-XXXVIII A.S.


 
michael_b   (2003-02-24 16:31) [7]


> Zhenka © (19.02.03 05:25)

помести свой tweaker в кладовку


 
SPeller ©   (2003-02-24 18:06) [8]


> michael_b (24.02.03 16:31)
> помести свой tweaker в кладовку

:-))


 
Zhenka ©   (2003-02-27 16:20) [9]

2 michael_b
2 Speller
Обязательно помещю, только доделаю до конца, примерно через месяцок, а то время нет, в институте заморочки

2Кетмар
Если бы кто - то выражовывался на понятном языке, и без .......
то я бы понял



Страницы: 1 вся ветка

Текущий архив: 2003.03.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
3-39206
Leviathan
2003-02-21 22:46
2003.03.13
Простой вопрос по DBGrid


4-39643
LaJolla
2003-01-22 17:08
2003.03.13
DOS в буфер обмена


1-39385
mannik
2003-03-03 00:16
2003.03.13
FIND


14-39504
Volly
2003-02-24 17:05
2003.03.13
Где можно найти картинки поездов?


1-39244
Kair
2003-03-02 21:32
2003.03.13
Поверхность формы