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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1228767885
Platto
2008-12-08 23:24
2009.01.25
TDataSet


15-1228287788
@!!ex
2008-12-03 10:03
2009.01.25
Подскажите книгу по программированию в Mac OS X


2-1228889359
mfender
2008-12-10 09:09
2009.01.25
Ключи реестра в перечислимом свойстве


1-1206543130
voe
2008-03-26 17:52
2009.01.25
Описание Ссылки в Webbrowser


2-1229321648
SUN
2008-12-15 09:14
2009.01.25
Действия с датами





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