Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизRTTI Найти похожие ветки
← →
han-bratan (2005-02-15 20:31) [0]Слабо надеюсь что здесь ответят на мой вопрос но!
Есть класс, у него есть какоето свойство-класс
TMyClass.Property = TSomeClass
Создаем динамичестки экземпляр типа TMyClass, но! мы оперируем не экземпляром класса а указателем на него. Внимание, вопрос?! Как сделать так что б свойство TMyClass.Property указывало на новый динамически созданный объект? Функция которая это будет делать должна оперировать только RTTI
← →
default © (2005-02-15 20:48) [1]
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;
не вдаваясь в подробности зачем это надо:)
← →
TUser © (2005-02-15 21:37) [2]Вопрос-загадка.
> но! мы оперируем не экземпляром класса а указателем на него.
> Внимание, вопрос?! Как сделать так что б свойство TMyClass.Property
> указывало на новый динамически созданный объект? Функция
> которая это будет делать должна оперировать только RTTI
Мы всегда оперируем указателем на экземпляр, таков Delphi.
Чтобы св-во указывало надо в конструкторе создать этот новый объект.
При чем тут RTTI - я не понял.
[1] в отличие от [0] оперирует свойством, которое указывает на объект того же класса, что и Self, или его потомка, а в задаче ничего об этом не сказано - TMyClass, TSomeClass.
← →
han-bratan (2005-02-16 12:14) [3]Есть класс со свойствами, есть форма с контролами имена которых совпадают с именами свойств, нужно написать механизм который будет заполнять контролы на форме и соотв. код, который будет брать значения из контролов и заганять в класс
← →
TUser © (2005-02-16 13:35) [4]Перебери все компоненты
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 13:44) [5]не, реестр не канает, суть в том чтоб вместо того чтоб писать Edit.Text := MyClass.SomeString
написать MyEditForm.EditedObject := MyObject; и оно все заполнит на форме. Короче я уже почти все сделал
Всем спасибо за внимание :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c