Главная страница
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.01 c
1-9218
avk
2002-02-15 11:33
2002.03.04
ListBox переход на следующую строку...


1-9124
IIL
2002-02-08 08:51
2002.03.04
макроподстановки


1-9170
ProstoChaynik
2002-02-14 09:25
2002.03.04
цвет TButton


6-9247
Snake2000
2001-12-11 12:41
2002.03.04
Срочно!!! - Post-запрос


4-9340
Snake2000
2001-12-19 14:50
2002.03.04
Поверх других :)