Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Ключи реестра в перечислимом свойстве   Найти похожие ветки 

 
mfender   (2008-12-10 09:09) [0]

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


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

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


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. Что делать? Застрэлиться?


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

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


 
icWasya ©   (2008-12-10 09:37) [3]

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;



 
mfender   (2008-12-10 10:20) [4]

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


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

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


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

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

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


 
Anatoly Podgoretsky ©   (2008-12-10 12:23) [7]

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

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


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

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



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

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
11-1189704532
Robt
2007-09-13 21:28
2009.01.25
Потоки


10-1150406321
AlexeyT
2006-06-16 01:18
2009.01.25
WMP 6 - WMP 9 ActiveX


11-1196770055
Сидор
2007-12-04 15:07
2009.01.25
Корректный перенос проекта в другую папку


2-1229116495
Михаил
2008-12-13 00:14
2009.01.25
Движение


2-1229273738
Morpheus
2008-12-14 19:55
2009.01.25
простой вопрос по RTTI