Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
3-39185
Кулюкин Олег
2003-02-21 09:59
2003.03.13
Перенос диаграмм


14-39544
AleksandrAAA
2003-02-26 14:50
2003.03.13
штрихкоды


1-39409
Вопрос
2003-03-03 11:11
2003.03.13
Excel


14-39513
sancho
2003-02-25 12:52
2003.03.13
Помогите найти видеоклип.


8-39420
Alexec
2002-12-02 10:20
2003.03.13
Jpeg





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский