📄 gtk_tut_it-11.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK Tutorial: Widget "Testo" (Text Widget)</TITLE> <LINK HREF="gtk_tut_it-12.html" REL=next> <LINK HREF="gtk_tut_it-10.html" REL=previous> <LINK HREF="gtk_tut_it.html#toc11" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut_it-12.html">Avanti</A><A HREF="gtk_tut_it-10.html">Indietro</A><A HREF="gtk_tut_it.html#toc11">Indice</A><HR NOSHADE><H2><A NAME="s11">11. Widget "Testo" (Text Widget)</A></H2><P>Il widget di testo permette di mostrare e modificare del testo disposto su piùlinee. Questo widget supporta sia la presenza di diversi colori che di diversi fontcontemporaneamente, permettendo di mischiarli nel modo in cui si desidera. Mette poi adisposizione un ampio gruppo di comandi basati sulla tastiera, che sono compatibili conEmacs.<P>Il widget di testo dà la possibilità di fare taglia e incolla in modocompleto, compreso l'uso del doppio e triplo click per selezionare un'intera parola oun'intera linea.<P><H2><A NAME="ss11.1">11.1 Creazione e configurazione di una casella di testo</A></H2><P>Esiste un'unica funzione per la creazione di un nuovo widget di testo:<BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_text_new (GtkAdjustment *hadj, GtkAdjustment *vadj);</PRE></CODE></BLOCKQUOTE><P>Gli argomenti di questa chiamata ci permettono di assegnare dei puntatori a deivalori che stabiliscono il punto di vista del widget. Passare dei valori NULL all'unoo all'altro o ad entrambi questi argomenti, fà sì che gtk_text_new licrei automaticamente.<P><BLOCKQUOTE><CODE><PRE>void gtk_text_set_adjustments (GtkText *text, GtkAdjustment *hadj, GtkAdjustment *vadj);</PRE></CODE></BLOCKQUOTE><P>La funzione precedente permette di cambiare gli aggiustamenti orizzontale e verticaledi un widget di testo i ogni momento.<P>Il widget di testo non \ di creare delle barre di scorrimento quando laquantità è troppo grande per la finestra. Dobbiamo quindi crearle eaggiungerle alla finestra noi stessi.<P><BLOCKQUOTE><CODE><PRE> vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)->vadj); gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0); gtk_widget_show (vscrollbar);</PRE></CODE></BLOCKQUOTE><P>Il pezzetto di codice precedente crea una nuova barra di scorrimento verticale e lacollega all'aggiustamento verticale del widget di testo, <CODE>text</CODE>, dopodiché laimpacchetta nella hbox al solito modo.<P>Ci sono due modi principali di utilizzo di un widget di testo: per permettere all'utentedi editare del testo, oppure per permettere a noi di mostrare all'utente del testodisposto su più righe. Per passare dall'una all'altra di queste modalità,il widget di testo ci mette a disposizione la seguente funzione:<P><BLOCKQUOTE><CODE><PRE>void gtk_text_set_editable (GtkText *text, gint editable);</PRE></CODE></BLOCKQUOTE><P>L'argomento <CODE>editable</CODE> è un valore TRUE o FALSE che specifica se l'utentepuò modificare o meno il contenuto del widgte. Quando il widget èmodificabile, mostrerà un cursore nel punto di inserimento corrente.<P>Niente però vi obbliga ad usare il widget di testo in questi due soli modi. Sipuò passare dall'una all'altra delle due modalità in qualsiasi momento,e si può inserire del testo in ogni momento.<P>Il widget di testo è in grado di andare a capo automaticamente quando delle lineedi testo sono troppo lunghe per stare su una sola linea della finestra. Il comportamentopredefinito è di andare a capo automaticamente al termine della linea. Questopuò essere cambiato con la seguente funzione:<P><BLOCKQUOTE><CODE><PRE>void gtk_text_set_word_wrap (GtkText *text, gint word_wrap);</PRE></CODE></BLOCKQUOTE><P>L'uso di questa funzione ci permette di specificare se il widget di testo deve spezzareo no le linee lunghe ai bordi della finestra. L'argomento <CODE>word_wrap</CODE> è unvalore di tipo TRUE o FALSE.<P><H2><A NAME="ss11.2">11.2 Manipolazione del testo</A></H2><P>Il punto di inserimento corrente del widget può essere stabilito usando<BLOCKQUOTE><CODE><PRE>void gtk_text_set_point (GtkText *text, guint index);</PRE></CODE></BLOCKQUOTE>in cui <CODE>index</CODE> è la posizione in cui mettere il punto di inserimento.<P>La funzione per ottenere la posizione di inserimento corrente è analoga:<BLOCKQUOTE><CODE><PRE>guint gtk_text_get_point (GtkText *text);</PRE></CODE></BLOCKQUOTE><P>Una funzione che è utile in combinazione con le precedenti due è<BLOCKQUOTE><CODE><PRE>guint gtk_text_get_length (GtkText *text);</PRE></CODE></BLOCKQUOTE>la quale restituisce la lunghezza corrente del widget di testo. La lunghezza èdefinita come il numero di caratteri che si trovano nel blocco di testo della finestra,compresi i caratteri tipo CR, che marcano la fine delle linee.<P>Per inserire del testo alla posizione corrente del widget di testo, si usa la funzionegtk_text_insert, che permette anche di specificare i colori di primo piano e di sfondoper il testo, oltre al font da usare.<P><BLOCKQUOTE><CODE><PRE>void gtk_text_insert (GtkText *text, GdkFont *font, GdkColor *fore, GdkColor *back, const char *chars, gint length);</PRE></CODE></BLOCKQUOTE><P>Passare un valore di NULL come valore per il colore di primo piano (fore), di sfondo (back)o per il font, farà sì che vengano usati i valori che sono specifici dellostile del widget. Usare un valore di <CODE>-1</CODE> per il parametro lunghezza (length) avràcome risultato l'inserzione dell'intera stringa di testo.<P>Il widget di testo è uno dei pochi in GTK che vengono disegnati dinamicamente, fuoridalla funzione gtk_main. Ciò significa che tutti i cambiamenti al suo contenutoavranno effetto immediato. Questo può essere un comportamento indesiderabile quandosi stanno facendo delle modifiche multiple al contenuto del widget. Per permettere di operare cambiamenti multipli sul widget senza che esso si ridisegni continuamente,si può congelare il contenuto della finestra, in modo che esso interrompatemporaneamente di ridisegnarsi. Potremo poi sbloccare il widget una volta che tuttele modifiche sono state completate.<P>Le due seguenti funzioni fanno il congelamento e lo sbloccaggio (thaw) del widget:<P><BLOCKQUOTE><CODE><PRE>void gtk_text_freeze (GtkText *text);void gtk_text_thaw (GtkText *text); </PRE></CODE></BLOCKQUOTE><P>Il testo può essere cancellato nel widget di testo a partire dal punto diinserimento corrente usando le seguenti due funzioni, andando all'indietro (backward)o all'avanti (forward):<P><BLOCKQUOTE><CODE><PRE>gint gtk_text_backward_delete (GtkText *text, guint nchars);gint gtk_text_forward_delete (GtkText *text, guint nchars);</PRE></CODE></BLOCKQUOTE><P>Quando si vuole recuperare il contenuto del widget di testo, èdisponibile la macro <CODE>GTK_TEXT_INDEX(t, index)</CODE>, che permette diottenere il crattere alla posizione <CODE>index</CODE> all'interno del widget<CODE>t</CODE>.<P>Per ecuperare un blocco di testo più ampio, si usa la funzione:<P><BLOCKQUOTE><CODE><PRE>gchar *gtk_editable_get_chars (GtkEditable *editable, gint start_pos, gint end_pos); </PRE></CODE></BLOCKQUOTE><P>Questa è una funzione della classe madre del widget di testo. Un valoredi -1 per <CODE>end_pos</CODE>, sta ad indicare la fine del testo. L'indice per iltesto parte da 0.<P>Questa funzione alloca una nuova porzione di memoria per il blocco di testo,per cui non dimenticate di liberarla con una chiamata a g_free quando nonne avete più bisogno.<P><H2><A NAME="ss11.3">11.3 Keyboard Shortcuts</A></H2><P>Il widget di testo mette a disposizione un certo numero di scorciatoie da tastieraper le più comuni operazioni di modifica, movimento e selezione. Si possonoutilizzare con delle combinazioni che comprendono i tasti Control e Alt.<P>Oltre a queste, mantenendo premuto il pulsante Control mentre si usano i tasti dimovimento del cursore, causerà lo spostamento parola per parola invece checarattere per carattere. Mantenere invece premuto il tasto Shift mentre si sposta ilcursore, causerà l'estensione della selezione.<P><H3>Scorciatoie per il movimento</H3><P><UL><LI> Ctrl-A Inizio della linea</LI><LI> Ctrl-E Fine della linea</LI><LI> Ctrl-N Prossima linea</LI><LI> Ctrl-P Linea precedente</LI><LI> Ctrl-B Indietro di un carattere</LI><LI> Ctrl-F Avanti di un carattere</LI><LI> Alt-B Indietro di una parola</LI><LI> Alt-F Avanti di una parola</LI></UL><P><H3>Scorciatoie per la modifica</H3><P><UL><LI> Ctrl-H Cancella il carattere precedente (Backspace)</LI><LI> Ctrl-D Cancella il carattere successivo (Delete)</LI><LI> Ctrl-W Cancella la parola precedente</LI><LI> Alt-D Cancella la parola successiva</LI><LI> Ctrl-K Cancella fino alla fine della linea</LI><LI> Ctrl-U Cancella la linea</LI></UL><P><H3>Scorciatoie per la selezione</H3><P><UL><LI> Ctrl-X Taglia</LI><LI> Ctrl-C Copia</LI><LI> Ctrl-V Incolla</LI></UL><P><P><HR NOSHADE><A HREF="gtk_tut_it-12.html">Avanti</A><A HREF="gtk_tut_it-10.html">Indietro</A><A HREF="gtk_tut_it.html#toc11">Indice</A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -