В поле ввода пользователь записывает свое имя?
как взять вводимую информацию и проверить нет ли в ней недопустимых символов?
Таких к примеру как :;! цифры и т.д.
gtk_entry (как отфильтровать вводимые данные)
Модератор: Модераторы разделов
-
Georg
- Сообщения: 6
- ОС: Mandriva2007, Ubuntu6
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: gtk_entry (как отфильтровать вводимые данные)
То есть, вопрос о программировании c GTK?
Вот здесь есть хороший примерчик использования gtk_entry
http://www.klaban.torun.pl/help/GtkTutor/gtk_tut-9.html
(ближе к концу страницы).
Грубо говоря, gtk_entry_get_text выдаст тебе самую обычную сточку символов. Потом обрабатывай ее, как хочешь.
Вот здесь есть хороший примерчик использования gtk_entry
http://www.klaban.torun.pl/help/GtkTutor/gtk_tut-9.html
(ближе к концу страницы).
Грубо говоря, gtk_entry_get_text выдаст тебе самую обычную сточку символов. Потом обрабатывай ее, как хочешь.
-
Georg
- Сообщения: 6
- ОС: Mandriva2007, Ubuntu6
Re: gtk_entry (как отфильтровать вводимые данные)
Спасибо за ссылку.
Вот моя программка, ее проблема в том, что она не делает то, что мне нужно.
А нужно мне следующее:
Чтобы когда вводился символ ”;” по нажатию enter выводилось сообщение, что этот символ не м.б. использован.
Эта задача возложена у меня на функцию void enter_callback. По всей видимости проверка введенной информации не происходит подскажите пожалуйста почему.
Вот моя программка, ее проблема в том, что она не делает то, что мне нужно.
А нужно мне следующее:
Чтобы когда вводился символ ”;” по нажатию 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 (как отфильтровать вводимые данные)
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
- Сообщения: 6
- ОС: Mandriva2007, Ubuntu6
Re: gtk_entry (как отфильтровать вводимые данные)
Вопрос можно сказать по той же теме.
Возникла следующая проблема:
Создан файл в нем записаны 2 строки, разделитель между ними переход на новую строку \n.
Задача состоит в том, что нужно скопировать эту информацию построчно и занести ее в 2 поля ввода gtk_entry т.е. 1-ю строку в 1 поле ввода, а вторую соответственно во второе, как это можно осуществить средствами С/С++?
Возникла следующая проблема:
Создан файл в нем записаны 2 строки, разделитель между ними переход на новую строку \n.
Задача состоит в том, что нужно скопировать эту информацию построчно и занести ее в 2 поля ввода gtk_entry т.е. 1-ю строку в 1 поле ввода, а вторую соответственно во второе, как это можно осуществить средствами С/С++?
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: gtk_entry (как отфильтровать вводимые данные)
Uncle_Theodore
доволен?
ну давай, продолжай нянчится...
доволен?
ну давай, продолжай нянчится...
слава роботам!