gtk_entry (как отфильтровать вводимые данные)

Модератор: Модераторы разделов

Georg
Сообщения: 6
ОС: Mandriva2007, Ubuntu6

gtk_entry (как отфильтровать вводимые данные)

Сообщение Georg »

В поле ввода пользователь записывает свое имя?
как взять вводимую информацию и проверить нет ли в ней недопустимых символов?
Таких к примеру как :;! цифры и т.д.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: gtk_entry (как отфильтровать вводимые данные)

Сообщение Uncle_Theodore »

То есть, вопрос о программировании c GTK?
Вот здесь есть хороший примерчик использования gtk_entry
http://www.klaban.torun.pl/help/GtkTutor/gtk_tut-9.html
(ближе к концу страницы).

Грубо говоря, gtk_entry_get_text выдаст тебе самую обычную сточку символов. Потом обрабатывай ее, как хочешь.
Спасибо сказали:
Georg
Сообщения: 6
ОС: Mandriva2007, Ubuntu6

Re: gtk_entry (как отфильтровать вводимые данные)

Сообщение Georg »

Спасибо за ссылку.

Вот моя программка, ее проблема в том, что она не делает то, что мне нужно.
А нужно мне следующее:
Чтобы когда вводился символ ”;” по нажатию enter выводилось сообщение, что этот символ не м.б. использован.
Эта задача возложена у меня на функцию void enter_callback. По всей видимости проверка введенной информации не происходит подскажите пожалуйста почему.

Код: Выделить всё

#include<gtk/gtk.h>
int delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
    gtk_main_quit();
    return(FALSE);
}
void enter_callback(GtkWidget *widget, GtkWidget *name)
{
gchar *entry_text;
entry_text=gtk_entry_get_text(GTK_ENTRY(name));
g_print(entry_text);
if(entry_text==";")
g_print("Не м.б. использован\n");
else
g_print("Все OK\n");
}
int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *name;
    GtkWidget *table;
    GtkWidget *frame;
    GtkWidget *label;


    gtk_set_locale(); //функция позволяет выводить кирилицу
    gtk_init(&argc, &argv);


    /*Создание окна*/
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL);
    gtk_window_set_title(GTK_WINDOW(window), "Авторизация");
        /*Создание контейнера-таблицы*/
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    table=gtk_table_new(1, 2, TRUE);
    gtk_container_add(GTK_CONTAINER(window), table);

    frame=gtk_frame_new("");
    label=gtk_label_new("Имя:");
    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
    gtk_container_add(GTK_CONTAINER(frame), label);
    gtk_table_attach(GTK_TABLE(table), frame, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 5);

    name=gtk_entry_new();
    gtk_entry_set_editable(GTK_ENTRY(name), 1);
    gtk_table_attach(GTK_TABLE(table), name, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 5, 5);
    gtk_signal_connect(GTK_OBJECT(name), "activate", GTK_SIGNAL_FUNC(enter_callback), name);

    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: gtk_entry (как отфильтровать вводимые данные)

Сообщение Uncle_Theodore »

Georg писал(а):
23.02.2007 20:13
Спасибо за ссылку.

Вот моя программка, ее проблема в том, что она не делает то, что мне нужно.
А нужно мне следующее:
Чтобы когда вводился символ “;” по нажатию enter выводилось сообщение, что этот символ не м.б. использован.
Эта задача возложена у меня на функцию void enter_callback. По всей видимости проверка введенной информации не происходит подскажите пожалуйста почему.

void enter_callback(GtkWidget *widget, GtkWidget *name)
{
gchar *entry_text;
entry_text=gtk_entry_get_text(GTK_ENTRY(name));
g_print(entry_text);
if(entry_text==";")
g_print("Не м.б. использован\n");
else
g_print("Все OK\n");
}

Ну да, получается, что в этом if'e ты сравниваешь поинтер на строку со строкой из одного символа ";". Такое сравнение никогда не будет true.
А тебе надо найти в строке entry_text хотя бы один символ из запрещенных. То есть, не "равняется", а "содержит", как массив.
В принципе, это можно и руками сделать. Сравнивать элементы строки с каждым из запрещенных символов и обрывать, когда первое совпадение найдено.
Но в С есть классная функция для этого, strpbrk называется.

То есть, как-то вот так должно быть

Код: Выделить всё

void enter_callback(GtkWidget *widget, GtkWidget *name)
{
gchar *entry_text;
entry_text=gtk_entry_get_text(GTK_ENTRY(name));
g_print(entry_text);
 if(strpbrk(entry_text, ";:&"))
//if(entry_text==";")
g_print("Не м.б. использован\n");
else
g_print("Все OK\n");
}


Я запретил появление трех символов, ; : и &
Спасибо сказали:
Georg
Сообщения: 6
ОС: Mandriva2007, Ubuntu6

Re: gtk_entry (как отфильтровать вводимые данные)

Сообщение Georg »

Спасибо!
Теперь все работает как надо :D
Спасибо сказали:
Georg
Сообщения: 6
ОС: Mandriva2007, Ubuntu6

Re: gtk_entry (как отфильтровать вводимые данные)

Сообщение Georg »

Вопрос можно сказать по той же теме.

Возникла следующая проблема: :wacko:
Создан файл в нем записаны 2 строки, разделитель между ними переход на новую строку \n.
Задача состоит в том, что нужно скопировать эту информацию построчно и занести ее в 2 поля ввода gtk_entry т.е. 1-ю строку в 1 поле ввода, а вторую соответственно во второе, как это можно осуществить средствами С/С++?
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: gtk_entry (как отфильтровать вводимые данные)

Сообщение elide »

Uncle_Theodore
доволен?
ну давай, продолжай нянчится...
слава роботам!
Спасибо сказали: