Страница 23 из 35
Добавлено: 14.03.2008 15:15:12
B4rr4cuda
fpc 2.2.0 а вот лазарь лучше svn версию...
Добавлено: 14.03.2008 15:51:34
Attid
B4rr4cuda писал(а):Наконец-то разобрался с миксованием LCL и прямых GTK вызовов.Начинаю писать WLX апи для линукса.
Душа поет

, скоро, уже скоро у меня будет нормальный графический фм для линукса, там пара-пам.... =)
а ентими плагинами кто угодно будет менять интерфейс как захочет чель ?
Добавлено: 14.03.2008 16:07:06
B4rr4cuda
Нет, плагину будет выдаваться указатель на панель в окне просмотрщика, а вот там уж что хочешь, то и твори.
Изменение интерфейса потом попытаюсь сделать, есть мысли по этому поводу.
Добавлено: 14.03.2008 16:24:06
B4rr4cuda
Attid ты меня подтолкнул к интересной мысли:
Ведь можно и интерфейс таким же макаром изменять. Только выдавать интерфейсному плагу список компонентов главного окна... Приму эту методику, как запасной вариант.
PS.
Пока я вижу и для WLX и для WI(nterface)X одну проблему:
плаг использующий GTK api не будет работать в DC скомпиленом на GTK2 и на QT.
Как быть?
Пришли в башку следующие варианты:
1) Вынести листер в отдельное приложение и скомпилить под все три интерфейса, спрашивать плагин, какой интерфейс ему нужен и вызывать необходимый.
2)Забить и предоставить плагинописателям отдуваться - писать одно и то же для всех трех интерфейсов.
Лазаровцам, в принципе, все равно (перекомпилил под нужный интерфейс и все), а вот пишущие на чистом fpc или на С завоют.
3)Жёстко извращаться, создавая для плагина пустое окно на чистом апи нужного интерфейса.
Кто что посоветует, предложит?
Добавлено: 14.03.2008 16:36:11
Attid
2 и 3 , я за 2 =) все равно к примеру для венды и линя не будешь одно и то же делать, хотя с Алексом мы нашли способ вызывать плагины ТС в лине без переделки, но не проверяли.
про интерфейс былоб конечно круто отделить ГУИ от ядра, но боюсь что не так то просто это будет сделать, наверно думать будем ближе к версии 3,0 =)
Добавлено: 14.03.2008 17:38:26
B4rr4cuda
отя с Алексом мы нашли способ вызывать плагины ТС в лине без переделки, но не проверяли.
А можно поподробнее? Я думал поэксперементировать с winelib. А вы как?
Эксперимент показал, что две кнопочки из библы использующей первый GTK отлично создаются и работают в GTK2 приложении, вызывающем эту библиотеку:
Библа
Код: Выделить всё
library project1;
{$mode objfpc}{$H+}
uses
gtk,glib,gdk;
var GBox,GButton1,Gbutton2:PGtkWidget;
procedure ButtonToPanel(X:PGtkWidget); stdcall;
begin
gBox:=gtk_hbox_new(false,0);
gtk_container_set_border_width (GTK_CONTAINER (gBox), 2);
gtk_container_add(GTK_CONTAINER(X),GBox );
gtk_widget_show(gBox);
GButton1:=gtk_button_new_with_label('Yehoo1');
//gtk_container_add(GTK_CONTAINER(PGtkWidget(panel1.Handle)),GButton1);
gtk_container_add(GTK_CONTAINER(gBox),GButton1);
gtk_widget_show(GButton1);
Gbutton2:=gtk_button_new_with_label('Yehoo2');
gtk_container_add(GTK_CONTAINER(GBox),Gbutton2 );
gtk_widget_show(Gbutton2);
end;
exports ButtonToPanel;
begin
end.
Вызов:
Код: Выделить всё
procedure TForm1.Button5Click(Sender: TObject);
begin
Hlib:=LoadLibrary('path to lib.so');
if Hlib<>0 then
begin
Button5.Caption:='LoadLib OK';
Button7.Caption:='UnLoadLib';
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
type TPro=procedure (X:PGtkWidget); stdcall;
var Proc:TPro;
begin
proc:=TPro(GetProcAddress(HLib,'ButtonToPanel'));
if proc <> nil then
begin
proc(PGtkWidget(Panel1.Handle));
end else showmessage('Error');
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
if UnloadLibrary(Hlib) then
begin
Button5.Caption:='LoadLib';
Button7.Caption:='UnLoadLib OK';
end;
end;
Правда неизвестно, как будет себя вести более сложный пример.
Добавлено: 15.03.2008 16:59:09
Attid
Я думал поэксперементировать с winelib. А вы как?
угу также =) используя за пример
вот это
Добавлено: 16.03.2008 00:59:44
Padre_Mortius
framepanel.pas(204,110) Error: Can't take the address of constant expressions
Решается очень просто:
1. добавляем в список используемых модулей uFileList
2.
Код: Выделить всё
var
ls: TFileList;
begin
....
ls := pnlFile.FileList;
pnlFile.VFS.VFSmodule.VFSList(ExtractDirLevel(pnlFile.VFS.ArcFullName, ActiveDir), ls);
...
end;
Добавлено: 16.03.2008 03:54:10
B4rr4cuda
2Padre_Mortius
Я считаю, не стоит адаптировать код под 2.3.1 версию, а точнее под эту багу фпц. Я погуглил - баг с использованием property в качестве var параметра, уже несколько раз исправляли и заново ломали.
Имхо, стоит придерживаться стайбл версий копилятора.
Добавлено: 18.03.2008 00:42:25
B4rr4cuda
Я заметил, что большинство багов из трекера - исправлено. Остались в основном мелочи. Может стоит в свн вынести текущую ревизию в отдельные ветки и, подчистив, выпустить версию 0.4 альфа и 0.3 beta (или даже "0.3 почти stable"

)?
Зачем? Тестеры нужны. После выпуска новой версии всегда всплеск активности. Надо активность поддерживать.

Добавлено: 18.03.2008 01:13:25
Alexx2000
Можно, осталось почитать как это сделать, и как правильно работать в таком режиме.
Добавлено: 18.03.2008 08:15:56
B4rr4cuda
Добавлено: 18.03.2008 11:34:51
Attid
а что даст разделение ?
Добавлено: 18.03.2008 13:19:14
B4rr4cuda
Разделение даст спокойную работу над следующей версией, недоделанные модули и тд. А в другой ветке доводка и отслеживание багов с мерджем их фиксов в текущий релиз.
Я и сам фактически с свн только знакомлюсь, но идея ветвления мне кажется логичной и удобной.
Добавлено: 18.03.2008 17:43:52
Attid
я про что до первой бетты не вижу смысла делать ветки.
вот выпусть еще один промежуточный альфа , это я за, и если багами не завалят , то можно делать отвлетления.