![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как добавить элемент в наследника TCollection
Sakipiel © (2014-06-25 21:33:00)есть реквизит класса 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, так и в его наследниках, но ничего в этом ужасе так и не понял...потому просто как добавить элемент? )
Sakipiel (2014-06-26 19:36:00) [1]легко ж было догадаться ))
Sakipiel (2014-06-26 19:35:00) [2]ураа
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:31:00) [3]
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:20:00) [4]
> А какой смысл в плагинах, реализующих методы, о которых
> менеджер плагинов ничего не знает?
эх, велосипед не мой, я просто разместил объяву )
я просто пытаюсь юзать чужой компонент, я его не программировал, я понятия не имею как он работает, в этом ведь и смысл чужого компонента )
Проблема в том, что я компонент не кидаю на форму, а создаю программно, а значит и плагин нужно создать и привязать программно к компоненту, а я знаю только как его на форме привязать через объект инспектор (
там все замечательно работает, просто я не могу понять как)
Sakipiel (2014-06-26 19:16:00) [5]впрочем нужно сказать что это не работает, как и это
TPSPlugins.Create(ce);
procedure TMainForm.FormCreate(Sender: TObject);
var Plugin :TPSPlugin;
begin
Plugin := TPSPlugin.Create(self);
TPSPluginItem(ce.Plugins.Add).Plugin := Plugin;
end;
Styx (2014-06-26 19:10:00) [6]
> если он создает TPSPlugin, то в нем нет методов наследника
А какой смысл в плагинах, реализующих методы, о которых менеджер плагинов ничего не знает?
Sakipiel (2014-06-26 18:56:00) [7]
var Plugin :TPSPlugin;
begin
Plugin := TPSImport_MyClass.Create(self);
TPSPluginItem(ce.Plugins.Add).Plugin := Plugin;
end;
jack128_ (2014-06-26 10:59:00) [8]TPSDllPlugin.Create(AMyPluginCollection);
Sakipiel (2014-06-26 10:32:00) [9]я тупой, я не понимаю
function TSpotCollection.Add: TSpot;
begin
// Получаем общий TCollectionItem и приводим его к нашему TSpot
Result := TSpot(inherited Add)
end;
в ссылке выше, Адд переопределен и там приведение типа, но тогда у меня на каждого наследника должен быть отдельный АДД, в TPSPlugin же используется оригинальный АДД из TCollection, и тем не менее как то это уже работает, поэтому дописывать что-то не вариант.
Inovet (2014-06-26 09:09:00) [10]> [7] Sakipiel (26.06.14 09:02)
> то в нем нет методов наследника...
Для этого придумали полиморфизм.
Sakipiel (2014-06-26 09:02:00) [11]
> Как это непонятный, если конструктор коллекции задаёт тип
> элементов?
но даже если так, то у меня разные типы элементов, хоть они и все наследники класса TPSPlugin. если он создает TPSPlugin, то в нем нет методов наследника...
MBo (2014-06-26 08:38:00) [12]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=215
MBo (2014-06-26 08:37:00) [13]>он добавляет какой то непонятный элемент
Как это непонятный, если конструктор коллекции задаёт тип элементов?
Sakipiel (2014-06-26 07:20:00) [14]не я, это rem object я просто пытаюсь понять как в него программно элемент добавить )
brother (2014-06-26 07:17:00) [15]кто писал класс TPSPlugins ?
Sakipiel (2014-06-26 06:47:00) [16]метод есть, но в нем нет параметра, он добавляет какой то непонятный элемент, и что мне с ним делать? он же не TPSDllPlugin добавит.
Плохиш (2014-06-26 01:30:00) [17]Ну если в коллекции не стало метода адд, то делфи точно умерло.