Focus in un campo di testo

Discussioni sull'applicazione di videoscrittura
Rispondi
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Focus in un campo di testo

Messaggio da Zumpala »

Una volta fatto un doppio click sul file allegato il focus (il cursore) si posiziona a lato della D di "Data nascita".
Io viceversa vorrei che il cursore si ponesse immediatamente ed automaticamente nel "controllo per formulario" di tipo "campo di testo" avente nome "Nome".
E' possibile fare questo oppure le macro, come ho capito da principiante, registrano solo le operazioni della tastiera e non del mouse ?
Grazie per l'attenzione
Allegati
ModelloODT.ODT
(10.03 KiB) Scaricato 354 volte
OpenOffice 4.1 su Windows XP
vladboscaneanu
Volontario
Volontario
Messaggi: 380
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Focus in un campo di testo

Messaggio da vladboscaneanu »

Vedi se ho capito bene.
Allegati
ModelloODT.ODT
Auto-Focus on Nome
(11.49 KiB) Scaricato 280 volte
LibreOffice ultima versione su Windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

@vladboscaneanu
La macro che hai scritto funziona perfettamente e svolge quanto da me desiderato. Molte grazie.
Però, sicuramente per una mia errata scelta progettuale, non serve al mio scopo finale.
Mi spiego meglio. Come ho scritto in un mio precedente intervento
viewtopic.php?f=26&t=5733&p=28719#p28719
vorrei compilare automaticamente dei campi di testo in un documento ODT. Poichè non sono abile a "comandare" adeguatamente OpenOffice ho pensato di farlo fare al Visual Basic Pro 6, linguaggio di cui sono assai esperto. C'è un'istruzione (SendKeys) che, cito testualmente, "invia alla finestra attiva una o più sequenze di tasti, come se queste fossero state immesse tramite la tastiera".
Con questo sistema ho "comandato" dall'esterno e con successo più di un programma, ma Writer sembra comportarsi in modo differente.
Le seguenti istruzioni VB6 non agiscono come prevedevo :

Codice: Seleziona tutto

SendKeys "Mario", KW
SendKeys "{TAB}", KW
SendKeys "Rossi", KW
SendKeys "{TAB}", KW
SendKeys "14/7/2000", KW
le quali dovrebbero inserire "Mario" nel campo "Nome", "Rossi" nel campo "Cognome" e "14/7/2000" nel campo "DataNascita"
Ho chiesto aiuto anche al forum inglese (https://forum.openoffice.org/en/forum/v ... 41#p316441) e al newsgroup di Google (https://groups.google.com/forum/?hl=IT# ... fVqmSbHLjs) senza però nessun risultato per cui ogni aiuto sarà bene accetto.
Grazie ancora a vladboscaneanu.
OpenOffice 4.1 su Windows XP
vladboscaneanu
Volontario
Volontario
Messaggi: 380
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Focus in un campo di testo

Messaggio da vladboscaneanu »

A ...sei tu...
Dovevi dare una risposta è sei sparito...
Comunque ....
Io sono disposto ad aiutarti,pero lo devi sapere che ho bisogno prima
di intero algoritmo di quello che vuoi fare(INTERO ,non un pezzo).
Quindi apre una nuova tema,è vai con la progettazione,ci serve
qualcosa tipo:
Titolo Applicazione(Database) Gestionale
1. Cos'è,a cosa serve
2.I moduli principali richiesti:
a.Esportare in PDF tramite macro
b.Spedire le lettere ai clienti in base a un criterio
c.Tirare su un report il totale di ...
e cosi via
Poi con calma si aggiungerà il codice.
LibreOffice ultima versione su Windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

@ vladboscaneanu
Sono sparito dalla discussione di cui al post viewtopic.php?f=26&t=5733&p=28719#p28719 poichè mi pareva di aver descritto adeguatamente il mio problema e di non aver avuto una risposta.
Successivamente mi è venuta in mente la soluzione "SendKeys" (che - ripeto - ha sempre funzionato ottimamente con altri programmi) e pensavo che con questa avrei risolto tutto ma proprio tutto. Ora mi accorgo che purtroppo non è così.
Il mio problema è descritto sommariamente nel post sopra citato. Comunque lo ridescrivo, con qualche altra considerazione, qui sotto.
La mia richiesta nasce dal desiderio di aggiungere una funzione ad un applicativo, da me sviluppato utilizzando il linguaggio VB6 (con SQLServer come database), assai complesso. La tematica affrontata da questo applicativo è la Medicina del Lavoro.
Vorrei semplicemente eliminare un documento cartaceo di diverse pagine, che viene stampato con questo applicativo in diverse copie, una per ogni paziente ed ogni anno. Intravedo un paio almeno di possibili soluzioni (una sarebbe un sito web in cui i vari utenti - i medici - inseriscono i dati). L'altra che trovo persino migliore è quella di creare un documento con Writer; tale documento che funge da "modello"). E' questa la soluzione che vorrei sviluppare.
In pratica funziona così: la segretaria fa (automaticamente, con il mio applicativo) una copia del documento ODT modello e tale copia viene popolata (sempre con il mio applicativo) con il contenuto di certi campi del database; successivamente tale copia viene trasformata (sempre dal mio applicativo) in un file PDF editabile, uno per ciascun paziente. Ovviamente ciascuna copia ha un nome diverso (ad esempio ID-Data-Nome). Ribadisco che l'unica cosa che non so fare, in questo procedimento, è appunto la popolazione dei campi di testo.
Quindi la copia viene inviata per email ai vari medici collegati alla struttura. I medici, avendo di fronte il paziente, compilano il PDF editabile, lo registrano ed alla fine lo reinviano alla segretaria la quale lo inserisce in una cartella (virtuale) del paziente.
Si tratta di un meccanismo che mi pare assai efficace ed efficiente, teso appunto ad eliminare una serie di documenti cartacei e facilitare la compilazione degli stessi (tramite computer) da parte dei medici che notoriamente hanno una calligrafia assai .... personale. Mi stupisce persino che nessuno ci abbia pensato prima (o almeno io non sono a conoscenza di analoghi utilizzi di questi PDF editabili che reputo assai utili, veramente).
Non so però "popolare i campi di testo di un documento ODT con i dati prelevati da una qualsivoglia fonte (database MDB, file di testo, ecc.) ". Questo in estrema sintesi.
Aggiungo che non si tratta assolutamente, a mio parere, di creare delle macro quanto di popolare (con un linguaggio - il VB6 - che ha delle strette somiglianze con il linguaggio utilizzato per le macro) una serie di quelli che in Writer sono chiamati "controlli per formulario" di tipo "campo di testo".
Tutto questo si potrebbe ridurre alla seguente domanda a cui non ho ancora trovato risposta: qual'è la corrispondente istruzione, comprensibile a Writer, di
Text1.text = "Mario Rossi"
in cui il campo di testo Text1 (che è un controllo di VB6) viene popolato con il valore "Mario Rossi")
Sono convinto che la semplice risposta alla domanda sopra riportata risolverebbe del tutto il mio problema.
Grazie infinite per l'interessamento.
P.S.: Analoghi programmi li ho già fatti (sempre in VB6) utilizzando il modello ad oggetti di Microsoft Word. in questo sono stato fortemente aiutato dal meccanismo di autocompletamento delle istruzioni (quello secondo cui digitando il punto (.) viene dato un suggerimento circa il possibile completamento dell'istruzione). Utilizzando OpenOffice viceversa questo autocompletamento non c'è, purtroppo.
OpenOffice 4.1 su Windows XP
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus in un campo di testo

Messaggio da Gaetanopr »

Zumpala ha scritto: Tutto questo si potrebbe ridurre alla seguente domanda a cui non ho ancora trovato risposta: qual'è la corrispondente istruzione, comprensibile a Writer, di
Text1.text = "Mario Rossi"
in cui il campo di testo Text1 (che è un controllo di VB6) viene popolato con il valore "Mario Rossi")
Sono convinto che la semplice risposta alla domanda sopra riportata risolverebbe del tutto il mio problema.
è esattamente la stessa, cioè la stessa proprietà Text
alla macro di Vlad aggiungi questa istruzione

Codice: Seleziona tutto

Campo.text = "mario rossi"
dove Campo si riferisce al controllo campo di testo "Nome"
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

La macro è - a quanto ho capito - legata al file ODT (nella fattispecie ModelloODT.ODT). Nel mio caso non credo proprio si possano usare le macro; bisogna agire all'esterno del file ODT (se è tecnicamente possibile ovviamente).
Perchè in un caso sarà

Codice: Seleziona tutto

Nome.text ="Mario"
Cognome.text="Rossi"
ma in un altro

Codice: Seleziona tutto

Nome.text ="Luigi"
Cognome.text="Pautasso"
Il "Mario", il "Rossi", il "Luigi" sono prelevati, per esempio, da un database o da un file di testo, con del codice VB6 assai facile da scrivere.
Il difficile, per me, è inserire questi dati variabili nella copia particolare (personale) di ModelloODT.ODT.
Spero di essere stato chiaro.
Grazie.
OpenOffice 4.1 su Windows XP
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus in un campo di testo

Messaggio da Gaetanopr »

Zumpala ha scritto: Tutto questo si potrebbe ridurre alla seguente domanda a cui non ho ancora trovato risposta: qual'è la corrispondente istruzione, comprensibile a Writer, di
Text1.text = "Mario Rossi"
Ciao io ho risposto a questa specifica domanda, invece su come prelevarli dovresti allegare il db oppure il file di testo contenente i nominativi, io non ho molta dimestichezza con writer, sicuramente qualcuno potrà aiutarti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

@Gaetanopr
Ciao io ho risposto a questa specifica domanda, invece su come prelevarli dovresti allegare il db oppure il file di testo contenente i nominativi, io non ho molta dimestichezza con writer, sicuramente qualcuno potrà aiutarti
Tu suggerisci di inserire l'istruzione

Codice: Seleziona tutto

Campo.text = "mario rossi"
in una macro. Questa macro deve necessariamente essere all'interno del file ModelloODT.ODT
Questo potrebbe andar bene se non dovessi io creare numerose copie del file ModelloODT.ODT, ciascuna con nome diverso, una per ogni paziente.
E ogni copia del file succitato deve avere dati diversi, prelevati da un database o da un file di testo. Sottolineo diversi.
Il prelevamento dei dati non costituisce per me alcun problema; è l'inserzione di questi dati nel file Copia_di_ModelloODT.ODT che continua ad essere misterioso, almeno per me.
Spero di essere stato compreso.
Grazie comunque.
OpenOffice 4.1 su Windows XP
vladboscaneanu
Volontario
Volontario
Messaggi: 380
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Focus in un campo di testo

Messaggio da vladboscaneanu »

Per inserire qualsiasi testo usa lo stesso codice che ti ho dato prima,invece di metodo SetFocus usa SetText(x) ,dove x è la tua stringa.
Tutte le cartelle dei pazienti possono essere create da un template,basta solo cambiare il nome e salvarle.
Se hai bisogno di un partner per la tua app, io ci sono ;)
Allegati
ModelloODT_con_Set.Text.ODT
(12.04 KiB) Scaricato 326 volte
LibreOffice ultima versione su Windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

@ vladboscaneanu
Non mi sembra che la soluzione da te suggerita sia risolutiva.
Vedi quanto ho scritto a Gaetanopr.
Lasciami qualche giorno per digerire quanto mi hai suggerito e ne riparliamo.
Sempre grazie.
P.S.: Se il mio committente è soddisfatto di quanto sarò in grado di realizzare si può approfondire la questione di un utilizzo più massiccio e produttivo dei documenti PDF editabili e qui potresti entrare tu.
OpenOffice 4.1 su Windows XP
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus in un campo di testo

Messaggio da Gaetanopr »

Zumpala ha scritto: Il prelevamento dei dati non costituisce per me alcun problema; è l'inserzione di questi dati nel file Copia_di_ModelloODT.ODT che continua ad essere misterioso, almeno per me.
Spero di essere stato compreso.
Grazie comunque.
Ciao vorrei sapere come avviene il prelevamento dei dati cioè cosa utilizzi, da dove e con quali criteri si possono ricavare questi dati.
Potresti creare un database da una fonte MDB, registrare il database ottenuto e tramite la sorgente dati compilare il tuo modello Odt, io ad esempio utilizzo un database registrato, tramite una macro e delle istruzioni sql mi compilo un modulo CALC prelevando i dati che mi occorrono, quindi utilizzo il database per la raccolta dati e poi compilo un modello tramite un foglio elettronico implementato con vari calcoli.
Se ti va bene potresti usare un foglio elettronico invece di un file ODT, completo di caselle di testo ect ect.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

Il prelevamento dei dati, come già detto, è assai facile da farsi. L'archivio è quello di SQLServer; ci sono numerose tabelle e le query sono assai facili da farsi, visto che il mio applicativo comprende numerosi tipi di interrogazioni e, più o meno, le query necessarie per popolare questi ipotetici file ODT (da cui poi vorrei ricavare vari PDF editabili, uno per ogni paziente) sono in linea di massima pressochè analoghe a quelle già da me create ed utilizzate.
La linea di azione da te suggerita, se ho ben capito, prevede (integro con qualche mia considerazione) :
1) Leggere l'archivio di SQLServer per, poniamo, il paziente N. 1
2) Creare e riempire un archivio MDB con solo questi dati (attenzione: archivio MDB di Microsoft Access)
3) Fare una copia del file ModelloODT.ODT e chiamarla "Paziente001.ODT"; in questo file c'è una macro autoexec che compila automaticamente i campi di testo prelevando i dati dall'MDB; faccio notare che l'MDB ha un unico record
4) Salvare il file come PDF editabile.
5) proseguire con il paziente N. 2
6) ecc. ecc.

Mi sembra che sia analogo a quanto fai tu con il modulo di Calc. Ritieni, con la tua esperienza, che sia una strada praticabile ?
In caso affermativo approfondisco, eventualmente con il tuo aiuto, questa strada.
Come al solito è il punto 3 quello che non so fare.
OpenOffice 4.1 su Windows XP
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus in un campo di testo

Messaggio da Gaetanopr »

Ti spiego la mia idea:
Creare un database registrato in Base che abbia come sorgente il database Ms Access, ogni volta che effettui una modifica in questo si aggiorna il db Base
Da qui in poi hai 2 opzioni:
1^ Opzione ; Il database Base serve come sorgente dati per un modulo creato in calc e non in writer(non lo so usare).
Una volta aperto il modulo Calc, questo verrà compilato automaticamente prelevando l'unico record presente nel database.
2^ Opzione; Il database Base serve come sorgente per compilare dei comandi di campo inseriti nel modello ODT(Nome, Cognome ect ect).
Una volta lanciata la stampa in serie i dati vengono prelevati in maniera automatica e salvare in pdf(stampa pdf).
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus in un campo di testo

Messaggio da Gaetanopr »

Ti allego una possibile soluzione
Il db deve essere registrato andando su strumenti - Opzioni - OpenOffice base - database, nel menu a dx cerca il db e aggiungilo a quelli già registrati.
Posizionati sul campo di testo del modello ODT - Tasto dx:
Formulario - Dati - Sorgente Dati - indichi il percorso del db
Tipo contenuto "Query"
Contenuto "ContattiQuery"
Sempre tasto dx - Campo di controllo - Dati - Campo dati e indichi i vari campi, quindi Cognome per prima casella, Nome per la seconda e così via.
Appena apri il file ODT ti viene richiesto l'inserimento di un ID, nell'esempio esistono due record basta digitare 0 oppure 1
Se invece nel tuo db è sempre presente un solo record e sempre con lo stesso id si potrebbe fare in automatico.
Allegati
DB_WRITER.rar
(11.08 KiB) Scaricato 141 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

Ho visto che hai anche tu trovato una soluzione.
Io pure e la considero assai macchinosa ma funzionante. Sembra che sia adatta al mio scopo.
Legge un archivio MDB che simula uno di SQLServer.
Estrae solo i record desiderati e crea un file MDB con un solo record
Per ognuno di questi record effettua una copia di ModelloODT.ODT
Al lancio del file temporaneo ODT esso si popola automaticamente
Viene salvato il file temporaneo ODT come PDF
La allego e poi più tardi guardo la tua.
Grazie e ciao
Allegati
ProgettoCompleto.zip
(116.77 KiB) Scaricato 191 volte
OpenOffice 4.1 su Windows XP
Zumpala
Messaggi: 24
Iscritto il: mercoledì 4 giugno 2014, 14:50

Re: Focus in un campo di testo

Messaggio da Zumpala »

Confermo che la soluzione che ho allegato al post precedente corrisponde ai miei desiderata.
La tua è, nel nucleo centrale, molto simile.
Grazie del tuo interessamento.
OpenOffice 4.1 su Windows XP
Rispondi