Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Защита компонента   Найти похожие ветки 

 
DimaBr   (2005-09-26 10:56) [0]

Хочу сделать простенькую защиту на компонент.
В момент создания компонента в дизайнере проверяется ключ реестра, минусуется значение и записывается обратно. При достижении определённого значения компонент теряет свою функциональность.
Но так как этих компонентов на форме достаточно много, то вся проверка будет выполнятся несколько раз (для каждого компонента по одному разу). Как это можно предотвратить ? То есть для одной формы (а ещё лучше для проэкта) выполнялась одна проверка (допустим первым созданным компанентом)


 
Igorek ©   (2005-09-26 11:04) [1]

Глобальная булевская переменная, инициализация в секции initialization значением false, в Create компонента если она false делаешь ее true и декремент счетчика в реестре.


 
Юрий Зотов ©   (2005-09-26 11:11) [2]

> инициализация в секции initialization значением false

Это лишнее. Она и так будет проинициализирована в False.


 
DimaBr   (2005-09-26 12:58) [3]

Написал
var Flag: boolean;
constructor Create(AOwner: TComponent);
begin
 ........
 if csDesigning in ComponentState then
   if not Flag then begin
     ShowMessage("aaa");
     Flag:= true;
   end;
end;

Всё хорошо, но срабатывает один раз в жизни (Delphi). То есть в первом открытом проэкте глобальная переменная переходит в TRUE, а потом при открытии других проэктов ничено не происходит. Может другие идеи есть.


 
Юрий Зотов ©   (2005-09-26 13:45) [4]

> DimaBr   (26.09.05 12:58) [3]

Так Вы же именно этого и хотели, что же еще нужно-то?

Но разве для Вашей задумки этого недостаточно? ИМХО, вполне нормально. Если же нужно декрементировать счетчик именно один раз на каждый открытый проект, то придется, видимо, писать эксперт IDE, срабатывающий при открытии проектов. Вот и прикиньте сами - нужны ли такие навороты ради такой простой защиты? Которая, кстати, все равно будет моментально взломана (если, конечно, компонент стоит того, чтобы его ломать).

Или пишите в реестр не счетчик, а  дату, тогда вообще все просто - каждый экземпляр компонента просто проверяет эту дату.


 
DimaBr   (2005-09-26 14:02) [5]

Я вроде бы придумал выход. При уничтожении компонента подсчитываю количество оставшихся компонент моего класса на форме и если это один (то есть удаляем последний компонент) то Flag := false;

 x := 0;
 with GetParentForm(self)
 for i := 0 to ComponentCount - 1 do
    if Components[i] is TMyComponent
      then Inc(x);
 Flag := x <> 1;

Как Вы считаете, этот вариант подойдёт ?



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

Форум: "Компоненты";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.013 c
3-1138183705
Вольный Стрелок
2006-01-25 13:08
2006.03.19
NULL для параметра типа TIMESTAMP


2-1141197162
Wel
2006-03-01 10:12
2006.03.19
Массив jpg из файла


15-1140558633
xayam
2006-02-22 00:50
2006.03.19
Ресурсы по intraweb studio есть?


15-1140690398
msguns
2006-02-23 13:26
2006.03.19
Популярность форума


11-1121813528
lundeholm
2005-07-20 02:52
2006.03.19
Want a simple KOLFTP example





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