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

Вниз

На RTTI-ку навались (пробуем создать инспектор объектов)   Найти похожие ветки 

 
Zergling   (2003-02-25 06:19) [0]

Привет ВСЕМ! Помогите разобраться уважаемые, какие же грабли у меня в коде зарыты.

ValueListProperty - это TValueListProperty (Additional)

В данную процедуру, как объект передаю TComboBox

procedure ShowPropObject(AClass: TObject);
var
PropList: PPropList;
ClassTypeInfo: PTypeInfo;
ClassTypeData: PTypeData;

// OrdTypeInfo: PTypeInfo;
OrdTypeData: PTypeData;
OrdPropInfo: PPropInfo;

I, J: integer;
NumProps: Integer;
S1, S2: string;
S: TStringList;
begin
{ по примеру из книги Xavier Pacheco и Steve Teixeira }
ClassTypeInfo := AClass.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
if ClassTypeData.PropCount <> 0 then
begin
GetMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
try
GetPropInfos(AClass.ClassInfo, PropList);
for i := 0 to ClassTypeData.PropCount - 1 do
if not (PropList[i]^.PropType^.Kind = tkMethod) then
begin
if PropList[i]^.PropType^.Kind = tkClass then
begin
if (GetObjectProp(AClass, PropList[i]^.Name)<>nil) and (PropList[i]^.PropType^.Kind <> tkDynArray) then S1 := "+"+PropList[i]^.Name else S1 := PropList[i]^.Name;
S2 := "("+PropList[i]^.PropType^.Name+")";
end else
begin
S1 := PropList[i]^.Name;
S2 := GetPropValue(AClass,PropList[i]^.Name);
end;
FormObjInspector.ValueListProperty.InsertRow(S1, S2, true);
{ Если данное свойство является перечисляемым }

if PropList[i]^.PropType^.Kind = tkEnumeration then
Begin
{ Достань мне информацию о данном свойстве }
OrdPropInfo:=GetPropInfo(AClass, String(PropList[i]^.Name));
OrdTypeData:=GetTypeData(OrdPropInfo^.PropType^);
{ эту перменную (S) после заполнения значениями свойства
приравниваем к FormObjInspector.ValueListProperty.ItemProps[0].PickList }
S := TStringList.Create;
{ Первое свойство которое попадается по пути - HelpType. Переменная S прокручивается в цикле 2 раза
т.к. у HelpType всего два значения (htContext, htKeyword) }
for J:=OrdTypeData.MinValue to OrdTypeData.MaxValue do
S.Add(string(GetEnumName(OrdTypeData.BaseType^, J)));
{ Если выше поставить Break Point, то дельфя показывает "S=()" }
{ Счетчик переменной S не пуст, при попытке присваивания переменной S
вываливается Access Violation (в чем грабли до меня так и недоходит) }
if s.Count <> 0 then FormObjInspector.ValueListProperty.ItemProps[FormObjInspector.ValueListProperty.RowCount-1].PickList:=S;
S.Free;
end;
end;
NumProps := GetPropList(AClass.ClassInfo, [tkMethod], PropList);
for i := 0 to NumProps - 1 do
FormObjInspector.ValueListEvents.InsertRow(PropList[i]^.Name, PropList[i]^.PropType^.Name, true);
finally
FreeMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
end;
end;
end;


 
Zergling   (2003-02-25 12:03) [1]

Нет желающих голову над RTTI поломать? Очень жаль.


 
Владислав   (2003-02-25 12:43) [2]

А что над ней голову ломать?! Ей пользоваться надо :)
А ошибка, скорее всего, в пятой строчке кода, который ты не привел...


 
Zergling   (2003-02-25 13:34) [3]

Владислав © (25.02.03 12:43)

Непонял, это ты про че?



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

Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.037 c
1-17098
Checist [root]
2003-02-24 21:47
2003.03.06
Выделенная ячейка


14-17300
SergeN
2003-02-20 08:17
2003.03.06
Проблемы с виртуальной памятью


1-16996
Shc
2003-02-21 19:31
2003.03.06
Комбинация клавиш на вставку


6-17236
Voyager
2003-01-17 18:23
2003.03.06
Intraweb and IIS


3-16855
korvin
2003-02-14 14:15
2003.03.06
QReport в несколько столбцов





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