Форум: "Начинающим";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];
Внизкак добавить элемент в наследника TCollection Найти похожие ветки
← →
Sakipiel (2014-06-25 21:33) [0]есть реквизит класса FPlugins: TPSPlugins;
определение которого выглядит так:TPSPluginItem = class(TCollectionItem)
private
FPlugin: TPSPlugin;
procedure SetPlugin(const Value: TPSPlugin);
protected
function GetDisplayName: string; override;
public
procedure Assign(Source: TPersistent); override; //Birb
published
property Plugin: TPSPlugin read FPlugin write SetPlugin;
end;
TPSPlugins = class(TCollection)
private
FCompExec: TPSScript;
protected
function GetOwner: TPersistent; override;
public
constructor Create(CE: TPSScript);
end;
и есть наследник этого класса, например,TPSDllPlugin = class(TPSPlugin)
public
procedure CompOnUses(CompExec: TPSScript); override;
procedure ExecOnUses(CompExec: TPSScript); override;
end;
такой. И мне нужно в реквизит FPlugins добавить этого наследника Программно. В компоненте есть возможность делать это через объект инспектор, но мне нужно программно. я долго копался как в TCollection, так и в его наследниках, но ничего в этом ужасе так и не понял...потому просто как добавить элемент? )
← →
Плохиш © (2014-06-26 01:30) [1]Ну если в коллекции не стало метода адд, то делфи точно умерло.
← →
Sakipiel (2014-06-26 06:47) [2]метод есть, но в нем нет параметра, он добавляет какой то непонятный элемент, и что мне с ним делать? он же не TPSDllPlugin добавит.
← →
brother © (2014-06-26 07:17) [3]кто писал класс TPSPlugins ?
← →
Sakipiel (2014-06-26 07:20) [4]не я, это rem object я просто пытаюсь понять как в него программно элемент добавить )
← →
MBo © (2014-06-26 08:37) [5]>он добавляет какой то непонятный элемент
Как это непонятный, если конструктор коллекции задаёт тип элементов?
← →
MBo © (2014-06-26 08:38) [6]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=215
← →
Sakipiel (2014-06-26 09:02) [7]
> Как это непонятный, если конструктор коллекции задаёт тип
> элементов?
но даже если так, то у меня разные типы элементов, хоть они и все наследники класса TPSPlugin. если он создает TPSPlugin, то в нем нет методов наследника...
← →
Inovet © (2014-06-26 09:09) [8]> [7] Sakipiel (26.06.14 09:02)
> то в нем нет методов наследника...
Для этого придумали полиморфизм.
← →
Sakipiel (2014-06-26 10:32) [9]я тупой, я не понимаю
function TSpotCollection.Add: TSpot;
begin
// Получаем общий TCollectionItem и приводим его к нашему TSpot
Result := TSpot(inherited Add)
end;
в ссылке выше, Адд переопределен и там приведение типа, но тогда у меня на каждого наследника должен быть отдельный АДД, в TPSPlugin же используется оригинальный АДД из TCollection, и тем не менее как то это уже работает, поэтому дописывать что-то не вариант.
← →
jack128_ (2014-06-26 10:59) [10]TPSDllPlugin.Create(AMyPluginCollection);
← →
Sakipiel (2014-06-26 18:56) [11]
var Plugin :TPSPlugin;
begin
Plugin := TPSImport_MyClass.Create(self);
TPSPluginItem(ce.Plugins.Add).Plugin := Plugin;
end;
← →
Styx (2014-06-26 19:10) [12]
> если он создает TPSPlugin, то в нем нет методов наследника
А какой смысл в плагинах, реализующих методы, о которых менеджер плагинов ничего не знает?
← →
Sakipiel (2014-06-26 19:16) [13]впрочем нужно сказать что это не работает, как и это
TPSPlugins.Create(ce);
procedure TMainForm.FormCreate(Sender: TObject);
var Plugin :TPSPlugin;
begin
Plugin := TPSPlugin.Create(self);
TPSPluginItem(ce.Plugins.Add).Plugin := Plugin;
end;
← →
Sakipiel (2014-06-26 19:20) [14]
> А какой смысл в плагинах, реализующих методы, о которых
> менеджер плагинов ничего не знает?
эх, велосипед не мой, я просто разместил объяву )
я просто пытаюсь юзать чужой компонент, я его не программировал, я понятия не имею как он работает, в этом ведь и смысл чужого компонента )
Проблема в том, что я компонент не кидаю на форму, а создаю программно, а значит и плагин нужно создать и привязать программно к компоненту, а я знаю только как его на форме привязать через объект инспектор (
там все замечательно работает, просто я не могу понять как)
← →
Sakipiel (2014-06-26 19:31) [15]
TPSPlugin = class(TComponent)
public
procedure CompOnUses(CompExec: TPSScript); virtual;
procedure ExecOnUses(CompExec: TPSScript); virtual;
procedure CompileImport1(CompExec: TPSScript); virtual;
procedure CompileImport2(CompExec: TPSScript); virtual;
procedure ExecImport1(CompExec: TPSScript; const ri: TPSRuntimeClassImporter); virtual;
procedure ExecImport2(CompExec: TPSScript; const ri: TPSRuntimeClassImporter); virtual;
end;
TPSDllPlugin = class(TPSPlugin)
public
procedure CompOnUses(CompExec: TPSScript); override;
procedure ExecOnUses(CompExec: TPSScript); override;
end;
блин...наследник таки не наследник коллекции...
← →
Sakipiel (2014-06-26 19:35) [16]ураа
procedure TMainForm.FormCreate(Sender: TObject);
var Plugin :TPSPlugin;
begin
Plugin := TPSDllPlugin.Create(self);
TPSPluginItem(ce.Plugins.Add).Plugin := Plugin;
end;
← →
Sakipiel (2014-06-26 19:36) [17]легко ж было догадаться ))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c