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

Вниз

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

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

Наверх





Память: 0.45 MB
Время: 0.005 c
4-9348
Oxy2
2001-12-28 14:25
2002.03.04
Как вычислять системные цвета?


1-9132
Fast
2002-02-17 09:45
2002.03.04
Элементарная вещь


1-9112
ДмитрийВ
2002-02-15 08:18
2002.03.04
Динамический массив


1-9162
foks
2002-02-02 11:19
2002.03.04
У меня не работает Delphi 5.0 из под Windows XP


1-9235
lightix
2002-02-15 15:09
2002.03.04
Подскажите, как из программы передать данные в Excel?





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