О GtkHTML информации в интернете очень мало, а про работу с формами я вообще ничего не нашёл и знакомился с ними на единственном примере.
Для всех элементов формы вместо привычных <input> необходимо использовать тэг <OBJECT>, причём он один заменяет всю форму (далее станет понятно). Как только GtkHTML встретит данный тэг - будет издан сигнал 'object-requested', в ответ на который вызовем функцию on_object_requested(). Ей автоматически передадутся два объекта - GtkHTML и GtkHTMLEmbedded. Последний представляет из себя контейнер для встраивания виджетов в HTML-код. В функции on_object_requested() создаём обычные виджеты, помещаем их в GtkHTMLEmbedded и работаем с ними, как со всеми остальными, рассматриваемыми в предыдущих статьях.
Если у Вас имеется некий готовый HTML-код с формой, то необходимо написать простой парсер, который вырежет всё, что находится между <form> и </form>, вставит на это место <OBJECT> и далее, в соответствии с кодом формы, создаст интерфейс. Но это уже чистый PHP, поэтому останавливаться на данном вопросе не буду.
Полный код программы:
<?php
$window = new GtkWindow();
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$html = new GtkHTML();
$str = "<OBJECT>";
$html->connect('object-requested', 'on_object_requested');
$html->load_from_string($str);
$window->add($html);
$window->show_all();
Gtk::main();
function on_object_requested($html, $embedded)
{
$hbox = new GtkHBox();
$hbox->show();
$entry = new GtkEntry();
$entry->connect('activate', 'on_printing');
$entry->show();
$hbox->pack_start($entry, TRUE, TRUE);
$button = new GtkButton('Press');
$button->connect_simple('clicked', 'on_printing', $entry);
$button->show();
$hbox->pack_start($button, FALSE, FALSE);
$embedded->add($hbox);
return TRUE;
}
function on_printing($entry)
{
echo "Содержимое поля ввода: " . $entry->get_text() . "\r\n";
}
?>
7 комментариев:
Браво! только вчера спросил в 18:30, а уже через час статья есть!
вот это скорость! спасибо, как рас то что надо!
в понедельник по тестирую =)
Здравствуйте, сорри за анонимность, а есть ли возможность использовать PHP-GTK2 и gecko?
просто в списке библиотек есть библиотека GtkMozEmbed ( http://gtk.php.net/manual/en/mozembed.gtkmozembed.php )
список функций, но без примера и с плохим знанием английского тяжело разобраться самому.
P.S.: мануалы с сайта мозиллы сильно устарели.
Спасибо.
Сегодня вечером скомпилирую php-gtk с поддержкой GtkMozEmbed и попробую. Если получится, то напишу статью.
Да, GtkMozEmbed действительно использует движок Gecko. Судя по Python-версии он является достаточно мощным и проходит Acid3 на 73 балла. Но вот в PHP-GTK, почему-то, подключить данный модуль у меня не получается, хотя он скомпилирован с параметром --with-mozembed.
жаль... но спасибо за попытку
--with-asdasdasd
тоже скомпилируется и будет в билде отображатся, это не значит что компонент подключился, нужно смотреть configure скрипт, умеет ли он реагировать на --with-mozembed, и искать почему не подключает
Умеет. По крайней мере в справочной информации имеется соответствующая строчка
./configure --help
Отправить комментарий