Entries tagged as linux
lf335, SystemAdministration: 彩色的命令行 —— 使用 ANSI 色彩代码 Fri, Apr 30. 2004
原始地址:http://www.linuxfocus.org/ChineseGB/May2004/article335.shtml
by Nico Golde <nico/at/ngolde.de> 关于作者: 现在 Nico 还是一个学生。几年前他开始钻研 Linux, 还参加了好几个开源项目。 目录: |
彩色的命令行 —— 使用 ANSI 色彩代码
摘要: 在 ANSI 兼容终端(例如
xterm、rxvt、konsole 等)里, 可以用彩色显示文本而不仅仅是黑白。 本文示范了如何使用粗体和彩色的文字。
|
概述
在现实生活中,每一位 Linux 使用者都要面对 Bash。 虽然第一眼看上去非常枯燥,但是又很多方法能够让你的 shell 足够的个性化。 shell 提示符的彩色增强让能够让你的 shell 独一无二, 而且还非常清晰易读。在本文中我以 Bash shell 为例。因为在不同的终端里的转义序列不完全相同, 所以在本文中我使用的是 ANSI 终端。
Shell 的配置
shell 彩色配置出现在 bash 的个人配置文件 ~/.bashrc 或者是全局配置文件 /etc/bashrc 里面。 可以通过 bashrc 里面的 PS1 变量来设置提示符的外观。通常情况下,这个条目看起来应该是这个样子:
~/.bashrc: PS1="\s-\v\$ " \s 表示 shell 的名称,-\v 表示他的版本号。 在提示符的最后面我们放置了一个 $。这样看起来也许有点乏味,
所以不妨试试下面这种模式——这种模式在大多数 Linux 的发行版本下是默认的设置: ~/.bashrc: PS1="\u@\h \w \$ " |
转义序列
要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应, 也可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。要直接在 shell 里面输入转义序列我们需要先按 ctrl-v: CTRL-v ESC 。
使用 shell 的颜色
下面我用一个提示符的例子来解释 shell 的颜色。| nico@ebrain:~$ |
\033 声明了转义序列的开始,然后是 [ 开始定义颜色。 后面的 0 定义了默认的字体宽度。稍后我会介绍其他的可用字符。 转义序列字符串要用 \[ 和 \] 括起来, 防止转义序列的文本显示在 shell 里占用太多的空间。
下面我们要选择前景色(这里是 32,代表绿色)。背景色的 40 表示黑色。 要是不想让提示符后面的文字也变成绿色,我们用 \033[0m 关闭转义序列, \033[0m 是 shell 的默认颜色。前景色和背景色都有 8 种可用的选择。
可选颜色:红色、绿色、黄色、蓝色、洋红、青色和白色。 他们对应的颜色代码是:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)。
用同样色方法设置背景色,不过要把第一个数字“3”替换成“4”, 例如 40、41、42、43、44、45、46、47。
示例:
这给了我们一个非常多彩的提示符:
|
我们使用 export PS1="string" 来测试这些设置, 稍后我们要把这些设置转移到 .bashrc 里面。 现在我的提示符看起来是这个样子:
| [ nico@ebrain:~ ] |
文本属性
刚才提到了,在第一个转义序列后面的“0”是提示符的文本的默认颜色设置。 对于文本属性来说,这些值是有意义的:0、1、22、4、24、5、25、7、27, 分别表示:默认值、粗体、非粗体、下划线、非下划线、闪烁、非闪烁、 反显、非反显。通过下面这一段短小的脚本,我们可以看看色彩组合。
- #!/bin/sh
- ############################################################
- # Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de
- # Last change: Mon Feb 16 16:24:41 CET 2004
- ############################################################
- for attr in 0 1 4 5 7 ; do
- echo "----------------------------------------------------------------"
- printf "ESC[%s;Foreground;Background - \n" $attr
- for fore in 30 31 32 33 34 35 36 37; do
- for back in 40 41 42 43 44 45 46 47; do
- printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back
- done
- printf '\n'
- done
- printf '\033[0m'
- done
另一个程序
在 shell 中设置颜色不仅仅能创建更加漂亮的提示符, 在编写控制台程序的时候也非常有用。对于一个要使用彩色的程序员,就必须要使用类似 slang 或 ncurses 这样的的库,者通常会增加执行文件的大小。 Ncurses 有着或多或少的独立于终端的类型的优势。
C 语言示例
用绿色打印“Hello Word”:- #include <stdio.h>
- int main(void){
- const char *const green = "\033[0;40;32m";
- const char *const normal = "\033[0m";
- printf("%sHello World%s\n", green, normal);
- return 0;
- }
使用 printf("\033[1K") 可以删除一行。
初始化脚本示例
如果我们想在 /etc/init.d 的 init 脚本成功的执行后, 得到一个漂亮的、清晰易读的提示,而不是一个简单的 '.' , 我们可以再一次的使用转义序列。这是一段 cron init script 的摘录:
- #!/bin/sh
- # Start/stop the cron daemon.
- test -f /usr/sbin/cron || exit 0
- case "$1" in
- start) echo -n "Starting periodic command scheduler: cron"
- start-stop-daemon --start --quiet --exec /usr/sbin/cron
- echo "."
- ;;
- #!/bin/sh
- # Start/stop the cron daemon.
- test -f /usr/sbin/cron || exit 0
- case "$1" in
- start) echo -n "Starting periodic command scheduler: cron"
- start-stop-daemon --start --quiet --exec /usr/sbin/cron
- echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]"
- ;;
反馈
如果有任何反馈、批评、错误等,请发信到“nico at ngolde.de”。 玩得开心……lf332, SoftwareDevelopment: 用 GTK 编写 GUI 程序 - 3 Mon, Mar 1. 2004
原始地址:http://www.linuxfocus.org/ChineseGB/March2004/article332.shtml
by Özcan Güngör <ozcangungor(at)netscape.net> 关于作者: 我现在正在服兵役,身份是 Linux、Oracle 管理员和 web 程序员。 目录: |
用 GTK 编写 GUI 程序 - 3
摘要: 通过本系列文章,我们将要学习如果用 GTK 编写图形用户界面 (GUI)。 我自己也不知道要写多长。为了理解这些文章, 你需要知道这些 C 语言知识:
用 GTK 编写 GUI 程序, 用 GTK 编写 GUI 程序 - 2。 因为我正在服兵役,所以本文要比其他的章节短一些。 |
切换按钮
这个按钮外观上和普通按钮一样,但是有两个状态:被按下或者没有被按下。 用下面的两个函数之一来创建切换按钮:
GtkWidget *toggle=gtk_toggle_button_new(void); GtkWidget *toggle=gtk_toggle_button_new_with_label(const gchar *label);
第一个函数创建了一个没有文字标签的切换按钮, 但是第二个创建的切换按钮上有字符串 label 标签。
可以用下面的函数来设置它的状态:
gtk_toggle_button_set_active (GtkToggleButton *toggle_button,
gboolean is_active);
toggle_button 是你想改变状态的按钮, is_active 是按钮的状态(0 或 1)。 当它是 0 的时候,按钮不能被按下,当它是 1 的时候 按钮可以被按下。
下面的函数用来得到按钮的状态:
gboolean gtk_toggle_button_get_active(GtkToggleButton *button);
切换按钮可以连接一个“切换”事件。
例如:
#include <gtk/gtk.h>
void togg(GtkWidget *widget, gpointer *data){
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
g_print("State is 1\n");
else
g_print("State is 0\n");
}
int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget button;
gtk_init (&argc, &argv);
/ Create a new window /
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Toggle Button");
/ Connect destroy event to the window. /
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/ Creates a toggle button /
button=gtk_toggle_button_new_with_label("I'm a toggle button");
/ Add the button to window /
gtk_container_add(GTK_CONTAINER(window),button);
/ Connect "toggled" event to the button /
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC(togg),(gpointer )button);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
复选按钮
复选按钮(也叫作复选框)是切换按钮的一个子类。 可以用来选择一些选项。
用下面的函数创建复选按钮:
GtkWidget* gtk_check_button_new (void); GtkWidget* gtk_check_button_new_with_label (const gchar *label);
解释和切换按钮一样。
例如:
#include <gtk/gtk.h>
void togg(GtkWidget *widget, gpointer *data){
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
g_print("State is 1\n");
else
g_print("State is 0\n");
}
int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget button;
gtk_init (&argc, &argv);
/ Create a new window /
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Check Button");
/ Connect destroy event to the window. /
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/ Creates a check button /
button=gtk_check_button_new_with_label("I'm a check button");
/ Add the button to window /
gtk_container_add(GTK_CONTAINER(window),button);
/ Connect "toggled" event to the button /
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC(togg), (gpointer )button);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
标签
标签允许你在窗口的任何地方放置文本。
用下面的函数创建标签:
GtkWidget* gtk_label_new(const gchar *text);
通过函数
gtk_label_set_text(GtkLabel *label, gchar *text);
你可以在任何时候改变标签上的字符串。
gtk_label_set_justify(GtkLabel *label, GtkJustification jtype);
gtk_label_set_justify 函数用来对齐标签上的文本。 jtype 可以是
- GTK_JUSTIFY_LEFT 把文本左对齐
- GTK_JUSTIFY_RIGHT 把文本右对齐
- GTK_JUSTIFY_CENTER 把文本居中
- GTK_JUSTIFY_FILL 标签上的文本两端对齐
gtk_label_set_line_wrap (GtkLabel *label,gboolean wrap);
的作用是当文本比放置它的空间长的时候,让文本可以被分割多很多段。 当 warp 是 1 的时候,文本会被换到下一行,否则就不会。
gtk_label_get(GtkLabel label, gchar **str)
用来得到标签上的文本,并且存储到 str 中。
工具提示
工具提示是当你把鼠标放到一个窗口的小部件上面出现的文本。 例如,你可以给按钮设置一个提示,当你把鼠标移到上面就会出现“发送信息”的文本。
要做到这些,你必须先创建一个小部件:
GtkToolTips gtk_tooltips_new();
然后把工具提示附加到这个小部件上:
gtk_tooltips_set_tip(GtkTooltips *tooltips, GtkWidget *widget,
const gchar *tip_text,const gchar *tip_private);
一个小例子:
#include <gtk/gtk.h>
int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
GtkTooltips tip;
gtk_init (&argc, &argv);
/ Create a new window /
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Tooltips");
/ Connect destroy event to the window. /
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
/ Creates a button /
button=gtk_button_new_with_label("I'm a Button");
/ Add the button to window /
gtk_container_add(GTK_CONTAINER(window),button);
/ Creates a tooltips*/
tip=gtk_tooltips_new();
/* Attache this tooltips to button with text*/
gtk_tooltips_set_tip(tip, button, "Click me!",NULL);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
其他的函数:
gtk_tooltips_enable (GtkTooltips *tooltips);
激活工具提示。
gtk_tooltips_disable (GtkTooltips tooltips);
禁止工具提示。
要得到一个小部件的工具提示,我们需要
GtkTooltipsData gtk_tooltips_get_data(GtkWidget *widget);
GtkTooltipsData 是一个如下的结构:
struct _GtkTooltipsData
{
GtkTooltips *tooltips;
GtkWidget *widget;
gchar *tip_text;
gchar *tip_private;
GdkFont *font;
gint width;
GList *row;
};
设置文本出现的延迟,
gtk_tooltips_set_delay (GtkTooltips *tip, guint delay)
组合框
组合框是一个有下拉列表的可以编辑的文本框。 你既可以输入内容,也可以从下拉列表中选择一项。
可以这样创建一个组合框
GtkWidget *gtk_combo_new();
并且我们需要一个 GList 结构的选项列表。
GList *glist=NULL;
可以这样给列表追加选项
GList *g_list_append(GList *list, gchar *option);
然后把这个列表添加到组合框中
gtk_combo_set_popdown_strings(GtkCombo *combo, GList *List);
组合框已经准备好了。用这种方法读取被选择的项目:
gchar *gtk_entry_get_text(GtkEntry *entry);
这样,GTK_ENTRY(GTK_COMBO(combo)->entry)) 就是 entry。
gtk_combo_set_use_arrows(GtkCombo *combo,gint val);
这个函数的作用是激活或者禁止用键盘上的上下键来更改组合框的值。 如果 val 是 0,这些键不起作用,否则这些键可以改变值。 但是如果组合框的值和列表中的值不相同,这些键就不起作用。
gtk_combo_set_use_arrows_always(GtkCombo *combo,gint val);
这个函数和 gtk_combo_set_use_arrows 相同, 但是当组合框的值和列表中的值不相同,这些键就能起作用。
gtk_combo_set_value_in_list(GtkCombo *combo, gboolean val,
gboolean ok_if_empty);
如果n val 是 1,你可以输入一个列表中的值。 如果 ok_if_empty 是 1,这个值可以是空值。
#include <gtk/gtk.h>
void act(GtkWidget *widget, gpointer data){
g_print((gchar )data);
}
int main( int argc,char *argv[] ) {
GtkWidget *window;
GtkWidget *combo;
GtkWidget *button;
GtkWidget *box;
GList list=NULL;
list=g_list_append(list,"Slackware");
list=g_list_append(list,"RedHat");
list=g_list_append(list,"SuSE");
gtk_init (&argc, &argv);
/ Create a new window /
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Combo Box");
/ Connect destroy event to the window. /
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/ Create a new horizontal box /
box=gtk_hbox_new(1,0);
gtk_container_add(GTK_CONTAINER(window),box);
/ Creates a combo box /
combo=gtk_combo_new();
/ Sets the list /
gtk_combo_set_popdown_strings(GTK_COMBO(combo),list);
/ Enables up/down keys change the value. */
gtk_combo_set_use_arrows_always(GTK_COMBO(combo),1);
gtk_box_pack_start(GTK_BOX(box), combo,1,1,1);
button=gtk_button_new_with_label("Write it");
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(act),
gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry)));
gtk_box_pack_start(GTK_BOX(box), button,1,1,1);
gtk_widget_show(box);
gtk_widget_show(combo);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
欢迎所有的评论。 lf329, SoftwareDevelopment: Gambas:Linux 下的 Basic Mon, Mar 1. 2004
原始地址:http://www.linuxfocus.org/ChineseGB/March2004/article329.shtml
by Jonás Alvarez <jalvarez(at)eitb.com> 关于作者: Jonás Alvarez 已经在 UNIX 和 Windows 环境下从事了几年的应用程序开发工作。 另外,他还教授操作系统、网络和程序开发的课程。 目录: |
Gambas:Linux 下的 Basic
摘要: Gambas 是现在 Linux 下面可以使用的 Basic 之一。 在本文中我们要开发一个实例程序,来看看在日常工作中 Gambas 是多么的简单和强大。 |
简介
Basic 是使用的最广泛的、最简单的编程语言之一,尤其是对于新手。 迄今为止,最常用的 Basic 开发环境是 Microsoft 的 Visual Basic 集成开发环境。 近来,Linux 的使用范围已经延伸到了桌面环境。 从最初的仅限于服务器应用,使得人都是领导者,它正在变成一个客户端计算机的操作系统, 满足了类似阅读电子邮件、上网冲浪和文字编辑这样的需求。 顺着这种发展趋势,出现了好几个 Basic 开发环境。 Gambas 就是我们要在本文中见到的一个,一个 Basic 的图形开发环境。 就像我们马上要见到的,它的编程风格和 Visual Basic 非常相像, 但是它也有自己的特点。 我要使用的版本是 0.64a,包括在 SuSE 9.0 发行版中。 就是我写这段文字的时候,我们可以在他的项目主页上看到最新的版本是0.81, 不过这个不会影响到本文。
谁会对 Gambas 感兴趣?
因为我已经做了一段时间的 Visual Basic 开发者, 所以我不需要什么更多的就可以直接着手这个例子。 此外,这是我一次接触 Gambas,这证明了任何曾经用过 Visual Basic 的人都能用它。 此外,它还是一个说明能简单的 Basic 在很多事情中非常有用的一个例子。
实例程序
因为我喜欢边学边做,所以我们通过一个例子开始。 这个非常简单的应用程序是一个在屏幕上显示的有倒计时功能的秒表。 我们可以随心所欲的调整时间、停止或者启动它。
在启动 Gambas 之后我们就能看见这个帮助::

选择新建工程。在下一个窗口我们会被问到工程名称。 我们的工程叫做CountDown。 在第二对话框里我们要选择工程目录。 我们选择工作目录,并且在底部的文本框中。输入要创建的目录名。

如果这是第一次启动 Gambas 或者还没有禁用这个选项,就能看到每日技巧提示。 阅读感兴趣的并且关闭这个窗口。我们已经在开发环境中准备开始工作了。 我们能在桌面上看见几个窗口。如果我们在 KDE 这样的有多桌面的环境里, 我们也许会很有兴趣的把其中的一个给 Gambas 使用,这样可以统一控制所有窗口。 就个人而言,我在 KDE 中第一个激活的选项就是每个桌面仅仅显示自己的图标。
我们马上要创建程序的主窗体。在工程窗口的任何地方单击右键新建窗体。

在对话框中我们要指定窗体名称,在这个情况下是FCountDown, 其他的都保留默认值。

我们现在已经有了第一个窗体,不过现在还是空的。

现在我们要把秒表用刀的控件包含近来。点击工具栏上我们要在窗体中包含的元素。 移动鼠标指针经过控件就可以看到控件的名称。双击控件就能把控件放置到窗体的左上角。 单击控件就能把控件放置到窗体上我们喜欢的地方并且改变大小。 在我们的程序中我们需要一个标签、一个文本框、一个计时器、 两个按钮和一个切换按钮。

一旦所有的控件都放置好了,看起来就是这个样子(或多或少有一些不同, 每个人都可以按照他的喜好放置):

一旦我们把所有的控件都放置到了窗体里面,我们就可以把他们的名字改成有意义的。 要做到这一步,编辑属性表里面的名称。 如果在屏幕上看不见属性表,可以通过工程窗口的属性按钮来激活。 要找到这个按钮我们可以在按钮上移动鼠标指针来定位我们要的这个按钮。
我把 Label1 控件命名为 lblContador: 点击这个控件然后就可以在属性表里面更改名称了。 这一步,要编辑名称属性并且赋值为 lblContador。 然后把字体改得大一些。要完成这个,在它的字体属性里点击...标签, 选择 Courier Bold 72 字体并且确认(OK)。 用同样的方法,我把 ToggleButton1 改名为 tglFuncionando。 TextBox1 控件变成了 txtSegundos, Timer1 控件变成了clkMiReloj, Button1 变成了cmdPonerSegundos, 最后我把 Button2 改名为 cmdSalir。 另外我还把 txtSegundos 的对齐属性改成了右对齐。
现在我们要开始着手写 Basic 代码了。它非常的简单而且语法也不是很严格。 我们首先要做的就是把在窗体中见到的文本都改成实际的值。 尽管很多选项都在变化,我们也可以通过控件的属性表来更改, 用这两种方法的任何一种都能得到相同的结果。
当窗口一打开,我们就填写所有我们希望的控件的标题。 当我们说当窗口一打开的时候,我们谈论的是对事件的管理:打开窗口的事件。 这一步我们双击窗体里没有控件的地方。 打开了一个编辑窗口,光标定位在一个新的过程:Public Sub Form_Open() (如果以前在 Visual Basic 里面写过程序,我们也许会使用 Form_Load 事件)。 我们现在要让 lblContador 控件显示出倒计时还剩余的秒数。 窗体类的第一行程序看起来是这个样子的:
' Gambas class file
CONST fSegundosPorDefecto AS Float=120.0
fSegundos AS Float
PRIVATE SUB VerValores()
DIM nMinutos AS Integer
nMinutos = Int(Int(fSegundos) / 60)
lblContador.Caption = nMinutos & ":" & Format (fSegundos -
nMinutos * 60, "00.0")
END
PRIVATE SUB VerActivarDesactivar()
IF tglFuncionando.Value THEN
tglFuncionando.Text = ("&Detener")
ELSE
tglFuncionando.Text = ("&Arrancar")
ENDIF
END
PUBLIC SUB Form_Open()
fSegundos = fSegundosPorDefecto
VerValores
tglFuncionando.Value = FALSE
VerActivarDesactivar
txtSegundos.Text = fSegundos
cmdPonerSegundos.Text = ("&Reiniciar")
cmdSalir.Text = ("&Salir")
END
我们已经在 Gambas 自动生成的注释,'Gambas class file, 后面添加了一个用来保持秒表的默认秒数的常量,fSegundosPorDefecto, 它的值是 120 秒(两分钟),和一个 fSegundos 变量用来保持倒计时。 现在我们还创建了两个过程:VerValores,用来显示倒计时的值, 还有 VerActivarDesactivar,用来改变启动/停止按钮的文字。
现在我们已经有了一个能够工作的窗体。但是它现在还不能作任何有用的事情, 不过它让我们理解了我们所做的事情,所以这还是值得一试的。 我们通过秒表工程的主窗口保存更改,然后用 F5 键启动程序, 或者通过同一个窗口的工具栏上的执行按钮。 我们会看见:

如果这个没有出现或者得到了任何错误,我们就必须要回头看看我们刚才作的。 即使我们按启动、复位或退出按钮没有任何用途。 这就是我们的下一个任务:把事件关联给按钮,当用户按按钮的时候,事件被触发了。 在继续之前,让我们一起来玩玩我们的程序,看看他都有什么。 我们可以按右上角的 X 来关闭它。我在用 SuSE 的 KDE 环境, 就像你看见的,不过也许你要用另一种方式来关闭窗口。
让我们先拿按钮作一些最简单的工作:当用户按退出按钮的时候会发生什么? 我们必须要关闭程序。要解释当用户按这个按钮的时候执行的 Basic 代码, 我们双击上面写有退出的按钮(cmbExit)。 可以看见 Gambas 已经自动生成了一些代码,光标被放在中间。 这是我们必须要介绍的代码。这个过程会在用户点击按钮的时候执行。 要关闭程序我们必须执行 Me.Close,所以这个事件的代码是:
PUBLIC SUB cmdSalir_Click()
ME.Close
END
下一个我们要控制的按钮是复位。用同样的方法: 双击按钮然后在 Gambas 显示出来的代码窗口里插入:
PUBLIC SUB cmdPonerSegundos_Click()
fSegundos = txtSegundos.Text
VerValores
END
好像现在还是没有发生任何事情。必须要给程序一些动作。 我们要从一开始就激活窗体里的定时器控件。 要做到这一步,就必须设置接受时钟事件的间隔。要么在上一个 Form_Open 事件里放置代码,要么插入到窗体里。现在我们就用这个方法。 我们点击窗体里的定时器对象然后再它的属性表里面把 延迟值由 1000ms 改为 100,这样就可以每十分之一秒接收一次事件, 这也是我们的秒表的精度。
我们仍然没有在每次时钟激发的时候的执行的代码,以及激活的方法。 要生成时钟的代码,实在是太简单了,就像一直做得,双击它。 这会把我们带到代码窗口的正确的地方。我们要按照这个样子插入代码:
PUBLIC SUB clkMiReloj_Timer()
IF fSegundos < 0.1 THEN
tglFuncionando.Value = FALSE
tglFuncionando_Click
ELSE
fSegundos = fSegundos - 0.1
VerValores
END IF
END
最后我们要按照用户的意愿通过切换按钮来激活秒表, 这是我们一直都没有管到的。双击这个按钮然后插入代码:
PUBLIC SUB tglFuncionando_Click() clkMiReloj.Enabled = tglFuncionando.Value VerActivarDesactivar END
现在我们已经可以测试我们的工作了。
最后一笔:Gambas 的国际性
Gambas 的另一个特征就是对多语言的支持。如果你看过了代码, 你就会注意到字符串都是用大括号括起来的。这是用来通知 Gambas 来翻译这些字符串的。 窗体控件的文本不需要这些大括号。我们的项目已经非常有用了, 人们就会要求用他们自己的语言显示。没有什么比这更简单了。 我们到工程窗口的工程/属性菜单。

在这里我们设置工程的标题并且激活允许翻译工程选项, 这样我们就可以翻译对话框了。现在我们的菜单里多了一个新的选项:工程/翻译。 打开对话框,就可以看见翻译工作是非常的直观:

首先我们在上面的部分选择目标语言。当我们要翻一个字符串, 选择它并且填写下面的部分。等到所有的字符串都翻译好了, 如果之前我们设置了 LANG 变量为我们要翻译的语言, 我们就以在终端里面调用程序测试了。如果我们想看看翻译成英语的结果, 关闭 Gambas,并且执行
$ LANG=en_US; gambas
要返回上一个状态,通过 KDE 菜单启动 Gambas,因为在这里没有定义环境变量, 环境变量仅仅在他自己的控制台里生存。
结语
尽管它仅仅是一个解释型语言,而且我们必须全部安装,但是它是开始开发 Linux 桌面应用程序的一个好的起点,就像我们已经见到的,它非常的简单, 开发起来也很快速。它对于很多日常工作已经足够了。
除去文件/打开事例菜单里面的例子,在线帮助也非常的详尽。 我们还可以去项目主页, 在友情链接一栏里,有很多有趣的 Basic 工程。 这仅仅是一个项目的开始,但是我已经预言到了它的美好的未来。
lf323, Hardware: 评测:LinuxCertified 出售的预装 Linux 的笔记本计算机 Thu, Jan 1. 2004
原始地址:http://www.linuxfocus.org/ChineseGB/January2004/article323.shtml
by Guido Socher (homepage) 关于作者: Guido 不喜欢计算机的不可预测性,以及计算机作出的无法解释的事情, 这也是为什么他使用 Linux 的原因之一。在 Linux 下也会发生奇怪的事情, 但是只要你有毅力,通常情况下都能找到原因。 目录: |
评测:LinuxCertified 出售的预装 Linux 的笔记本计算机
摘要: Linuxcertified.com 出售预装 Linux
的笔记本。在本文中, 我们测试了他们的两个型号。 |
简介
你只能购买到预装 Windows 的日子已经一去不复返了。 如果你仔细看看你的周围,你就会发现很多公司,通常是小公司, 提供没有操作系统或者预装 Linux 的膝上型计算机。笔记本的一个问题就是你不能很容易的更换部件。 为了节省空间,大部分部件都整合进芯片组了。 因为顾客不能选择不同的部件,所以通常情况下, 你无法得到里面的部件的详细说明。因此,很难知道声卡、图形控制器、 电源管理、以太网卡和调制解调器是不是完全被 Linux 支持, 还是不能像预期的那样正常使用。
如果一个公司为你完成了所有的整合集成工作, 以确认所有的硬件部件都能够被完全的支持, 那么他们提供的是非常超值的服务。
Linuxcertified 是一家在美国的公司,这一次我们测试了他们出售的笔记本, 来看看他们在 Linux 下使用的怎么样。
参评产品
我们从 Linuxcertified.com 购买了两台膝上型计算机, 一台是他们的品牌,叫做“LC2410”,另一台是IBM Thinkpad 600e。 当我致电给 Linuxcertified 的时候,我第一个问题就是 “是不是所有的硬件部件都能够完全支持 Linux 并且在 Linux 下面使用?”。 我得到了肯定的回答,所以我就下了订单。LC2410
![]() |
![]() |
详细配置信息:
中央处理器:Intel Pentium 4 - 2.66 GHz
内存 :512MB 标准 DDR 内存
显示器 :15" XGA TFT LCD
芯片组 :Intel 845,参见 http://www.intel.com/design/chipsets/845/
显卡 :82845G/GL,芯片组集成,XFree86 i810 驱动。
支持三维图形加速
光驱 :DVD/CD 读取,CD 刻录 (IDE 接口)
网络 :10/100Mbit 国家半导体 DP83815 芯片
调制解调器:Intel 82801 (Linuxcertified 提供附加的内核模块,
从 http://www.smlink.com/ 下载驱动程序)
声卡 :芯片组集成,使用 i810_audio 驱动程序
USB 接口 :4 个接口,USB 2.0 控制器。还有一个 SD、MS 和 MMC 读卡器
(不支持 CF 卡)
PCMCIA :一个 PCMCIA 插槽
火线 :VIA IEEE 1394 OHCI
其他端口 :并行口, PS2 接口,S 端子视频输出口,15 针外接显示器接口
操作系统 :Rehat 9.0,附加的驱动程序(特别是调试解调器的)已经预装,
并且在拷贝到了 /root/lc2000/
硬盘 :40Gb IDE接口
附件 :免费的电脑包
LC2410 没有 RS232 串行口,也没有软驱。你可以外接一个 USB 的软驱,
BIOS 能够自动识别并且从软驱引导。
这台膝上型计算机使用的是因为台式机而出名的 AMI 的 BIOS。 提供了非常多的配置选项,这在大多数笔记本中是很罕见的。 在右面你可以看见拆开的 LC2410。你能够看见 DDR 内存模块、硬盘、 有冷却单元的 CPU 和电池。
这台机器的电源系统让我们非常吃惊。BIOS 有 ACPI 电源管理界面, 但是不能被 Redhat 9.0 发行版支持。也许以后能够支持(参见 http://acpi.sourceforge.net/)。在完成本文之际,Linux 下的 ACPI 支持仍然没有完成。结果就是你无法知道电池充了多少电的信息, 在你关闭计算机的时候它不能自动切断电源。与之独立的,待机功能正常。 当你按 Fn+F1 的时候 LC2410 就能进入待机模式, 然后你可以通过按一下电源按钮来唤醒计算机。
如果你使用了很长时间,这台笔记本会非常的热。但是热量不是来源于 CPU 周围,而是来自键盘的下方和前方。看起来热量来源于康宝光驱、 芯片组和硬盘。在室温 (22'C=71'F) 下使用了几个小时 LC2410 后, 硬盘的温度传感器报告 60' 摄氏度 (=140'F)。 我不能说这个会不会有更进一步的影响。不过直到现在, LC2410 都在正常的运行。如果你在 /etc/rc.d/rc.local 添加“hdparm -S 12 /dev/hda”,多少可以让硬盘降点温。 这会在硬盘没有被使用超过一分钟过后自动停靠硬盘。
另外的,除了电源管理以外的所有部件都和预装的 Tedhat 9.0 一同运行的非常好。 这台笔记本因为他的 2.66GHz 的中央处理器和 512Mb 的内存所以运行的非常快。 (注:我们没有测试读卡器和火线因为我们没有任何用来测试他们的设备)。
IBM Thinkpad 600e
着台 Thinkpad 600e 是一台二手货(“翻新的”)。IBM 在 1999 年停止了这个型号的生产。不过这台机器的外观还是非常的好。 显示屏是 13' 英寸宽。这台 Thinkpad 是一台非常好的、易用的机器。 它要比 LC2410 小多了。更好的是 IBM 自己有一个Linux Thinkpad 600e 的网页(参见最后的链接)。在页面的上部有你可以找到很多有关于在 Thinkpad 上使用 Linux 的信息的网站。( www.linux-thinkpad.org 、 linux thinkpad webring )。理所应当的,这台机器要慢一些, 但是所有的部件都能够支持 Linux 并且在 Linux 下面工作。 一个 400HHz 的中央处理器对大多数的工作都是足够用了。 你可以运行精简的,类似 ICEWM 的窗口管理器以节省内存。 这样你可以完全的避免使用交换分区,却还能运行一些类似 mozilla. 这样的大型应用程序。一个运行桌面应用程序的计算机的响应和反应速度, 很少取决于 CPU 的速度,而且取决的使用的交换分区的数量。详细培植信息:
型号 :TP 600E 2645-4CU
中央处理器:Intel Pentium II/400 MHz
内存 :288Mb
显示器: :13.3" Active Color
芯片组 :Intel 440BX
显卡 :NeoMagic 256,XFree86 neomagic 驱动程序。
不支持三维图形加速
光驱 :CD 光驱 (IDE 接口)
网卡 :3com pcmcia 卡,3c574
调制解调器:WinModem,通过 mwave 驱动程序支持。
声卡 :Cirrus Logic。标准的 soundblaster 驱动程也可以使用
(CS4232 驱动程序也可以)。
你可以在 /etc/modules.conf 里面添加如下信息:
options opl3 io=0x388
options sb io=0x220 irq=7 dma=1
USB :一个 USB 端口
其他端口 :并行口,PS2 接口,15 针外接显示器接口,RS232 串行口
操作系统 :Redhat 8
硬盘 :10 Gb IDE
包括一个外接软驱
Thinkpad 有一个红外接口但是我们没有测试。
Thinkpad 的 BIOS 基本上什么都没有。你很难做任何配置。 替代的,IBM 提供了一个叫做 PS2 的实用程序能够用来配置任何选项 (显示器黑屏时间、IRQ、……)。这个 PS2 应用程序可以保存到在一张 DOS 启动盘里(参见本文最后的 uttcpdos)。PS2 所做的改变都是永久性的。 你只需要设置一次,然后就使用这些设置了。而且还有一个 Linux 下面的小程序提供了相同的功能: tpctl.sourceforge.net 。
tpctl 实用程序和必须的内核模块都没有包含在 Linuxcertified 出售的笔记本里。 这台 Thinkpad 600e 的一个问题就是架构比较旧,所以 IRQ 共享不能在所有的内部设备之间很好的工作,例如调制解调器、声卡、串行口、 USB 控制器等。这花费了我一些时间才能让所有的部件都能同时正常的工作。 当机器到达的时候在调制解调器和以太网卡之间有 IRQ 冲突。
结语
我希望 Linuxcertified 能够把硬件和 Linux 继承整合得更好。 他们网站上的规格表根本没有提到他们自己品牌的电源管理不能正常使用。 这非常令人吃惊。不过硬件的质量很好,也许在你读到这篇文章的时候, 标准的 Linux 内核已经能够完全的支持 LC2410 的 BIOS 了。Linuxcertified 对于电子邮件交流的反应非常快。我的推荐从 Linuxcertified 这样的公司购买预装 Linux 的膝上型计算机。我希望在我发现电源管理的问题后, 有机会退回这台机器那回我的钱,不过也许在你购买预装 Linux 的机器的时候已经不再是一个问题了。
链接
- linuxcertified.com、linux
膝上型计算机
- 其他的预装 Linux 的笔记本出售商:
-xtops.de
-emperorlinux.com
-qlilinuxpc.com
-aslab.com
- 关于在笔记本上使用 Linux 的站点:
-linux-laptop.net
-tuxmobil.org
-www.linux.org/hardware/laptop.html
- PS2 dos 配置实用程序:
ftp://ftp.software.ibm.com/pc/pccbbs/mobiles/uttcpdos.exe
ftp://ftp.software.ibm.com/pc/pccbbs/mobiles/uttcpdos.txt
- IBM 在 TP600 上安装 Redhat 6.0 的指南:http://www.pc.ibm.com/qtechinfo/MIGR-4BP6Q6.html。
注意在 Redhat 6.0 文章中提到的大部分限制都已经不在 Redhat 8.0 或更高的版本中存在了。
-
Thinkpad 600e 用户指南
- linux-thinkpad.org,
这个站点已经很久没有更新了,但是还是很有用的。
- tpctl 实用程序,Linux
下的 PS2


