我正在使用 Gtk + (技术上是 GtkAda )在 Ada 中写一些聊天。我有一些 Gtk 的问题。我的窗口包含Entry
,TextView
和Button
(“发送”)。
困难的部分在处理程序On_Button_Send_Clicked
中(处理信号'点击'按钮的程序)。我想阅读Entry
文字表格并将其放在TextView
中,但我如何从只能访问TextView
的程序中访问Entry
和Button
,因为我以这种方式将信号与处理程序连接起来:
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_Entry
或Get_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
答案 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