![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
привет, очень хочется странного:
Код:
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;![]() |
|
#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
|
||||
|
||||
|
Цитата:
|