Форум: "Потрепаться";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c