FreeBASIC マニュアルのトップに戻る

FreeBASIC GTK の簡単な事例

目次→フォーラム→FreeBASIC→補足Простейшие примеры GTK←オリジナル・サイト

GTK の簡単な事例 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

渡辺注:FreeBASIC GTK 教本 を先にご覧ください。

メッセージを出力

日本語でコメントを出力する例です。

1.メッセージを出力:


#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) '対話を削除(ダイアログ)
画面を表示

2.簡単な画面:


#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 () 'メイン・ループへの入り口
画面の色を変える

3.画面の色を変える:


#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 () 'メインループへの入り口

イベントのボタンを押す画面

4.イベントのボタンを押す画面:


#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
緑色の文字

5.色付きの文字のウィジェット:


#INCLUDE "gtk/gtk.bi"

Dim Shared As GtkWidget Ptr window_ 'オブジェクトボックスへのポインタ
Dim Shared As GtkWidget Ptr 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)) 'ラベルを作成する
gtk_container_add (GTK_CONTAINER(window_),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 () 'メインループへの入り口
うし

6.画面の文字ウィジェットとその処理:


#INCLUDE "gtk/gtk.bi"

Declare Sub EVENTS_BUTTON()'イベント手続き・ラベルを掲示する
Dim Shared As GtkWidget Ptr window_ 'オブジェクトボックスへのポインタ
Dim As GtkWidget Ptr vbox 'コンテナへの参照
Dim Shared As GtkWidget Ptr 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 () 'ラベルに対するイベントを提供するコンテナを作成する
gtk_container_add (GTK_CONTAINER(window_), vbox)'作成した画面にコンテナを固定
Label= gtk_label_new(g_locale_to_utf8("メッセージを表示(画面をクリックして下さい)" _
,Len("メッセージを表示(画面をクリックして下さい)"),0,0,0)) 'ラベルを作成する
gtk_container_add (GTK_CONTAINER(vbox),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) 'ラベルの信号処理
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'終結シグナル
gtk_widget_show_all (window_)'ウィンドウを表示し、その中のすべて
gtk_main () 'メインループへの入り口

'イベント手続き・ラベル
Sub EVENTS_BUTTON()
    Dim As String ST = *gtk_label_get_text(Cast(GtkLabel Ptr,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") 'ラベルのテキストを変更する
End Sub
フレームの例

7.フレームの例:


#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 () 'メインループへの入り口

大きさが変わるフレーム

8.画面の大きさに比例してフレームのサイズが変わる:


#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 () 'メインループへの入り口
画面のメニュー

9.画面のメニュー:


#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 ()'メインループへの入り口
画面の文脈メニュー

10.画面の文脈メニュー:


#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 ()'メインループへの入り口
原本のあるロシアのサイト
渡辺注:FreeBASIC GTK 教本 も、ご覧ください。

 
補足 に戻る
←リンク元に戻る プログラム開発関連に戻る
(翻訳作成)ページ歴史:2012-02-12
日本語翻訳:WATANABE Makoto

ホームページのトップに戻る

表示-非営利-継承