Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ключи реестра в перечислимом свойстве [D7]


mfender ©   (2008-12-10 09:09:00) 

Здравствуйте, товарищи!
Возник вопрос, каким образом корневые ключи реестра (HKEY_*) запихать в перечислимое свойство компонента, чтобы в Инспекторе выбрал ключ - установил значение поля?


Медвежонок Пятачок   (2008-12-10 12:30:00) [1]

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


Anatoly Podgoretsky   (2008-12-10 12:23:00) [2]

> mfender  (10.12.2008 11:00:05)  [5]

http://www.podgoretsky.com/ftp/Docs/Delphi/FAQ/ru.delphi.html#N144


Медвежонок Пятачок   (2008-12-10 11:43:00) [3]

накой он тебе сдался?

procedure TmfReg.SetRootKey(const Value: Roots);
begin
if FRootKey <> HKey(Value or $80000000) then
begin
  FRootKey := HKey(Value or $80000000);
end;
end;


mfender   (2008-12-10 11:00:00) [4]

Да, только теперь возникла большая проблема: в uses юнита DesignEditors есть ссылка на Proxies.dcu, которого просто нигде нет...


mfender   (2008-12-10 10:20:00) [5]

Окак! Спасибо, буду разобраться )


icWasya   (2008-12-10 09:37:00) [6]

type
 TRootProperty = class(TIntegerProperty)
 public
   function GetAttributes: TPropertyAttributes; override;
   Procedure GetValues(Proc: TGetStrProc); override;
   Function GetValue:String;Override;
   Procedure SetValue(const Value: string); Override;
 end;

{----------------
  TRootProperty
-----------------}
function TRootProperty.GetAttributes: TPropertyAttributes;
begin
 Result := [paValueList, paSortList, paMultiSelect];
end;//TRootProperty.GetAttributes
Procedure TRootProperty.GetValues(Proc: TGetStrProc);
begin
 Proc('HKEY_CLASSES_ROOT'      );
 Proc('HKEY_CURRENT_USER'      );
 Proc('HKEY_LOCAL_MACHINE'     );
 Proc('HKEY_USERS'             );
 Proc('HKEY_PERFORMANCE_DATA'  );
 Proc('HKEY_CURRENT_CONFIG'    );
 Proc('HKEY_DYN_DATA'          );
end;//TRootProperty.GetValues
Function TRootProperty.GetValue:String;
Var K:HKey;
Begin
 K:=GetOrdValue;
 If K=HKEY_CLASSES_ROOT       Then Result:='HKEY_CLASSES_ROOT'     Else
 If K=HKEY_CURRENT_USER       Then Result:='HKEY_CURRENT_USER'     Else
 If K=HKEY_LOCAL_MACHINE      Then Result:='HKEY_LOCAL_MACHINE'    Else
 If K=HKEY_USERS              Then Result:='HKEY_USERS'            Else
 If K=HKEY_PERFORMANCE_DATA   Then Result:='HKEY_PERFORMANCE_DATA' Else
 If K=HKEY_CURRENT_CONFIG     Then Result:='HKEY_CURRENT_CONFIG'   Else
 If K=HKEY_DYN_DATA           Then Result:='HKEY_DYN_DATA'         Else
 Result:=Inherited GetValue;
End;//TRootProperty.GetValue
Procedure TRootProperty.SetValue(Const Value:String);
Begin
 If CompareText('HKEY_CLASSES_ROOT'    ,Value)=0    Then Inherited SetValue('$80000000') Else
 If CompareText('HKEY_CURRENT_USER'    ,Value)=0    Then Inherited SetValue('$80000001') Else
 If CompareText('HKEY_LOCAL_MACHINE'   ,Value)=0    Then Inherited SetValue('$80000002') Else
 If CompareText('HKEY_USERS'           ,Value)=0    Then Inherited SetValue('$80000003') Else
 If CompareText('HKEY_PERFORMANCE_DATA',Value)=0    Then Inherited SetValue('$80000004') Else
 If CompareText('HKEY_CURRENT_CONFIG'  ,Value)=0    Then Inherited SetValue('$80000005') Else
 If CompareText('HKEY_DYN_DATA'        ,Value)=0    Then Inherited SetValue('$80000006') Else
 Inherited SetValue(Value);
End;//TRootProperty.SetValue

Procedure Register;
Begin
 RegisterPropertyEditor(TypeInfo(HKEY), TMyRegistry, 'RootKey', TRootProperty);
end;


Медвежонок Пятачок   (2008-12-10 09:27:00) [7]

Твой рут, равный HKEY_CLASSES_ROOT это ноль.
А настоящий рут это
HKEY_CLASSES_ROOT     = DWORD($80000000);


mfender   (2008-12-10 09:18:00) [8]

Поясню, как я попытался сделать. Всё традиционно:


type
 Roots = (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS,
   HKEY_PERFORMANCE_DATA, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);

 TmfReg = class(TComponent)
 private
   FRootKey: Roots;
   FRoot: HKEY;
   procedure SetRootKey(const Value: Roots);
 published
   property RootKey: Roots read FRootKey write SetRootKey;
 end;

implementation

procedure TmfReg.SetRootKey(const Value: Roots);
begin
 if FRootKey <> Value then
 begin
   FRootKey := Value;
 end;
end;



Вот на этом и застрял. Потому что Rootsникак не является HKEY. Что делать? Застрэлиться?


Наверх

Титульная страница Поиск, карта сайта Написать письмо