Главная страница
    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.02 c
1-9216
DJ X
2002-02-14 16:28
2002.03.04
Подбросте пример кода


1-9127
grab
2002-02-16 21:21
2002.03.04
заполнение ListBox


1-9113
Tolstomordik
2002-02-13 12:22
2002.03.04
Привет! StrPCopy (Dest, Src)возвращает nill. Как получить результат?


3-9099
yaJohn
2002-02-05 19:03
2002.03.04
WinXP Home edition. Spasite!!!


1-9119
AleksK
2002-02-16 15:28
2002.03.04
MDIChildren Form in DLL





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