Autore Topic: [RISOLTO] TextBox: posizionare il cursore da codice  (Letto 5827 volte)

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
[RISOLTO] TextBox: posizionare il cursore da codice
« il: 09 Aprile 2015, 11:29:33 »
Purtroppo un nuovo problemino..:)
Spero che chi ha più esperienza mi possa dare il suggerimento vincente.. col BASIC di .NET è possibile da codice assegnare a una TextBox la posizione desiderata al cursore tramite TextBox.Selectionstart = un intero (p.es. se ho Text "abcd" e imposto la proprietà citata a 2, il cursore si va a posizionare tra "b" e "c"); qui però, non sembra possibile, almeno basandomi sulla pagina di descrizione della classe TextBox. C'è qualche trucco? Per es. mi viene in mente l'interazione fatta da vuott con codice C all'interno del VB di Gambas.. forse qualcosa è possibile.. ma in tal caso avrei bisogno di un'illustrazione dettagliata perché non saprei da che parte iniziare.  
« Ultima modifica: 09 Aprile 2015, 13:26:42 da filipsnew »
Sub <homofaberfortunaesuae> End

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: TextBox: posizionare il cursore da codice
« Risposta #1 il: 09 Aprile 2015, 11:54:03 »
Ciao
Prova così

TextBox1.SetFocus
TextBox1.Pos = 2

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: TextBox: posizionare il cursore da codice
« Risposta #2 il: 09 Aprile 2015, 13:23:11 »
Ciao
Prova così

TextBox1.SetFocus
TextBox1.Pos = 2

Purtroppo mi era sfuggita questa Pos, ma avevo visto solo quella di Selection (forse per assonanza col .net) che è di tipo read e non poteva quindi essere settata. La tua soluzione direi che funziona benissimo, solo una cosa.. se l'utente ha già fatto click nella TextBox, allora tutto fila liscio, ma se non c'è stato l'evento come fare? tu dici di passare il focus, ma, anche in base a mie precedenti prove di test per familiarizzare, succede che col focus, se c'è testo, questo venga selezionato interamente, e la successiva istruzione di assegnamento non dia l'effetto desiderato perché sembra dominare il focus (addirittura mettendo focus e poi Unselect, accade sempre questa cosa di persistenza della selezione). Per i miei scopi, comunque, ho adesso tutti gli ingredienti giusti per risolvere.. ma mi piacerebbe capire questa cosa del focus che seleziona sempre tutto quando c'è testo (v. allegato)..
Sub <homofaberfortunaesuae> End

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #3 il: 09 Aprile 2015, 14:00:49 »
Anche se fai così?
Codice: gambas [Seleziona]
TextBox1.Select(2, Len(TextBox1.Text))

 :ciao:

P.S. Io uso Ubuntu non Kubuntu
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: TextBox: posizionare il cursore da codice
« Risposta #4 il: 09 Aprile 2015, 16:41:32 »
...succede che col focus, se c'è testo, questo venga selezionato interamente...... ma mi piacerebbe capire questa cosa del focus che seleziona sempre tutto quando c'è testo (v. allegato)..

E' stranissima questa cosa; a me non succede.  :-\

(Io uso Ubuntu-Linux Mint 17.1)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: TextBox: posizionare il cursore da codice
« Risposta #5 il: 09 Aprile 2015, 19:35:33 »
...succede che col focus, se c'è testo, questo venga selezionato interamente...... ma mi piacerebbe capire questa cosa del focus che seleziona sempre tutto quando c'è testo (v. allegato)..

E' stranissima questa cosa; a me non succede.  :-\

(Io uso Ubuntu-Linux Mint 17.1)

Fermi un attimo, avevo anche cercato di spiegarlo a Minisini, il comportamento QT e GTK è diverso almeno con Ubuntu e Unity: Se tu usi QT e dai il Focus lo scritto già presente non si seleziona, ma se usi GTK si seleziona eccome.  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: TextBox: posizionare il cursore da codice
« Risposta #6 il: 09 Aprile 2015, 21:37:45 »
se usi GTK si seleziona eccome.

Sì, è vero: se si usa GTK il testo risulta selezionato.


Un modo per ottenere il posizionamento del cursore ed anche far sparire la selezione con il componente GTK è combinare il metodo .SetFocus, suggerito da Golia, con un evento del mouse.
Ad esempio:
Codice: gambas [Seleziona]
Public Sub Form_Open()

   TextBox1.Text = "abcde"

End


Public Sub Button1_Click()

  TextBox1.SetFocus
  TextBox1.Pos = 2

End


Public Sub TextBox1_MouseUp()

  TextBox1.SetFocus
  TextBox1.Pos = 2

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #7 il: 09 Aprile 2015, 22:13:50 »
Ma scusa non ottieni lo stesso risultato usando il mio suggerimento inserendolo fra SetFocus e Pos, senza dover scomodare il mouse?  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #8 il: 09 Aprile 2015, 22:20:47 »
mah.. la cosa sembra un po' intricata..mi avete fatto venire il dubbio che possa dipendere da qualcosa tipo le chiamate di sistema di Xubuntu (che in una parte si differenzieranno credo da quelle di Ubuntu), ma sembra anche che vi sia una correlazione col fatto che l'esempio che avevo allegato stesse in form_open; infatti testando la TextBox.Hasfocus subito dopo TB.Setfocus, si ottiene FALSE, il che potrebbe apparire strano.. e invece, forse, il problema dipende proprio dal fatto che in quella fase di apertura la TextBox non sia ancora stata disegnata, il focus non venga riconosciuto, e alla fine si verifichi l'anomalia che ho segnalato: una selezione totale impossibile da eliminare con TB.Pos, TB.Select ecc., ma solo dando il click sulla TB. Infatti, il mettere subito dopo TB.Pos ecc. dovrebbe riflettere lo stesso problema, cioè impossibilità di posizionare o selezionare, per la stessa ragione del focus. Procedendo esternamente a Form_open infatti funziona tutto alla perfezione. Peraltro, rimane la selezione totale del testo (cosa a cui, se occorre, si può facilmente ovviare) in qualunque situazione: in Xubuntu, p.es. dando il focus usando Tab viene selezionato sempre tutto. Qui, visto che voi dite che in Ubuntu questo non si verifica, credo proprio che dipenda da differenze del tipo detto inizialmente.

Edit

Ah! questo è interessante: allora debbo dedurre che il tipo Applicazione Grafica (la prima della lista) che ho scelto coincide con GTK? quindi non c'entra a niente la diversità del sistema (che poi è esigua visto che Xubuntu deriva da Ubuntu e cambia essenzialmente la veste grafica). Cmq, secondo me ha ragione Gianluigi, non serve tirare in ballo  l'evento mouse. Infatti, come ho detto, cliccando sulla TB la selezione si annulla. Basta solo stare all'esterno di form_open, e siccome il problema era gestire focus e posizionamento da codice l'evento dovrebbe essere generato da qualcosa di estraneo all'azione diretta dell'utente sulla TB, vuoi quindi un click su un button o altra azione diversa dal click sulla TB.
« Ultima modifica: 09 Aprile 2015, 22:44:20 da filipsnew »
Sub <homofaberfortunaesuae> End

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #9 il: 09 Aprile 2015, 22:36:20 »
Guarda che i comportamenti differenti di Gambas dipendono in principal modo dal Desktop che usi e cioè dalle librerie.
Tu queste le puoi scegliere (cambiare) da Progetti > Componenti. Io non ho ancora capito che librerie usi.
E' stato già scritto ma comunque la cosa funziona così (dal libro che stiamo scrivendo):
Una precisazione sul perché esistono tre diversi tipi di applicazioni grafiche; la prima scelta Applicazione grafica creerà un programma che si adatterà alle librerie grafiche del sistema operativo, vale a dire se il nostro programma lo userà un utente che ha come desktop Gnome o Unity il programma userà le librerie GTK+2 se al contrario lo userà un utente con KDE il programma userà le librerie QT4.
Con la seconda scelta QT graphical application il nostro programma userà solo e sempre le librerie QT4 anche con gli utenti che usano Gnome o Unity, al contrario se sceglieremo Applicazione grafica GTK+ anche i nostri utenti KDE useranno le librerie GTK+2.
Qui corre l'obbligo di darvi un nostro consiglio poi fate ciò che preferite, come già detto malgrado i notevoli sforzi profusi da Minisini per far funzionare Gambas3 con le librerie GTK+ è innegabile che le librerie che non danno mai problemi sono quelle QT. Ora visto che con alcuni supporti le librerie QT lavorano bene anche con Gnome e Unity è vivamente consigliato l'uso di queste per creare i nostri programmi.
Per creare le nostre applicazioni Linux usiamo QT graphical application.

P.S. non è formattato ma spero non ne farai un dramma  ;D
« Ultima modifica: 09 Aprile 2015, 22:42:08 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #10 il: 09 Aprile 2015, 23:05:34 »
Grazie Gianluigi per le dettagliate informazioni. Allora c'entra il sistema utilizzato :) Purtroppo, come ho detto, ho scelto la prima opzione.. dovrei poi portare il programma su Ubuntu, ma tu dici che le librerie QT sono innegabilmente migliori.. potrei fare copia incolla del codice e del form in un progetto QT ex novo, però hai fatto cenno a un supporto che occorrerebbe nel caso di Unity; dovrei quindi chiedere di che si tratta questo supporto.
Sub <homofaberfortunaesuae> End

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #11 il: 09 Aprile 2015, 23:21:18 »
No scusa la confusione a te basta fare così:
Dal menu dell'IDE Progetto > Proprietà > Componenti deselezioni gb.gui e selezioni gb.qt4 e gb.qt4-ext e dai l'OK e il gioco è fatto per quanto riguarda il codice.
Invece per quanto concerne il supporto da dare ai sistemi che usano GTK+ basta indicare ai tuoi utenti di scaricare da Softavare Center il programma "Impostazioni QT4" devi un po vedere cosa ti piace di più.
Questo serve perché altrimenti la grafica bisticcia e non fa tutte le cose a modino.
Ora vado a nanna  :sleepy:
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #12 il: 09 Aprile 2015, 23:42:10 »
Ok..grazie mille! super risolto il quesito iniziale! (e anche il resto :)
Sub <homofaberfortunaesuae> End

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #13 il: 10 Aprile 2015, 01:11:06 »
Ma scusa non ottieni lo stesso risultato usando il mio suggerimento inserendolo fra SetFocus e Pos, senza dover scomodare il mouse?  :-\
Il mio codice era solo aggiuntivo e sperimentale.

Riguardo al tuo suggerimento, usando GTK, tu dici così ?
Codice: gambas [Seleziona]
Public Sub Form_Open()
  with TextBox1
    .Text = "abcd"
    .SetFocus
    .Select(2, Len(TextBox1.Text))
    TextBox1.Pos = 2
  End With
End

La selezione non scompare !    :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] TextBox: posizionare il cursore da codice
« Risposta #14 il: 10 Aprile 2015, 11:11:17 »
Guarda vuott sto andando in tilt.  :rolleyes:
Ora (?) su Ubuntu funziona anche con solo questo sul click:

Codice: gambas [Seleziona]
TextBox1.SetFocus     
TextBox1.Pos = 2 

L'unica anomalia la ottengo con attivo Impostazioni QT e Plastique, se ho spuntato anche Qt4-ext non funziona il click su invio da tastiera (tab e invio). Ma io  Plastique lo uso proprio per quello!!! Per far funzionare i focus da tab ecc.!!!
A meno che non sia io che sbaglio non inserendo qualcosa.

Per tornare a te io ho fatto prove con tutte le librerie con e senza Impostazioni QT e funziona sempre con solo quanto detto (senza Mouse).
Certo che far funzionare Gambas3 con tutti i Linux la vedo davvero dura.
:(
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro