AMD
Ладно по пунктам:
1. Проект -> Создать проект -> Приложение
2. Кидаем на форму панель, а на неё все нужные компоненты, пишем код, тестируем - все как обычно.
3. Проект -> Просмотреть исходный код проекта
Вместо
- Код: Выделить всё
program project1;
пишем
- Код: Выделить всё
library NameOfProject;
4. В uses добавляем юниты: gtk, gdk, glib
5. Пишем процедурку или функцию создающую форму и перемещающую панель с контролами на панель вызывающего приложения. Получаем что-то типа:
- Код: Выделить всё
library NameOfProject;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms,gtk,gdk,glib,Unit1;
procedure Load(ParentWin:thandle); stdcall;
begin
Application.CreateForm(TForm1, Form1);
gtk_widget_reparent(PGtkWidget(Form1.Panel1.Handle),PGtkWidget(ParentWin));
end;
exports Load;
begin
end.
6. Пишем вызывающую программу:
- Код: Выделить всё
uses ... , dynlibs,gtk,glib,gdk;
...
type TPro=procedure (ParentWin:thandle); stdcall;
var Proc:TPro;
Hlib:TLibHandle;
lst:PGList;
...
Hlib:=LoadLibrary('путь к библиотеке');
if Hlib<>0 then
begin
proc:=TPro(GetProcAddress(HLib,'Load'));
if proc <> nil then
begin
{тк lcl панель - это по сути gtk_container и GBox расположенный на нем, то скрываем чайлд компонент и отображаем на его месте свою панель}
lst:=gtk_container_children(GTK_CONTAINER(PGtkwidget(pnlParent.Handle)));
if lst<>nil then
gtk_widget_hide(PGtkWidget(lst^.data));
proc(PnlParent.Handle);
end;
end;
....
Вот и все.
2
FedeX
Не экономно - это точно, зато удобно. Лично меня от чистого интерфейсного апи тошнит (что от винапи, что от gtk, надо ещё qt попробовать). А вот смесь, позволяющая вытворять трюки и добавляющая гибкости - самое оно. Если размер не критичен, а время поджимает - такие трюки помогают.
А писать на чистом апи, чтобы выглядеть солиднее... пффф, это, простите, детство.
Насчет этого:
Гораздо проще (и по мойму логичней), запихнуть в длл только парсинг файла (который ты там анализируеш) и передавать все данные в какой-нить структуре главной программе.
полностью согласен.