Форум: "Начинающим";
Текущий архив: 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