Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109

Загрузка фрэйма из DLL

10.04.2015, 21:38. Показов 2882. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, пытаюсь разработать плагины, плагин должен содержать фрэйм. Хост приложение получает этот фрэйм и вставляет его св меню. Мучаюсь 3 день не могу сообразить. нашел пример:

App
Delphi
1
2
3
4
5
6
7
procedure AddFrame(ApplicationHandle, ParentHandle: THandle); stdcall;
external 'DLLFrame.dll';
 
procedure TForm1.Button1Click(Sender: TObject);
begin
AddFrame(Application.Handle, Panel1.Handle);
end;
Dll
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure AddFrame(ApplicationHandle, ParentHandle: THandle); stdcall;
var
Frame1: TFrame1;
AppHandle: THandle;
begin
AppHandle := Application.Handle;
Application.Handle := ApplicationHandle;
Frame1 := TFrame1.Create(Application);
Frame1.ParentWindow := ParentHandle;
SetParent(Frame1.Handle, ParentHandle);
Frame1.Align := alClient;
Frame1.Visible := True;
Application.Handle := AppHandle;
end;
 
exports
AddFrame;
переделывал ее в функцию но работать не хочет. На сколько понял все дело в SetParent(Frame1.Handle, ParentHandle);

фрэйм создается и просто помещается поверх меню.(не прикрепляясь к итему) . Полагаю вместо Frame1.Handle нужно как то подсунуть хэндл фрэйма но как?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2015, 21:38
Ответы с готовыми решениями:

Загрузка dll в процессы
Есть функция LoadLibrary. она грузит dll в процессы пользователя (кроме local service, network service, system). т.е. в сервисах его нет. ...

Загрузка png из dll + прозрачность
Всем привет! В кое-то веке пришлось загрузить png изображение из dll. Поскольку ни раз читал про это я даже и не думал, что могут...

Загрузка DLL из интернета, минуя жесткий диск
Собственно сабж... требуется код(либо куды копать), как реализовать подгрузку библиотеки из интернета(при этом сохраняя ее не на жестком...

11
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
10.04.2015, 21:44
Для этого Борланд специально придумала BPL.
Зачем нужны эти извращения в DLL, если при BPL-реализации все это делается проще пареной репы ?
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
10.04.2015, 22:01  [ТС]
я читал про bpl но не понял как именно пользоваться ими.... Я создаю пакет.. сую туда фрэйм.. компилирую... создаю новый проект и в свойствах подключаю бплки... подключаюю в юзэс и вроде все работает но при компиляции я понимаю ,что эта бплка впринцыпе не нужна... я удалил ее а приложение работает... и мне нужно было чтоб фрэйм грузился из чего то как модуль.... мне это нужно для последующего обновления проги через ланчер
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
10.04.2015, 22:29
Три главных правила:

1. Проект хост-приложения нужно собирать с установленной опцией Build With Run-time Packages
2. Тоже самое с проектом BPL
3. Дин.загрузку BPL выполнять вызовом LoadPackage()

Кр.того, поскольку проект хост-приложения ничего не знает про класс TFrame1, ибо он объявлен и реализован в DPK-проекте пакета, следует зарегистрировать этот класс в DPK-проекте вызовом RegisterClass(). Делать это удобно в разделе инициализации юнита, в котором реализован класс TFrame1.

Если все эти несложные требование соблюдены, то собственно создание фрейма в хост-приложении сводится к следующему:

Delphi
1
2
3
4
5
6
7
8
var
  MyFrameClass: TFrameClass;
  MyFrame: TFrame;
..
 
  MyFrameClass := GetClass('TFrame1');
  MyFrame := MyFrameClass.Create(Panel1);
  MyFrame.Parent := Panel1;
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
11.04.2015, 19:04  [ТС]
не чето вобще не получается ниче.... можно какой нибудь пример если не трудно?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.04.2015, 19:39
Цитата Сообщение от deadmask Посмотреть сообщение
вобще не получается ниче
"ниче" это "че" конкретно ?
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
11.04.2015, 19:57  [ТС]
Получилось вот это...
Delphi
1
2
3
4
frame:=TFrame3.Create(sFrameBar1);
frame.Parent:= sFrameBar1;
form2.SetParentComponent(frame);
form2.Show;
Сначала создал пустой фрэйм, прикрепил его как надо чтоб работал и через SetParentComponent впихнул форму без бордэра.
Так мне посоветовали на одном из форумов... типа фрэйм это зло... попробывал - получилось. Но как только засунул форму в dll ку снова нифига не получается... какой бы парент небыл форма просто тупо открывается в центре экрана
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.04.2015, 20:02
Цитата Сообщение от deadmask Посмотреть сообщение
Получилось вот это...
frame:=TFrame3.Create(sFrameBar1);
Эта строка где, в хост-проекте ?
Откуда хост-проект у тебя знает про TFrame3 ?
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
11.04.2015, 20:09  [ТС]
Dll

Delphi
1
2
3
4
5
6
7
8
9
function load(h: thandle;com:tcomponent): tform; stdcall;
begin
handle := application.handle;
application.handle := h;
application.CreateForm(TForm4, form4);
// form4.SetParentComponent(com); - пытался прям тут ставить парента
result := form4;
application.handle := handle;
end;
App

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.sFrameBar1Items0CreateFrame(Sender: TObject;
var Frame: TCustomFrame);
var
form: TForm;
begin
Frame := TFrame3.Create(sFrameBar1);  // frame3 - создан в конструкторе хоста. просто пустой фрэйм чтоб был. на него потом будем грузить форму
Frame.Parent := sFrameBar1;
form := load(application.Handle, form1);
form.Show;
form.SetParentComponent(Form1);
end;
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.04.2015, 20:13
Похоже в #4 я сам с собой разговаривал
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
11.04.2015, 20:22  [ТС]
нет я читал про бпл но документация на английском, пару раз попробывал по примерам оттуда, не получилось. решил попробывать так
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.04.2015, 20:28
Цитата Сообщение от deadmask Посмотреть сообщение
читал про бпл .. попробывал ..не получилось
Я же тебе по-русски растолковал ту "документацию")
Что конкретно у тебя не получилось ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2015, 20:28
Помогаю со студенческими работами здесь

загрузка dll
Доброго времени вам) делаю функцию для универсальной загрузки библиотек, тоесть, когда пользователь сам указывает имя длл, функцию в ней и...

DLL и Динамическая загрузка DLL
Ребят, помогите, есть условие: Массив на 1000 элементов; Заполнение массива рандомно четырехзначными числами; После заполнение каждый...

Загрузка из DLL
Пытаюсь загрузить из dll картинку, код: procedure TForm1.FormCreate(Sender: TObject); var h: THandle; imageStream: TResourceStream;...

Динамическая загрузка DLL
Добрый день! Прочитал основы DLL для начинающих, подключил динамически dll. Заинтересовала фраза Имеется огромная dll , и...

Загрузка классов из DLL
Суть такова. Мне нужно создать программу, у которой будут плагины в виде DLL. Я хочу, чтобы в этих DLL были некоторые классы, реализующие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru