![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RTTI [D6, Win2k]
han-bratan © (2005-02-15 20:31:00)Слабо надеюсь что здесь ответят на мой вопрос но!
Есть класс, у него есть какоето свойство-класс
TMyClass.Property = TSomeClass
Создаем динамичестки экземпляр типа TMyClass, но! мы оперируем не экземпляром класса а указателем на него. Внимание, вопрос?! Как сделать так что б свойство TMyClass.Property указывало на новый динамически созданный объект? Функция которая это будет делать должна оперировать только RTTI
han-bratan (2005-02-16 13:44:00) [1]не, реестр не канает, суть в том чтоб вместо того чтоб писать Edit.Text := MyClass.SomeString
написать MyEditForm.EditedObject := MyObject; и оно все заполнит на форме. Короче я уже почти все сделал
Всем спасибо за внимание :)
TUser (2005-02-16 13:35:00) [2]Перебери все компоненты
for i:=0 to Form.ComponentCount-1 do
begin
{тут пишем ловим св-во и присваиваем ему значение}
end;
Функции RTTI для того, чтобы вытащить нужное св-во можно посмотреть в модуле TypInfo, что-нибудь типа GetWideStrProp, и другие GetXXXProp.
Возможно также, что все можно сделать и без всяких RTTI'ев - просто переписав все значения в массив вот таких записей
record
ComponentName,
TextValue: string;
end;
или что-то вроде этого. Если контролы принадлежат ограниченному набору классов - то их будет просто перебрать. Я бы даже считал, что такое решение лучше, т.к. сохраняет возможность добавить на форму и другие контролы тоже, а в твоем варианте придется при этом добавлять еще одно св-во. Хотя это вопрос вкуса.
Кстати, очень может быть, что поможет тебе TJvFormStorage - позволяет сохранять св-ва контролов на форме в реестр или в ини файлы. В любом случае, если будешь копать RTTI, то полезно изучить исходники этого компонента.
han-bratan (2005-02-16 12:14:00) [3]Есть класс со свойствами, есть форма с контролами имена которых совпадают с именами свойств, нужно написать механизм который будет заполнять контролы на форме и соотв. код, который будет брать значения из контролов и заганять в класс
TUser (2005-02-15 21:37:00) [4]Вопрос-загадка.
> но! мы оперируем не экземпляром класса а указателем на него.
> Внимание, вопрос?! Как сделать так что б свойство TMyClass.Property
> указывало на новый динамически созданный объект? Функция
> которая это будет делать должна оперировать только RTTI
Мы всегда оперируем указателем на экземпляр, таков Delphi.
Чтобы св-во указывало надо в конструкторе создать этот новый объект.
При чем тут RTTI - я не понял.
[1] в отличие от [0] оперирует свойством, которое указывает на объект того же класса, что и Self, или его потомка, а в задаче ничего об этом не сказано - TMyClass, TSomeClass.
default (2005-02-15 20:48:00) [5]
TMyClass = class
private
FThis: TMyClass;
public
constructor Create;
procedure PutHelloWorld;
property This: TMyClass read FThis;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TMyClass.Create;
begin
FThis := Self
end;
procedure TMyClass.PutHelloWorld;
begin
ShowMessage('Hello world!')
end;
procedure TForm1.Button1Click(Sender: TObject);
var
O: TMyClass;
begin
O := TMyClass.Create;
O.This.PutHelloWorld
end;
не вдаваясь в подробности зачем это надо:)