FreePascal и GTK Глюки

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
AlexanderS
незнакомец
Сообщения: 5
Зарегистрирован: 13.07.2009 10:00:24

FreePascal и GTK Глюки

Сообщение AlexanderS »

Решил попробовать GTK и налетел на такой глюк:
создал окно с многострочным редактором. запускаю. выделяю мышкой в редакторе текст и пытаюсь перетащить. и тут программа падает. аналогичная программа на Си работает нормально. текст переносится мышкой как положено.
Может какой нибудь уважаемый гуру объяснит суть проблемы? Буду очень признателен.
вот код

program Project1;

{$mode objfpc}{$H+}

uses
glib2,gtk2;

procedure destroy(widget : pGtkWidget ; data: pgpointer ); cdecl;
begin
gtk_main_quit();
end;

var
window, editor : pGtkWidget;

begin
gtk_init (@argc, @argv);

window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (pGTKOBJECT (window), 'destroy',
GTK_SIGNAL_FUNC (@destroy), NULL);

editor := gtk_text_view_new();
gtk_container_add(GTK_Container(window), editor);

gtk_widget_show_all (window);
gtk_main();
end.
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

В Linux (Debian Lenny) всё работает.
* FPC 2.2.4 (собирал из исходников)
* GTK+ 2.12

..bw
AlexanderS
незнакомец
Сообщения: 5
Зарегистрирован: 13.07.2009 10:00:24

Сообщение AlexanderS »

Пардон. У меня Windows XP
GTK 2.16
Попробовал то же самое в Delphi 7. Тот же глюк. Вроде программа ниче не делает, только вызовы DLL, а не работает. В Си работает.

#include <gtk/gtk.h>

void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}


int main (int argc, char **argv)
{
GtkWidget *window;
GtkWidget *editor;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window), "delete_event", G_CALLBACK (destroy), NULL);
editor = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER (window), editor);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Народ пользуйтесь тэгом CODE!!!!
AlexanderS
незнакомец
Сообщения: 5
Зарегистрирован: 13.07.2009 10:00:24

Сообщение AlexanderS »

Попробовал это скомпилить в Delphi без RTL. Заработало. Получается нужно копать в RTL :?:
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

AlexanderS писал(а):Попробовал это скомпилить в Delphi без RTL. Заработало. Получается нужно копать в RTL :?:

Вы форумом случайно неошиблись? Причём тут Delphi? Без RTL Вы никак не сможете собрать программу!
AlexanderS
незнакомец
Сообщения: 5
Зарегистрирован: 13.07.2009 10:00:24

Сообщение AlexanderS »

Я делал как http://www.excode.ru/art2775p7.html
Думаю проблема та же, что и в Delphi. Чего то они там в RTL нахакали. Иначе как объяснить то, что программа которая ничего не делает кроме вызовов DLL в паскале не работает, а в Си работает.

Добавлено спустя 11 минут 14 секунд:
Скомпилил с RTL от KOL http://kolmck.net/rindex.htm
тоже работает нормально. уже можно жить :D
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Случайно не в том причина, что в примере на C сигнал называется delete_event, а в примере на Паскале - destroy?
AlexanderS
незнакомец
Сообщения: 5
Зарегистрирован: 13.07.2009 10:00:24

Сообщение AlexanderS »

а без разницы. все равно глюк происходит во время работы, а не когда окно закрывается
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Собранный кросс-компиляцией для w2k (Gtk+ 2.12.9) пример не работает.
Стоит начать с изучения traceback-а. Исключение - деление на ноль.

..bw
Ответить