|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
[D7][RTTI] узнать имя свойства из его сеттера
привет, очень хочется странного:
Код:
tsomeclass = class( TPersistent ) private Fabc: Integer; procedure Setabc(const Value: Integer); published property abc : Integer read Fabc write Setabc; end ; .... procedure tsomeclass.Setabc(const Value: Integer); begin Fabc := Value; // здесь хочу получить строку содержащую имя property ('abc') // а в идеале вообще TPropInfo для этого property // но согласен даже на имя самого сеттера ('Setabc') end; в частности хочется автоматом апдейтить базу данных при изменении значения property помогайте, если не перевелись дельфисты ;- готов увидеть любые извращения. важен результат ps. версия дельфи номер семь |
#2
|
|||
|
|||
Вроде такое невозможно.
Можно попробовать вытащить имя текущей процедуры из CallStack. Только вот зачем такие извращения. С учетом целевой задачи, обновления БД, лучше сделать так, как это сделано у TDataSet. Есть некоторая метаинформация (массив Fields : TField) и соотв. методы для работы с ним. |
#3
|
|||
|
|||
Может просто пробежаться по всем свойствам, и сравнить адрес сеттера с адресом функции?
|
#4
|
||||
|
||||
Вроде бы не очень сложно:
Код:
procedure TSomeClass.Setabc(const Value: Integer); var PropList: PPropList; I: Integer; begin Fabc := Value; for I := 0 to GetPropList(Self, PropList) - 1 do if @PropList[i].SetProc = @SetAbc then ShowMessage(PropList[i].Name); // PropList[i] -- и есть его PropInfo end; Не стоит путать форумы с богадельнями. © Bargest |
#5
|
|||
|
|||
увы...
Код:
procedure TSomeClass.Setabc(const Value: Integer); var PropList: PPropList; I: Integer; begin Fabc := Value; for I := 0 to GetPropList(Self, PropList) - 1 do if @PropList[i].SetProc = @SetAbc then // ___________ Error: variable required ShowMessage(PropList[i].Name); // PropList[i] -- и есть его PropInfo end; сейчас беру имя сеттера из callstack (JclDebug). как бы работает, но вариант с адресом мне больше по душе. только вот как заставить работать вышеприведенный код? |
#6
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |