Работая с моим текущим проектом набора компонентов на основе TFrames, я сталкиваюсь с различными случаями, когда я хочу заменить один из компонентов TFrame (обычно невизуальный) во время выполнения на один, который генерируется динамически во время выполнения.
Я думаю, что я, вероятно, нашел ответ на мою непосредственную проблему здесь , но в моем собственном копании и экспериментировании до того, как я нашел это, стало ясно, что мне нужно кое-что узнать о как Delphi обрабатывает ссылки на объекты, особенно в отношении форм / фреймов и (в общем) свойств класса, которые являются ссылками на объекты, а не не указательными значениями.
Конкретный пример одного эксперимента здесь:
(на форме с тремя кнопками TB)
procedure TForm1.Button3Click(Sender: TObject);
var
MyButton : TButton;
begin
MyButton := TButton.Create(Self);
MyButton.Caption := 'New Button';
MyButton.Parent := Form1;
Form1.Button2 := MyButton;
Form1.Repaint;
ShowMessage('Button2 caption = ' + Form1.Button2.Caption);
end;
Не заменяет Button2 созданной кнопкой, но показывает обе формы. Результаты ShowMessage указывают, что заголовок Button2 все еще = "Button2"
Я задаю себе такие вопросы, как "Является ли эта" замена "уникальной для форм, или это будет верно и для других классов?" и т.д. Короче говоря, я обнаружил еще одну провал в своем собственном невежестве. ;-) При работе с экземплярами / ссылками на объекты / разыменованием / определениями классов / свойствами классов и т. Д. Я обнаружил, что зачастую вещи ведут себя именно так, как они ожидают, но в других случаях - совсем нет и даже близко.
Ясно, что мне нужно изучить эту область. Вместо того, чтобы публиковать глупый вопрос после глупого вопроса, вращающегося вокруг этой темы, я подумал, что задам этот вопрос вместо этого:
Что такое действительно хороший справочник или учебное пособие для лучшего понимания тонких различий в отношении того, как Delphi справляется с такими вещами?
Заранее спасибо за вашу помощь!