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

Вниз

Редактор свойства   Найти похожие ветки 

 
kaif ©   (2002-02-14 21:06) [0]

Хочу сделать редактор свойства Integer, чтобы оно принимало 2 значения:
HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE.

Но что-то не работает. Даже список не выпадает в ObjectInspector.
Что тут не так, и как лучше сделать?

uses
Classes, dsgnintf, TypInfo, Windows;

type
TRegistryRootKeyProperty = class(TEnumProperty)
public
function GetValue: string; override;
procedure SetValue(const Value: string); override;
procedure GetValues(Proc: TGetStrProc); override;
end;

function TRegistryRootKeyProperty.GetValue: string;
begin
if GetOrdValue = HKEY_CURRENT_USER then
Result := "HKEY_CURRENT_USER"
else
Result := "HKEY_LOCAL_MACHINE";
end;

procedure TRegistryRootKeyProperty.GetValues(Proc: TGetStrProc);
begin
inherited;
Proc("HKEY_CURRENT_USER");
Proc("HKEY_LOCAL_MACHINE");
end;

procedure TRegistryRootKeyProperty.SetValue(const Value: string);
begin
inherited;
if Value = "HKEY_CURRENT_USER" then
SetOrdValue(HKEY_CURRENT_USER)
else
SetOrdValue(HKEY_LOCAL_MACHINE);
end;


 
Набережных С.   (2002-02-14 22:06) [1]

function TRegistryRootKeyProperty.GetAttributes: TPropertyAttributes;
begin
result:=[paValueList, paSortList];
end;


 
kaif ©   (2002-02-15 03:03) [2]

Да нет, не помогает. Я не переопределял этот метод, так как в предке есть что-то похожее. Здесь явно проблема с типом данных (значения не идут подряд, как в перечислимых типах). Но от какого PropertyEditor наследовать - не могу сообразить... к тому же компилятор стал сообщать всякие Hints типа
"comparing signed and unsigned types - wineded both operations".
"constant expression violates subrange bounds"...
Дело в том, что я регистрирую свойство так:
RegisterPropertyEditor(TypeInfo(LongWord), TMyComponent, "RegistryRootKey", TRegistryRootKeyProperty);


 
Юрий Зотов (M) ©   (2002-02-15 09:43) [3]

1. Как объявлено само свойство? Похоже, причина в этом.

2. "comparing signed and unsigned types - wineded both operations". Это компилятор информирует, что в методе GetValue сравниваются знаковое и беззнаковое целое. Можно не обращать на это внимания, работать все равно будет правильно.

2. Самое главное - нужный эффект можно получить и без всяких редакторов. См. RegisterIntegerConsts.


 
kaif ©   (2002-02-15 10:25) [4]

В любом случае спасибо за помощь, но проблема оказалась в другом. Беззнаковый тип DWORD, который определен для значений HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE в Windows.pas конфликтовал с типом Longint самого свойства еще на стадии компиляции. Я не обратил внимания на подсказки компилятора (сама компиляция проходила)... Теперь все работает. Я произвел потомка от TIntegerProperty, переопределив GetValue и SetValue без inherited.


 
kaif ©   (2002-02-17 17:45) [5]

А вообще-то RegisterIntegerConsts - хорошая идея! Просто не хотел бросать то, что начал, не разобравшись.



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
7-9308
neodiX
2001-11-29 15:40
2002.03.04
Kak programno otkliucit klavu i mysh v WinNT i Win2k?


6-9246
Snake2000
2001-12-13 15:15
2002.03.04
ТВебБраузер


1-9236
Alex L.
2002-02-15 17:39
2002.03.04
Объединение компонентов


3-9089
Vks
2002-02-07 09:36
2002.03.04
Какая редакция Delphi нужна для работы с InterBase или MSSQL?


1-9118
ATLANTIDO
2002-02-16 01:33
2002.03.04
KILL FORM