Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Основна";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

Вниз

Помилка Can not assign a TFont to a TFont Знайти схожі гілки


Pupkov ©   (2004-11-28 23:20) [0]

Є у мене тут один трабл.
Задумав е днями одну програму, що працює з плагінами. Плагін виконаний у вигляді бібліотеки DLL. Для організації інтерфейсів спілкування додатки і плагіна спроектував два класи:
1. TESPluginAppInterface = class
public
PluginType: 1..3;
procedure AddControl (AControl: TControl); virtual; stdcall;
end;
Для організації інтерфейсу плагін -> додаток. Його методи реалізуються в модулі додатка, а в модулі плагіна його методи описуються як абстрактні

2. TESAppPluginInterface = class
public
procedure LoadFromFile (FileName: String; WinCtrl: TWinControl); virtual; stdcall; abstract;
end;
Для організації інтерфейсу додаток -> плагін. Його методи реалізуються в модулі плагіна, а в модулі пріложенгія його методи описуються як абстрактні.

Ну так ось. Коли програму слід відкрити будь-який файл то воно звертається за цим до плагіну використовуючи метод LoadFromFile класу TAppPluginInterface, як параметри передаються назва файлу і якийсь віконний контрол. Метод реалізований всередині плагіна ось так:

procedure TESAppPluginInterface.LoadFromFile (FileName: String;
WinCtrl: TWinControl); virtual; stdcall; abstract;
було
Control: TControl
починати
Control: = TControl.Create (WinCtrl);
PluginAppInterface.AddControl (Control);
end;

Тобто якщо плагіну потрібно створити какойліібо контрол і розташувати його в додатку то він створює його і і використовуючи метод AddControl класу TPluginAppInterface передає його додатком. Цей метод реалізований всередині програми ось так:

procedure TESPluginAppInterface.AddControl (AControl: TControl); virtual; stdcall;
begin
Control.Parent: = Panel1;
end;

Тобто отримуючи контрол додаток саме принемает рішення куди запхати його і запихає (зокрема тут запиває на Panel1).
Так от рядок Control.Parent: = Panel1 в Рантайм генерує помилку: "Can not assign a TFont to a TFont". Після пильної розглядання під мікроскопом з'ясувалося що помилку викликає метод Control.InsertControl. Весь вечір бився з виявленням причини виникнення помилки але так і не допедріл чому це відбувається.



jack128 ©   (2004-11-29 00:23) [1]

потрібно компілювати програму і плагіни з run time packages.



Игорь Шевченко ©   (2004-11-29 01:30) [2]


> Весь вечір бився з виявленням причини виникнення помилки


У Exe TFont знаходиться за однією адресою, в DLL по іншому. Операція IS порівнює адреси, якщо не збігаються, значить TFont-и різні.



REA   (2004-11-29 10:10) [3]

Якщо планується використовувати класи в plugin, то краще застосовувати packages замість DLL або COM-технологію. У всіх способів втім є свої переваги і недоліки.



Amoeba ©   (2004-11-29 10:51) [4]

На http://www.delphikingdom.com ( "Корорлевство Delphi") є аж цілих дві серйозних статті, присвячених створенню та використанню plugin-ів. Дуже рекомендую.



сторінки: 1 вся гілка

Форум: "Основна";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

Вгору





Пам'ять: 0.56 MB
Час: 0.062 c
3-1100183124
red_imp
2004-11-11 17:25
2004.12.12
Народ допоможіть будь ласка, як в QReport в SubDetail вставити


1-1101608757
Bobby Digital
2004-11-28 05:25
2004.12.12
Listbox pt.2


4-1098802794
дзеркало
2004-10-26 18:59
2004.12.12
Як скористатися функцією з dll


1-1101473863
кактус
2004-11-26 15:57
2004.12.12
Такий шкідливий ІнДізайн !!!!!


4-1098963515
грифон
2004-10-28 15:38
2004.12.12
Дізнатися шлях до excel





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська