如何中文显示我的PHP-GTK程序

jackxiang 2008-6-29 16:53 | |
如何中文显示我的PHP-GTK程序

官方没有出台正式方案之前,暂时先用这个(学习中,高手有更好的解决方案请跟贴):

在php.ini的[PHP-GTK]部分

加入php-gtk.codepage = gb2312 ;将php格式保存为ansi格式
      php-gtk.codepage = uft-8     ;将php格式保存为utf8格式


在你创建的窗口时


$window = &new GtkWindow();
$window->style->font =
gdk::font_load("-unknown-宋体-normal-r-normal-*-*-120-*-*-p-*-gb2132-0");


这里调用gdk::font_load函数载入字体,注意是“GDK”,不是“GTK”

(顺便抗议一下,程序一长,居然自动截断掉,只好这样写了)

2、我的PHP-GTK程序为什么那么单调,而演示程序确有颜色?

首先要感谢hisunweb大师的耐心指导,本文才得以完成。

文章的开始,我要更正一下上次的笔误(没有人有意见吧 )

gdk::font_load("-unknown-simsun-normal-r-normal-*-*-120-96-96-p-*-gb2312-0");

同时,本文将给出中文化的更好的方法:

(1)、将PHP.INI中的[PHP-GTK]模块下
php-gtk.codepage = "gb2312"

(2)、在原PHP-GTK程序目录下新建mygtkrc文件,内容如下:
style "defaultfont"
{
font = "-unknown-simsun-normal-r-normal-*-*-120-96-96-p-*-gb2312-0"
}
class "GtkWidget" style "defaultfont"

(3)、在你的PHP-GTK程序的Gtk::main();之前加入
Gtk::rc_parse(dirname($argv[0]).'/mygtkrc');

现在你的PHP-GTK能够很顺利的现实中文了。

上面是开胃菜,下面开始重点:大家都看到了,我们在上面新建了一个文件(名字自己爱怎么写就怎么写,以下简称资源文件),这个文件有点类似HTML的 CSS样式,能够对PHP-GTK程序的风格进行解析,如字体、颜色等。如果我们需要鼠标移动到按钮上时,按钮显示颜色,可以在你的资源文件中这样定义:
style 'button_list' = 'button'
{
bg[PRELIGHT] = { 0, 0.75, 0x00 }
}
widget "main window.*GtkScrolledWindow.*GtkButton*" style "button_list"

同时,在你的程序中,我们要这样定义一个标志“main window”,就有点像HTML中的ID
$window = &new GtkWindow();
$window->set_name('main window');

这样一来,你的GtkScrolledWindow下的GtkButton鼠标经过时都有颜色,详见附带gtk.php程序。

资源文件如何定义了?我们前只有这些信息:
如假如一行
widget "main window.*GtkButton*" style "main_button"

该定义把"主窗口"中的所有按钮构件设置为资源文件中定义的"main_buttons"风格。

有几个指令用于改变一个构件的属性。
fg - 设置构件的背景色。
bg - 设置构件的前景色。
bg_pixmap - 设置构件的背景为一幅像素图。
font - 设置构件使用的字体。
另外,一个构件可以有几种状态,你可以为每种状态设置不同的颜色,图像和字体。这些状态是:
NORMAL - 构件的一般状态,如鼠标不位于构件上方,键未按下时构件所处的状态。
PRELIGHT - 当鼠标移到构件上方,在此状态下定义的颜色生效。
ACTIVE - 当处于构件上的鼠标键被按下或点击时,该构件被激活,相应的属性值将生效。
INSENSITIVE - 当构件被设置为不敏感(insensitive)时,它不能被激活,相应属性值起作用。
SELECTED - 选中一个对象时,取相应的属性值。
当用"fg"和"bg"关键字设置构件的颜色时,其格式是:
fg[<STATE>] = { Red, Green, Blue }

这里STATE是前述状态(PRELIGHT,ACTIVE,...)之一,Red,Green,Blue是范围0-1.0间的数值, {1.0,1.0,1.0}表示白色。这些数值必须是浮点型的,否则将被存为0,因此写为"1"的数值是无效的,应写为"1.0".0值写为"0"却不错,因为即使系统认不出也没关系。所有系统不认识的数值都会被设为0。
bg_pixmap除了用一个文件名取代颜色名外和以上格式很相似。
pixmap_path是一个由‘:’分隔开的路径表。当搜索你定义的图像文件时选择这些路径。

最后,可能你对font的定义很感兴趣,我把定义方法转过来,原汁原味,就不翻译啦~~(每一行对应一个参数)

foundry xxx (where the font was created. 'unknown' is okay)
family xxx (e.g. Arial)
weight xxx (e.g. bold, medium)
slant x (r - roman, i = italic, o = oblique)
setwidth xxx (e.g. normal, condensed)
addedstyle xxx (e.g. serif, sans. Leave blank for none)
pixelsize N (set either this or pointsize, not both)
pointsize N (point size, e.g. 120)
resx N (x res the font was created for, in dots per inch)
resy N (y res the font was created for, in dots per inch)
space x (m = monospaced, p = proportional, c = cell)
averagewidth N (average character width in pixels. 0 if unknown)
registry xxx (e.g. utf, iso8859 or adobe)
encoding xxx (e.g. 1 or 2 (for iso8859) or fontspecific)

例如:$font = gdk::font_load('-unknown-Arial-normal-r-normal--*-120-96-96-p-0-iso8859-1');

3、PHP-GTK的相关资源

作者:Verdana

http://kromann.info/php4-gtk.php
这里有从 CVS 源码编译的 php-gtk 的版本,每天更新
类似 php snaps, 不过容易出问题。
还有 php5 的 gtk 版本。

http://www.cweiske.de/phpgtk.htm
德国网站,但内容是英文的,很容易看懂

提供了 PHP-GTK AppWizard 下载
非常不错的软件,帮你自动生成 PHP GTK 程序,不需要写一行
代码,哈哈哈

提供 PHP-Themes 下载,非常漂亮啊~
http://www.cweiske.de/phpgtk_themes.htm

如果没有看上眼的也可以自己定制 :P

另外学 GTK 的话,就必须要提一下 winGlade ,呵呵~
一个 GUI 的 GTK 界面设计器。类似 VC 设计窗体一样
可以把控件拖来拖去,修改属性。
生成的是 xml 文件。

这里 http://wingtk.sourceforge.net/ 下载

4、AppWizard 确实很好,但是不能使用中文目录/文件,咋办咧^_^?

(1)、在同一目录下新建资源文件mygtkrc,内容如下:
style "defaultfont"
{
font = "-unknown-simsun-normal-r-normal-*-*-120-96-96-p-*-gb2312-0"
}
class "GtkWidget" style "defaultfont"

(2)、源程序解压后,appwizard.php-gtk的349行,也就是GTK::main();的前面一行加入:
Gtk::rc_parse(dirname($argv[0]).'/mygtkrc');

(3)、保存后,支持中文目录/文件名。第一次启动,需要等待一定的时间,俺的机器好像用了将近2分钟,不要认为是死机,值得等待。

以后遇到相同的中文问题,可以先尝试用上面的方法。
祝大家玩得开心,村民们有什么PHP-GTK的咚咚,全部贡献出来吧,人民会记住你的(村棍除外)。

注意:AppWizard第一次运行,不能放在带有中文的路径目录中,否则很可能会出错。

6、如何修改默认的PHP-GTK风格,比如我比较喜欢MAC风格?

将资源文件改名为“.gtkrc”,注意,前面有点号,这个过程可以通过DOS窗口实现(作者是这么说的),把它放到C:Documents and Settings{你的用户名}.gtkrc

例如有个文件内容如下

style "default"
{
bg[NORMAL] = "#ededed"
bg[PRELIGHT] = "#8db6cd"
bg[ACTIVE] = "#bababa"
bg[INSENSITIVE] = "#ededed"
bg[SELECTED] = "#8db6cd"

fg[NORMAL] = "#000000"
fg[PRELIGHT] = "#000000"
fg[ACTIVE] = "#000000"
fg[INSENSITIVE] = "#bababa"
fg[SELECTED] = "#000000"

engine "engradient"
{
use_gradient = TRUE
handlebox_marks = TRUE
scrollbar_marks = TRUE
}
}

widget "*" style "default"

style "tooltip"
{
bg[NORMAL] = "#ffffff"
}
widget "*gtk-tooltip*" style "tooltip"

将它改名.gtkrc,再放到:
C:Documents and Settings开心果目录下,以后你运行的PHP-GTK程序都是用这个风格。

当然,你必须拥有相应的风格库文件,否则只能显示主题颜色,框架不变,并提示找不到库文件。如果仅仅需要颜色主题,请把这一段删掉:
engine "engradient"
{
use_gradient = TRUE
handlebox_marks = TRUE
scrollbar_marks = TRUE
}

顺便提一句,AppWizard不能够生成我们所想要得PHP-GTK程序,它仅仅是个测试(JUST A TEST,作者又是这么说的),而且生成的代码垃圾一堆,继续寻找传说中的法宝~~

还有就是,PHP-GTK程序,得到ZEND的编码支持,也就是说,ZEND编译后PHP-GTK依然能够执行。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1091/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2008-6-29 17:11
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]