![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ключи реестра в перечислимом свойстве [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. Что делать? Застрэлиться?