Простейшие примеры GTK
Это просто примеры с русскими комментариями.
Вывод сообщения:
#INCLUDE "gtk/gtk.bi" gtk_init (0, 0) ' инициализация GTK Dim MessBox As GtkWidget Ptr ' указатель на новый диалог MessBox = gtk_message_dialog_new(0, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"Hello")' создаем новый диалог gtk_window_set_title(GTK_WINDOW(MessBox), g_locale_to_utf8("Сообщение",Len("Сообщение"),0,0,0))'заголовок для диалога gtk_dialog_run(GTK_DIALOG(MessBox))'Запуск диалога gtk_widget_destroy(MessBox) ' удаление диалога
Простое окно:
#INCLUDE "gtk/gtk.bi" Dim As GtkWidget Ptr window_ 'указатель на объект-окно Dim As String ST=*g_locale_to_utf8("Простое окно",Len("Простое окно"),0,0,0)' кодируем русские символы gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),st ) 'Название в заголовке gtk_window_set_default_size(GTK_WINDOW(window_), 300, 200)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана gtk_widget_show (window_) ' отобразить окно g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения gtk_main () 'вход в главный цикл
Замена цвета окна:
#INCLUDE "gtk/gtk.bi" Dim As GtkWidget Ptr window_ 'указатель на объект-окно Dim As GdkColor ncolor ' структура для цвета Dim As String ST=*g_locale_to_utf8("Простое окно",Len("Простое окно"),0,0,0)' кодируем русские символы gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),st ) 'Название в заголовке gtk_window_set_default_size(GTK_WINDOW(window_), 300, 200)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана ncolor.red = &hffff 'Оттенок красного на полную ncolor.blue = 0 'Оттенок синего не используем ncolor.green = &hffff 'Оттенок зеленого на полную gtk_widget_modify_bg(window_,GTK_STATE_NORMAL,@ncolor) gtk_widget_show (window_) ' отобразить окно g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения gtk_main () 'вход в главный цикл
Окно с кнопкой и обработка ее события:
#INCLUDE "gtk/gtk.bi" Declare Sub EVENTS_BUTTON()'объявление процедуры обработки события кнопки Dim As GtkWidget Ptr window_ 'указатель на объект-окно Dim As GtkWidget Ptr vbox ' указатель на контейнер Dim As GtkWidget Ptr button1 ' указатель на кнопку gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна gtk_window_set_default_size(window_, 100, 60)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана vbox = gtk_fixed_new() ' создаем неподвижный контейнер gtk_container_add (GTK_CONTAINER(window_), vbox)' крепим контейнер к нашему окну button1 = gtk_button_new_with_label(g_locale_to_utf8("Сделать BEEP",Len("Сделать BEEP"),0,0,0)) ' создаем кнопку gtk_widget_set_size_request(button1, 90, 25)' размеры кнопки gtk_fixed_put(GTK_FIXED(vbox), button1, 15, 10)' помещаем кнопку в контейнер g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK (@EVENTS_BUTTON), window_) ' сигнал-событие для кнопки gtk_widget_show_all (window_)' показываем окно и все в нем gtk_main () 'вход в главный цикл 'Процедура обработки события кнопки Sub EVENTS_BUTTON() Beep()' проигрываем звук gtk_main_quit () ' завершаем работу End Sub
Цветной текстовый виджет:
#INCLUDE "gtk/gtk.bi" Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно Dim Shared As GtkWidget Ptr Label ' указатель на Label Dim As GdkColor ncolor ' структура для цвета gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна gtk_window_set_default_size(window_, 100, 60)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана Label= gtk_label_new(g_locale_to_utf8("Вывести сообщение",Len("Вывести сообщение"),0,0,0)) ' создаем Label gtk_container_add (GTK_CONTAINER(window_),Label )' крепим Label к окну g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения ncolor.red = 0 'Оттенок красного на полную ncolor.blue = 0 'Оттенок синего не используем ncolor.green = &hffff 'Оттенок зеленого на полную gtk_widget_modify_fg(Label,GTK_STATE_NORMAL,@ncolor) gtk_widget_show_all (window_)' показываем окно и все в нем gtk_main () 'вход в главный цикл
Окно, текстовый виджет и его обработка:
#INCLUDE "gtk/gtk.bi" Declare Sub EVENTS_BUTTON()'объявление процедуры обработки события Label Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно Dim As GtkWidget Ptr vbox ' указатель на контейнер Dim Shared As GtkWidget Ptr Label ' указатель на Label gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна gtk_window_set_default_size(GTK_WINDOW(window_), 100, 60)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана vbox = gtk_event_box_new () ' создаем контейнер, обеспечивающий событие для Label gtk_container_add (GTK_CONTAINER(window_), vbox)' крепим контейнер к нашему окну Label= gtk_label_new(g_locale_to_utf8("Вывести сообщение",Len("Вывести сообщение"),0,0,0)) ' создаем Label gtk_container_add (GTK_CONTAINER(vbox),Label )' крепим Label к контейнеру gtk_widget_set_events (vbox, GDK_BUTTON_PRESS_MASK)'Устанавливаем маску события (см. GdkEventMask) для виджета g_signal_connect (G_OBJECT (vbox), "button_release_event",G_CALLBACK (@EVENTS_BUTTON()), 0) 'сигнал обработки Label g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения gtk_widget_show_all (window_)' показываем окно и все в нем gtk_main () 'вход в главный цикл 'Процедура обработки события Label Sub EVENTS_BUTTON() Dim As String ST = *gtk_label_get_text(Cast(GtkLabel Ptr,Label)) ' получаем текст из Label Dim MessBox As GtkWidget Ptr ' указатель на новый диалог MessBox = gtk_message_dialog_new(GTK_WINDOW(window_), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,ST)' создаем новый диалог gtk_window_set_title(GTK_WINDOW(MessBox), g_locale_to_utf8("Сообщение",Len("Сообщение"),0,0,0))'заголовок для диалога gtk_dialog_run(GTK_DIALOG(MessBox))'Запуск диалога gtk_widget_destroy(MessBox) ' удаление диалога gtk_label_set_text(Cast(GtkLabel Ptr,Label),"Hello") ' изменяем текст Label End Sub
Пример Frame(Рамка):
#INCLUDE "gtk/gtk.bi" Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно Dim As GtkWidget Ptr frame ' указатель на контейнер gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна gtk_window_set_default_size(Cast(GtkWindow Ptr, window_), 300, 300)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана gtk_container_set_border_width (GTK_CONTAINER (window_), 10)' отступы для контейнера окна. frame = gtk_frame_new (0)' Создаём рамку gtk_container_add (GTK_CONTAINER (window_), frame) ' крепим рамку к окну gtk_frame_set_label (GTK_FRAME (frame), "GTK Frame")'название для рамки gtk_frame_set_label_align (GTK_FRAME (frame), 1.0, 0.3)'Выравнивание рамки по ширине и высоте gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT)'стиль рамки g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения gtk_widget_show_all (window_)' показываем окно и все в нем gtk_main () 'вход в главный цикл
Пропорциональная рамка:
#INCLUDE "gtk/gtk.bi" Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно Dim As GtkWidget Ptr frame,drawing_area ' указатель на контейнер gtk_init (0, 0) ' инициализация GTK window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна gtk_window_set_default_size(Cast(GtkWindow Ptr, window_), 300, 300)' ставим размер окна gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана gtk_container_set_border_width (GTK_CONTAINER (window_), 10)' отступы для контейнера окна. frame = gtk_aspect_frame_new ("2x1",0.5,0.5,2,0)' Создаём пропорциональную рамку gtk_container_add (GTK_CONTAINER (window_), frame) ' крепим рамку к окну gtk_frame_set_label (GTK_FRAME (frame), "GTK Frame")'название для рамки gtk_frame_set_label_align (GTK_FRAME (frame), 1.0, 0.3)'Выравнивание текста рамки по ширине и высоте drawing_area = gtk_drawing_area_new () ' создаем дочерний виджет для рамки gtk_container_add (GTK_CONTAINER (frame), drawing_area) ' закрепляем виджет в рамке gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT)'стиль рамки g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения gtk_widget_show_all (window_)' показываем окно и все в нем gtk_main () 'вход в главный цикл
Окно с меню:
#INCLUDE "gtk/gtk.bi" ' если не объявлен null, объявляем его #IF Not DEFINED(null) #DEFINE Null 0 #ENDIF 'процедура обработки событий меню Sub menuSub Cdecl(st As String Ptr ) g_print (!"%s\n", st) End Sub Dim As GtkWidget Ptr win ' хендл окна Dim As GtkWidget Ptr menu ' хендл меню Dim As GtkWidget Ptr menu_bar 'хендл новой панели меню Dim As GtkWidget Ptr root_menu ' корневое меню Dim As GtkWidget Ptr menu_items_1,menu_items_2 ' хендлы пунктов меню Dim As GtkWidget Ptr vbox ' контейнер для меню gtk_init (0,0) ' инициализация GTK win = gtk_window_new (GTK_WINDOW_TOPLEVEL)'новое окно gtk_window_set_default_size(GTK_WINDOW(win), 200, 100)'размеры окна gtk_window_set_title (GTK_WINDOW (win), "GTK Menu Test")'заголовок окна g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения root_menu = gtk_menu_item_new_with_label ("Root Menu") 'создаем корневое меню menu = gtk_menu_new ()' новое меню gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu)' крепим к корневому меню наше меню menu_items_1 = gtk_menu_item_new_with_label ("One")'создаем новый пункт меню gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_1)'крепим к меню g_signal_connect_swapped (G_OBJECT (menu_items_1), "activate", G_CALLBACK (@menuSub),@"One")' обработка события меню menu_items_2 = gtk_menu_item_new_with_label ("Two")'создаем новый пункт меню gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_2)'крепим к меню g_signal_connect_swapped (G_OBJECT (menu_items_2), "activate", G_CALLBACK (@menuSub),@"Two")' обработка события меню gtk_widget_show (menu_items_1)' показываем 1 пункт gtk_widget_show (menu_items_2)' показываем 2 пункт gtk_widget_show (root_menu) ' показываем корневое меню vbox = gtk_vbox_new (FALSE, 0)' создаем новый контейнер для меню gtk_container_add (GTK_CONTAINER (win), vbox)'добавляем контейнер к окну gtk_widget_show (vbox) 'показываем контейнер menu_bar = gtk_menu_bar_new ()' создаем новую панель меню gtk_box_pack_start (GTK_BOX (vbox), menu_bar, 0, 0, 0) 'крепим к контейнеру нашу панель меню gtk_widget_show (menu_bar) ' показываем панель меню gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu) ' крепим к панели корневое меню gtk_widget_show (win) ' показываем окно gtk_main ()' вход в главный цикл
Окно с контекстным меню:
#INCLUDE "gtk/gtk.bi" ' если не объявлен null, объявляем его #IF Not DEFINED(null) #DEFINE Null 0 #ENDIF Dim As GtkWidget Ptr win ' хендл окна Dim Shared As GtkWidget Ptr menu ' хендл меню Dim As GtkWidget Ptr menu_items_1,menu_items_2 ' хендлы пунктов меню Dim As GtkWidget Ptr event_box ' контейнер событий для окна 'процедура обработки событий меню Sub menuSub Cdecl(st As String Ptr ) g_print (!"%s\n", st) End Sub 'процедура вывода контекстного меню Sub ContextmenuSub( ) gtk_menu_popup(GTK_MENU (menu), 0, 0, 0, 0, 0, 0) End Sub gtk_init (0,0) ' инициализация GTK win = gtk_window_new (GTK_WINDOW_TOPLEVEL)'новое окно gtk_window_set_default_size(GTK_WINDOW(win), 200, 100)'размеры окна gtk_window_set_title (GTK_WINDOW (win), "GTK Menu Test")'заголовок окна event_box = gtk_event_box_new () 'создаем контейнер событий окна gtk_container_add (GTK_CONTAINER (win), event_box) 'крепим его к окну gtk_widget_show (event_box) ' показываем контейнер g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения menu = gtk_menu_new ()' новое меню menu_items_1 = gtk_menu_item_new_with_label ("OneContextMenu")'создаем новый пункт меню gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_1)'крепим к меню g_signal_connect_swapped (G_OBJECT (menu_items_1), "activate", G_CALLBACK (@menuSub),@"OneContextMenu")' обработка события меню menu_items_2 = gtk_menu_item_new_with_label ("TwoContextMenu")'создаем новый пункт меню gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_2)'крепим к меню g_signal_connect_swapped (G_OBJECT (menu_items_2), "activate", G_CALLBACK (@menuSub),@"TwoContextMenu")' обработка события меню gtk_widget_show (menu_items_1)' показываем 1 пункт gtk_widget_show (menu_items_2)' показываем 2 пункт g_signal_connect (G_OBJECT (win), "button_press_event",G_CALLBACK (@ContextmenuSub()), 0) 'сигнал обработки вывода меню gtk_widget_show (win) ' показываем окно gtk_main ()' вход в главный цикл