Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Права на изменение реестра, как безболезненно отловить их отсутствие 
V
    Опции темы
eccentricity
Дата 22.9.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Добрый день! 

Необходимо подправить реестр в методе FormShow,
использую TRegistry.
Как проверить наличие прав на редактирование?
Или как запустить-таки WriteString, но без выхода из FormShow при возвращении ошибки от Write?

Заранее спасибо smile

Очень уж хочется, чтобы Form сделала своё Show  в любом случае..
PM MAIL   Вверх
borisbn
Дата 22.9.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Из документации по TRegistry::WriteString
Цитата

If WriteString fails, an exception is thrown, and the value is not written to the registry.

просто сделай отлов исключения
Код

try {
    reg->WriteString( чего-то-там );
}
catch( ... ) {
// Здесь ты знаешь, что записать не удалось
}
// а здесь продолжаешь выполнение функции ( FormShow или любой другой - не имеет значения )



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
eccentricity
Дата 22.9.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



borisbn, 
да, всё так, но, увы, после попадания в блок catch не происходит выполнения стандартного виндоусовского события  FormShow!!! Оно прерывается.

это ведь функция обработки события smile

забегая вперёд - если я прямо в блоке catch пропишу Show() - то снова попаду в этот же обработчик события.

PM MAIL   Вверх
_Dimon_
Дата 22.9.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата(eccentricity @  22.9.2010,  18:03 Найти цитируемый пост)
забегая вперёд - если я прямо в блоке catch пропишу Show() - то снова попаду в этот же обработчик события.


Да, и если будет исключительная ситуация, то зацыклиш всю функцию...

PM MAIL   Вверх
borisbn
Дата 23.9.2010, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



eccentricity, в какой функции ( событии ) ты пишешь в реестр? Выложи код, тогда будет проще помочь


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
eccentricity
Дата 23.9.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



вот код:

Код

void __fastcall TfrmMain::FormShow(TObject *Sender)
{    
        AnsiString S;
        TRegistry *Registry = new TRegistry(KEY_ALL_ACCESS);
        try{
                Registry->RootKey = HKEY_CURRENT_USER;
                if(Registry->OpenKey(".DEFAULT\\Control Panel\\International",false)){
                        S = Registry->ReadString("sDecimal");                        
                        if(S!="."){
                                Registry->WriteString("sDecimal",".");
                                S = Registry->ReadString("sDecimal");                               
                        }                        
                }
        }
        catch (Exception &E) {
                delete Registry;
                Application->Terminate();
        }
        delete Registry;       
}


Это сообщение отредактировал(а) eccentricity - 23.9.2010, 10:59
PM MAIL   Вверх
xvr
Дата 23.9.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(eccentricity @  22.9.2010,  18:03 Найти цитируемый пост)
да, всё так, но, увы, после попадания в блок catch не происходит выполнения стандартного виндоусовского события  FormShow!!! Оно прерывается.

Еще бы оно не прерывалось:

Цитата(eccentricity @  23.9.2010,  10:59 Найти цитируемый пост)

Код

        catch (Exception &E) {
                delete Registry;
                Application->Terminate(); // <<< !!!
        }


Или у вас вопрос из серии 'Как сделать безопасно харакири?'

PM MAIL   Вверх
borisbn
Дата 24.9.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



eccentricity, если я не ошибаюсь, то ты пытаешься явно установить в качестве разделителя точку.
Это можно сделать несколько проще:
Код

DecimalSeparator = '.';

DecimalSeparator - это глобальная переменная, которую используют все VCL-ные функции преобразования


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1316 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.