Главная страница
    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.45 MB
Время: 0.009 c
3-16961
Sergey Masloff
2003-02-17 13:27
2003.03.06
Всем лентяям и чайникам посвящается...


4-17463
ers
2003-01-17 16:24
2003.03.06
Как эмулировать клик на ListBox`e?


1-17011
kex86
2003-02-25 03:03
2003.03.06
VK_LButton


14-17385
lds
2003-02-16 20:52
2003.03.06
WinLIRC


14-17377
SeNtiMeL
2003-02-15 01:15
2003.03.06
Обработка сообщения WM_SYSCOMMAND !!!!





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