[Gtk2forpascal-devel] Problem about gtkhtml-2 solved!
Brought to you by:
mgaertner
From: <wan...@ya...> - 2002-11-05 13:50:01
|
Hi, Mattias Today I solved the problem about gtkhtml-2 programing with gtk2forpascal. First, you should download "gtkhtml2-2.0.1-3.i386.rpm" and "gtkhtml2-devel-2.0.1-3.i386.rpm" from www.rpmfind.net. The first one contains two shared libs. The second one contains many header files and "libgtkhtml-2.a" and "libgtkhtml-2.so", and most important, it contains a file: "/usr/lib/pkgconfig/libgtkhtml-2.0.pc" You can also download "gtkhtml2-2.0.1-3.src.rpm" to see its source. This one is more easier to compile than gtkhtml-1.1.4 .tar.gz. From the source you will find that there's really no gtk_html_new() but a html_view_new()+html_document_new(). So the structure of "view+document" is very like the structure "view+buffer" in gtk2. Now I changed the declaration from: >>>>> const gtkhtmllib = libgtkhtml-2.so'; <<<<< To: >>>>> const gtkhtmllib = ''; <<<<< And use the following shell script to compile the test.pp: (command: ./make.sh test.pp) >>>>> make.sh #!/bin/bash make_linker_script () { LibPath=`pkg-config libgtkhtml-2.0 --libs-only-L | sed -e 's/-L//g'` Libs=`pkg-config libgtkhtml-2.0 --libs-only-l` rm -f gtk2.link.res for SinglePath in $LibPath do printf "SEARCH_DIR($SinglePath)\n" >> gtk2.link.res done printf "INPUT(\n$Libs\n)" >> gtk2.link.res } DynamicOption="-XD -k-dynamic-linker=/lib/ld-linux.so.2 -kgtk2.link.res" # UnitPath="../gtk2/" -----> Note: Here I move *.o and *.ppu of gtk2forpascal # to /usr/lib/fpc/1.0.7/units/linux/gtk2, so they can be automatically # found. make_linker_script ppc386 -g -Fu$UnitPath $DynamicOption $@ rm -f gtk2.link.res <<<<< The test.pp file is as follows (very ugly and unmature): >>>>> program test; {$H+} {$mode objfpc} uses glib2, gtk2, gdk2; const gtkhtmllib = '';//libgtkhtml-2.so'; type PHtmlDocument = ^THtmlDocument; THtmlDocument = record parent_instance: TGObject; end;//THtmlDocument PHtmlView = ^THtmlView; THtmlView = record parent: TGtkLayout; end;//THtmlView function html_document_new():PHtmlDocument;cdecl; external gtkhtmllib; procedure html_view_zoom_in(view: PHtmlView);cdecl; external gtkhtmllib; function html_view_new:PGtkWidget;cdecl; external gtkhtmllib; procedure html_view_set_document(view: PHtmlView; document: PHtmlDocument);cdecl; external gtkhtmllib; function html_document_open_stream(document: PHtmlDocument;mime_type: pgchar):gboolean;cdecl; external gtkhtmllib; procedure html_document_write_stream(document: PHtmlDocument;buffer: pgchar; len: gint);cdecl; external gtkhtmllib; procedure html_document_close_stream(document: PHtmlDocument);cdecl; external gtkhtmllib; //=================== var window : PGtkWidget; sw : PGtkWidget; html : PGtkWidget; document: PHtmlDocument; procedure destroy (window: PGtkWidget; data: gpointer); cdecl; begin gtk_main_quit(); end;//destroy var s:String; begin gtk_init(@argc,@argv); window:=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window,500,400); gtk_window_set_position(PGtkWindow(window),GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_title(PGtkWindow(window),'Test'); g_signal_connect(window,'destroy',TGCallback(@destroy),NULL); sw:=gtk_scrolled_window_new(NULL,NULL); gtk_widget_show(sw); gtk_container_add(PGtkContainer(window),sw); document := html_document_new(); html:=html_view_new(); gtk_widget_show(html); gtk_scrolled_window_add_with_viewport(PGtkScrolledWindow(sw),html); s:='<html><head><title>Hello, World!</title></head>'+ '<body text="#000000" bgcolor="#FFFFCC">'+ '<center><h1><font size=7>Hello, world!</font></h1></center>'+ '</body></html>'; html_document_open_stream(document,'text/html'); html_document_write_stream(document,PChar(s),length(s)); html_document_close_stream(document); html_view_set_document(PHtmlView(html), document); gtk_widget_show(window); gtk_main(); end.//program test <<<<< Mattias, I write an interface for gtkhtml to gtk2forpascal, but it's a very simple one. It has only four widgets: THtmlView, THtmlDocument, THtmlStream and THtmlStreamBuffer. In the first two widgets, some fields are removed. So perhaps some important functionalities are not included. The reason why I remove them is because they use functions of libxml, I have no time to port so many packages. It remains to be further work. At present, I don't know how to show a picture in the htmlview yet. Mattias, Do you think I can present those sources now? if so, I will send you those files. Yours, mili _________________________________________________________ Do You Yahoo!? "是IT精英吗?小试牛刀获时尚大奖!" http://cn.promo.yahoo.com/cgi-bin/udb/u |