Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1429741804
Юрий
2015-04-23 01:30
2015.12.20
С днем рождения ! 23 апреля 2015 четверг


2-1403498172
Sakipiel
2014-06-23 08:36
2015.12.20
не отрабатывает событие дабл клик для некоторых компонентов


2-1403613872
Dennis I. Komarov
2014-06-24 16:44
2015.12.20
function Format


2-1403717600
Sakipiel
2014-06-25 21:33
2015.12.20
как добавить элемент в наследника TCollection


15-1423150223
Дмитрий С
2015-02-05 18:30
2015.12.20
Midi 2 Beep-код





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский