Прошу сильно не пинать ногами, так как во FreePascal, как и в GTK я новичок. Данный пример пишется на Linux с использованием Geany. И так приступим по порядку к сути воспроса.
В моем GTK меню есть пункт - "Подпункт меню"
- Код: Выделить всё
kartmenu := gtk_menu_new();
kart := gtk_menu_item_new_with_mnemonic('_Меню');
gtk_menu_item_set_submenu(GTK_MENU_ITEM(kart), kartmenu);
kardet := gtk_menu_item_new_with_label('Подпункт меню');
gtk_menu_shell_append(GTK_MENU_SHELL(kartmenu), kardet);
если нажать на "Подпункт меню" то должна запускаться процедура (функция) создания вкладки.
- Код: Выделить всё
// тестовая процедура для вызова из меню
procedure test_label_book( notebook : pGtkWidget); cdecl;
var
hbox, labels, button, image : pGtkWidget;
w, h : gint;
style : pGtkRcStyle;
begin
hbox := gtk_hbox_new(FALSE, 3);
labels := gtk_label_new('Тестовая закладка');
gtk_box_pack_start(GTK_BOX(hbox), labels, TRUE, TRUE, 0);
image := gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, @w, @h);
button := gtk_button_new();
gtk_widget_set_size_request(GTK_WIDGET(button), 16, 16);
gtk_signal_connect_object(pGTKOBJECT(button), 'clicked', GTK_SIGNAL_FUNC(@remove_book), pGTKOBJECT(notebook));
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
gtk_container_add (GTK_CONTAINER(button), image);
style := gtk_rc_style_new();
style^.xthickness := 0;
style^.ythickness := 0;
gtk_widget_modify_style(GTK_WIDGET(button),style);
gtk_widget_show_all(hbox);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), gtk_label_new('Проверка'), hbox);
end;
Если вызвать напрямую данную процедуру (функцию) test_label_book(notebook), то прекрасно работает. Я использую так же VBox.
- Код: Выделить всё
notebook := gtk_notebook_new();
gtk_container_set_border_width(GTK_CONTAINER(notebook), 15);
gtk_notebook_set_tab_pos(GTK_NOTEBOOK (notebook), GTK_POS_TOP);
test_label_book(notebook);
vbox := gtk_vbox_new(FALSE, 2);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_box_pack_start(GTK_BOX(vbox), mb, FALSE, FALSE, 0); // здесь меню
gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), status_bar, FALSE, FALSE, 0);//здесь статусбар
Вопрос заключается в следующем. Как создать корректный запрос к данной процедуре (функции) "test_label_book" из меню? Ниже приведенный запрос в разных вариациях у меня не заработал.
- Код: Выделить всё
gtk_signal_connect_object(pGTKOBJECT(kardet), 'activate', GTK_SIGNAL_FUNC(@test_label_book), pGTKOBJECT(notebook));