Сигнал на нажатие кнопки

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

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

Сигнал на нажатие кнопки

Сообщение yyttyy » 08.12.2020 18:42:37

Что я делаю не так?

2 сигнала:

Код: Выделить всё
function button_pressed(button : PGtkWidget; event: PGdkEvent;
                        data : gpointer) : boolean; cdecl;
begin
    if (event^._type = GDK_BUTTON_PRESS) then
        writeln('Кнопка нажата');
    button_pressed := true;
end;

function button_released(button : PGtkWidget; event : PGdkEvent;
                         data : gpointer) : boolean; cdecl;
begin
    if (event^._type = GDK_BUTTON_RELEASE) then
        writeln('Кнопка отжата');
    button_released := true;
end;


Соединение с сигналами и отображение:

Код: Выделить всё
...
button := gtk_button_new_with_label('1');
    gtk_widget_add_events (button, GDK_BUTTON_PRESS_MASK
                           or GDK_BUTTON_RELEASE_MASK);
    buttonbox := gtk_fixed_new();
    g_signal_connect(G_OBJECT(button), 'clicked',
                     G_CALLBACK(@button_pressed), nil);
    g_signal_connect(G_OBJECT(button), 'released',
                     G_CALLBACK(@button_released), nil);
    gtk_widget_set_size_request(button, 50, 30);
    gtk_fixed_put(GTK_FIXED(buttonbox), button, 100, 100);
    gtk_widget_show(button);
    gtk_container_set_border_width(GTK_CONTAINER(Window), 0);
    gtk_container_add(GTK_CONTAINER(Window), buttonbox);
    gtk_widget_show(buttonbox);
...


Ошибка:

An unhandled exception occurred at $000000000040998D:
EAccessViolation: Access violation
$000000000040998D
yyttyy
незнакомец
 
Сообщения: 7
Зарегистрирован: 20.10.2020 00:55:00

Re: Сигнал на нажатие кнопки

Сообщение WAYFARER » 08.12.2020 23:04:25

Ошибка в какой момент получается?
Аватара пользователя
WAYFARER
постоялец
 
Сообщения: 436
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Сигнал на нажатие кнопки

Сообщение yyttyy » 09.12.2020 08:34:18

Вопрос решился! Я по этой документации https://developer.gnome.org/gtk2/stable ... ress-event и по нескольким примерам думал что именно проверка аргумента event определяет событие. В функции g_signal_connect я думал что второй параметр это просто название сигнала которое ты сам можешь дать, а оказалось что это идентификатор события. В общем у меня надо было просто заменить clicked на pressed или button-pressed-event во втором параметре функции g_signal_connect (Так расписал для тех кто вдруг тоже по глупости наткнется на это)
yyttyy
незнакомец
 
Сообщения: 7
Зарегистрирован: 20.10.2020 00:55:00


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru