与Gtk +聊天窗口

时间:2012-01-16 09:23:42

标签: gtk ada

我正在使用 Gtk + (技术上是 GtkAda )在 Ada 中写一些聊天。我有一些 Gtk 的问题。我的窗口包含EntryTextViewButton(“发送”)。

困难的部分在处理程序On_Button_Send_Clicked中(处理信号'点击'按钮的程序)。我想阅读Entry文字表格并将其放在TextView中,但我如何从只能访问TextView的程序中访问EntryButton ,因为我以这种方式将信号与处理程序连接起来:

package Handlers is new Gtk.Handlers.Callback
    (Widget_Type => Gtk_Widget_Record);

procedure On_Button_Send_Clicked
    (Object : access Gtk_Widget_Record'Class);
...

Handlers.Connect
   (Button, "clicked", Handlers.To_Marshaller (On_Button_Send_Clicked'access);

我的问题是:有没有像Get_Gtk_EntryGet_Text_View这样的方法,这会是简单的方法吗?或者有其他方式,但仍然很简单?

我还遇到了一个解决方案,其中我声明了一条记录:

type Widget_Collection_Record is new Glib.Object.GObject_Record with record
    Terminal   : Gtk.GEntry.Gtk_Entry;
    Text_Field : Gtk.Text_View.Gtk_Text_View;
end record;

以这种方式进行回调:

package Widget_Collection_Cb is new Gtk.Handlers.Callback
    (Widget_Type => Widget_Collection_Record);

procedure On_Button_Send_Clicked
    (Object : access Widget_Collection_Record'Class);

但现在我还有另一个问题:如何将Button的信号与处理程序相关联,因为小部件Button不是我Widget_Collection_Record的一部分?

我不确定我是否听起来很清楚...

所以,如果你知道可以解决我的问题,请发帖 - 它可能是C,C ++,Python - 我会尝试将其转换为Ada; D

我的问题摘要是:

如何在Entry点击时编写处理程序以便从Text_View读取并在Button上书写?

修改:问题已关闭。我知道我要求的内容并不清楚,这就是我选择将User_Data的记录传递给回调的方式......现在我的新问题是here

1 个答案:

答案 0 :(得分:0)

通常我会使用此引用:http://www.univ-orleans.fr/sciences/info/ressources/webada/doc/gtkada/gtkada_rm/index.html

您没有提供有关项目组织的详细信息。 但是如果你有一个简单的程序,你可以声明一切:

procedure foo is
    -- variables
    E : GTk_GEntry;
    T : Gtk_Text_View;
    ...
    procedure On_Button_Send_Clicked (Object : access Gtk_Widget_Record'Class) is
    begin
       S : String := Get_Text (E);
       B : Gtk_Text_Buffer := Get_Buffer (T);
    begin
       Set_Text (B, S);
       ...
    end On_Button_Send_Clicked;
begin
   ...
   Handlers.Connect
      (Button, "clicked", Handlers.To_Marshaller (On_Button_Send_Clicked'access);
   ...
end foo