169 похожих чатов

Тема интересная. У меня тоже имеется ряд форм, фреймов и

библиотек, которые неплохо было бы закинуть в bpl. Насчёт наследования, как я понял, есть свой расширенный наследник TFrame. А что мешает вытащить весь функционал по этому фрейму в отдельный модуль и там всё отрабатывать, передавая экземпляры фреймов ? Если подумать, ЧТО из этого наследника TFrame, какие данные и события отделить, сделать это можно и без наследования. Я так делал обвязку для ряда форм, работает много лет. Кстати, контролы также расширял дополнительными данными и поведением, но там следует создание и удаление этих контролов отслеживать, ибо сам контрол должен понимать, что он расширенный и подчищать. На каком этапе работа с BPL ? У меня на уровне понимания необходимости, не работал с bpl-ями, а у тебя ? Вопрос к ALL : какие подводные камни в идее - перенести ряд юнитов в bpl и кидать разрабам вместо некоторых модулей - bpl ? код из него есть шанс вытащить?

3 ответов

50 просмотров

Код вытащить нельзя

Ну я вот применяю их уже пару лет в достаточно больших проектах, где нужна модульность... Например я сделал 2D-рендерер и скомпилил его в скажем ebgine.bpl... В global_app.pas этой bpl-ки определил глобальные переменные - которым присваиваю создаваемые экземпляры объектов. Теперь я подключаю этот пакет к exe. Ему виден этот рендерер. Создаю dll-ки плагины, подключаю к ним помимо rtl, vcl свой engine.bpl - теперь объекты из global_app.pas доступны и этим dll-кам - они могут манипулировать рендерером... А уже экзешник менеджерит эти плагины индексируя их инициализируя выгружая и т. д... И у нас в приложении общий менеджер памяти общий Application, Screen и т. д - никаких конфликтов... Единственнный недостаток (или преимущество) - всё собирать надо в одной версии Delphi и таскать с собой rtl.bpl, vcl.bpl. Ну или вот у вас есть форма приложения и плагины должны внедряться в её меню, создавать тулбары на этой форме - определяем в общем пакете переменную HostForm:TForm; HostMenu:TMenu... Когда exe создаст форму он может сделать присвоение этим переменным главной формы и меню свои, затем индексировать плагины - плагинам будет известна главная форма, или панель тулбара из global_app.pas, и меню основной формы, чтобы там насовать своих итемов... Как-то так!

Так вот не хочется фреймы засовывать в классы контейнеры, тогда фреймам потребуется вытаскивать класс-контейнер-родитель, чтобы взаимодействовать с приложением... Определять все обработчики событий во фрейме, а если нужны новые - то дописывать их...

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта