Это звучит как проект класса, и вы, кажется, не понимают некоторые из используемая терминология.
Чтобы обобщить это немного, в Delphi экземпляры любого класса, который вы определяете, должны создаваться динамически. Это контрастирует с записями, которые могут быть объявлены статически как переменные, так и динамически распределены.
В обоих случаях (классы и записи) при динамическом создании экземпляра память для них выделяется из кучи, а не из стека (где создаются локальные вары). Но в каждом случае синтаксис различен.
В Delphi это резко контрастирует с C++, потому что классы C++ в основном представляют собой структуры (например, записи Delphi) с некоторыми украшениями, что означает, что вы можете объявлять экземпляры классов в C++ в качестве переменных-членов, где их память выделяется в стеке так же, как вы можете объявлять экземпляры структур, а также записи в Pascal.
Но это не работает в Delphi, хотя синтаксис выглядит одинаково. Это связано с тем, что в Delphi переменные, относящиеся к классам, действительно являются указателями, как на C++, но они автоматически разыменовываются, поэтому они выглядят синтаксически, как если бы они были просто экземплярами, а не указателем на экземпляр.
В Delphi, если вы работаете с классом, вы ДОЛЖНЫ создать его динамически (вызывая TMyObj.Create (...)). Таким образом, каждый класс имеет связанный с ним конструктор; если вы его не определяете, вызывается конструктор TObject.Create по умолчанию. (Это опять-таки отличается от того, что на C++, где для компилятора будет создан конструктор по умолчанию для любого класса, который нуждается в нем, и он не определен.)
Я повторю это снова, чтобы вы поняли это.Все, что определено, как это в Delphi:
type
Twhatever = class
эквивалентно следующему:
type
Twhatever = class(TObject)
и абсолютно должны быть созданы динамически в коде следующим образом:
var
xyz : Twhatever; // xyz is really a pointer here! It's NOT an "instance"
begin
xyz := Twhatever.Create(); // you need to create an instance using the Create() method
try
// do some stuff
finally
xyz.Free;
end;
Вы не можете НЕ использовать хуг без предварительного создания экземпляра его с помощью метода .Create.
Похоже, вы имеете в виду «компоненты» и «элементы управления» вместо «объектов». –
Это не имеет большого смысла. Вернемся к началу. Чего вы пытаетесь достичь? –