Головна сторінка
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.051 c
1-1101844581
Der Juvas
2004-11-30 22:56
2004.12.12
очищення рядка


3-1100590139
dron-s
2004-11-16 10:28
2004.12.12
За рядкове виділення в таблиці


14-1101113185
Гість
2004-11-22 11:46
2004.12.12
компанія "Інформконтакт"


3-1100183875
msguns
2004-11-11 17:37
2004.12.12
конструктор запитів


6-1096625251
leonidus
2004-10-01 14:07
2004.12.12
Інтеграція програми з Оперою





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