⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut_it-11.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 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&ugrave;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&agrave; la possibilit&agrave; 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&agrave; s&igrave; 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&agrave; &egrave; 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&eacute; 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&ugrave; righe. Per passare dall'una all'altra di queste modalit&agrave;,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> &egrave; un valore TRUE o FALSE che specifica se l'utentepu&ograve; modificare o meno il contenuto del widgte. Quando il widget &egrave;modificabile, mostrer&agrave; un cursore nel punto di inserimento corrente.<P>Niente per&ograve; vi obbliga ad usare il widget di testo in questi due soli modi. Sipu&ograve; passare dall'una all'altra delle due modalit&agrave; in qualsiasi momento,e si pu&ograve; inserire del testo in ogni momento.<P>Il widget di testo &egrave; in grado di andare a capo automaticamente quando delle lineedi testo sono troppo lunghe per stare su una sola linea della finestra. Il comportamentopredefinito &egrave; di andare a capo automaticamente al termine della linea. Questopu&ograve; 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> &egrave; 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&ograve; essere stabilito usando<BLOCKQUOTE><CODE><PRE>void gtk_text_set_point (GtkText *text,                         guint   index);</PRE></CODE></BLOCKQUOTE>in cui <CODE>index</CODE> &egrave; la posizione in cui mettere il punto di inserimento.<P>La funzione per ottenere la posizione di inserimento corrente &egrave; analoga:<BLOCKQUOTE><CODE><PRE>guint gtk_text_get_point (GtkText *text);</PRE></CODE></BLOCKQUOTE><P>Una funzione che &egrave; utile in combinazione con le precedenti due &egrave;<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 &egrave;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&agrave; s&igrave; che vengano usati i valori che sono specifici dellostile del widget. Usare un valore di <CODE>-1</CODE> per il parametro lunghezza (length) avr&agrave;come risultato l'inserzione dell'intera stringa di testo.<P>Il widget di testo &egrave; uno dei pochi in GTK che vengono disegnati dinamicamente, fuoridalla funzione gtk_main. Ci&ograve; significa che tutti i cambiamenti al suo contenutoavranno effetto immediato. Questo pu&ograve; 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&ograve; 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&ograve; 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, &egrave;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&ugrave; 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 &egrave; 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&ugrave; 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&ugrave; 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&agrave; lo spostamento parola per parola invece checarattere per carattere. Mantenere invece premuto il tasto Shift mentre si sposta ilcursore, causer&agrave; 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 + -