Newsgroup: it.comp.lang.visual-basic
Titolo: Giovanna e una grave difficoltà con l'oggetto Clipboard

Cari amici
Mi trovo in grossa difficoltà e spero possiate darmi qualche suggerimento
su come venirne fuori.
Dunque, si tartta di questo:
(PREMESSA)
1- il linguaggio LaTeX è il linguaggio di composizione tipografica più
diffuso in ambito scientifico. Ad esempio, io scrivo il seguente file di
testo esempio.tex :
\begin{document}
$\alpha =\beta$
\end{document}
poi lo passo al compilatore LaTeX e lui mi produce un magnifico file
esempio.dvi pronto per la stampa in cui compare l'equazione alfa uguale
beta perfettamente formattata.
2- siccome il linguaggio LaTeX è estremamente ricco di comandi ed è molto
difficile ricordare i codici LaTeX di tutti i simboli matematici si
adopera, per scrivere in questo formato, il software Scientific Workplace
che, in pratica, è una interfaccia grafica per il LaTeX; ci si può
scrivere dentro più o meno come si farebbe con Word (ma ci si possono
mettere dentro tutti i simboli matematici molto molto meglio di quanto non
si potrebbe fare con Equation Editor) e lui salva il file in formato LaTeX
(COMINCIANO I GUAI)
3- supponiamo che stia scrivendo in Scientific Workplace ed abbia inserito
nel mio documento la lettera greca alfa (con la pressione dei tasti
'crtl+g' e poi 'a'); ora
- seleziono con il mouse l'immagine della lettera alfa che ho sullo schermo
- premo 'crtl+c'
- e mi ritrovo con dentro la Clipboard 'un qualcosa' che se incollato in
altro punto dello stesso documento riproduce una nuova lettera alfa mentre
se incollato in Blocco Note restituisce la stringa $\alpha $
- però se dopo aver copiato negli appunti la lettera alfa, ne incollo il
contenuto in blocco note e poi lo ricopio e lo reincollo in Scientific
Workplace NON OTTENGO più (nella mia interfaccia grafica) la lettera alfa
ma semplicemente la stringa $\alpha $
Tragedia!
Ne concludo che quando copio negli appunti la lettera alfa dallo
Scientific Workplace in realtà non ne sto copiando il codice LaTeX ma
qualcosa d'altro che Blocco Note riesce ad interpretare come una stringa
(il odice LaTeX della lettera alfa, appunto) ma che Scientific Workplace
gestisce in maniera differente.
(VI STARETE CHIEDENDO: PERCHE' LA COSA TI ANGOSCIA?)
4- La cosa mi angoscia moltissimo perchè ho scritto un bel programma in
Visual Basic 6.0 (versione 8176) che svolge questa funzione:
- apre e legge un file di testo il cui contenuto è di questo tipo
equazione1;$f(z)=\sum_{n=0}^{\infty }a_{n}z^{n}\text{,\ }\left| z\right|
<R(R\neq 0)$
equazione2;$\int_{C}\left( \sum_{n=0}^{\infty }a_{n}z^{n}\right)
dz=\sum_{n=0}^{\infty }a_{n}\int_{C}z^{n}dz$
equazione3;$\lim_{n\rightarrow \infty }\left| \int_{C}\left[
f(z)-\sum_{k=0}^{n}a_{k}z^{k}\right] dz\right| =0$
...
quando in un controllo text digito 'equazione1' lui riconosce che si
tratta della parte della stringa che in una certa riga precede il punto e
virgola e mi mette nella clipboard, mediante Clipboard.SetText, la parte
della stringa e fa seguito al punto e virgola.
L'intento era ovviamento quello di ricopiare il tutto in Scientific
Workplace e di risparmiare un bel pò di fatica.
Ma ho dopo quanto detto si capisce bene che la cosa non funziona perchè
così facendo mi ritrovo ad avere nell'interfaccia grafica non l'equazione
corrispondente al codice LaTeX
$f(z)=\sum_{n=0}^{\infty }a_{n}z^{n}\text{,\ }\left| z\right| <R(R\neq 0)$
ma proprio questa orribile stringa.
(E SE NE PUÒ USCIRE?)
5- Beh, mi sembra che una soluzione potrebbe essere escogitata ma una
principiante del Visual Basic come me ha bisogno del vostro consiglio:
- mettiamo che io scriva in Scientific Workplace la lattera alfa (cioè
'crtl+g' e poi 'a' , non la stringa $\alpha $)
- poi, dopo avrla copiata, in qualche modo salvo il contenuto della
clipboard nel file 001.dat (suppongo in formatro binario)
- modifico il mio programma in maniera tale che quando digito 'equazione1'
lui lo apra e ne copi il contenuto negli appunti
- a questo punto potrei tranquillamente incollarlo in Scientific Workplace
e godermi la mia bella equazione
Pensate sia possibile fare una cosa del genere?
Per favore, tenete presente che sono agli inizi della mia esperienza con
VB e se è necessario il ricorso a cose sofisticate e difficili come OLE o
DDE avrei bisogno anche di un'indicazione su dove studiare (possibilmente
in Internet) questi argomenti.
Vi ringraio moltissimo per avere avuto la pazienza di leggermi e spero di
ricevere qualche risposta.
Grazie!
Ciao ciao
Giovanna Scoglio
giovannasbox...@yahoo.it
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Tragedia!
Suppongo che l' applicazione che usi distingua se la clipboard sia stata
scritta da se stessa o da un applicazione esterna e si regoli di
conseguenza, interpretando o meno i simboli.
Se cosi' fosse in qualunque modo il tuo programma scriva la clipboard, non
verrebbe poi interpretato da Scientific Workplace.
Prova ad usare il visualizzatore di appunti
(C:\Windows\System32\clipbrd.exe) e verifica cosa viene effettivamente
scritto nella clipboard.
Ciao
Michele
*** MoxCdBurn ***
Add the cd writing power to your programs!
Open source C++ class and ActiveX control
www.moxcdburn.net

Giovanna Scoglio wrote:
il titolo ha un pathos intrigante, nulla da eccepire
Cmq, la clipboard è un multicontenitore. Può contentere uno ed 
un solo dato PER ciascun formato che supporta (ve ne sono alcuni 
standard, ma con le API un'applicazione può anche registrare 
propri formati personalizzati). Quindi in pratica la clipboard 
può contenere molta roba fintantoché non esistano oggetti con lo 
stesso "formato" (che non è l'aspetto dell'oggetto, ma una sorta 
di etichetta di classe che l'applicativo che ce l'ha messo ci ha 
appiccicato, come il francobollo).
Ora molti applicativi, quando fai control+C (copia), sono 
volenterose e inseriscono i dati nel proprio formato nativo e in 
molti altri differenti (in genere sottodimensionati, che 
contengono solo un sottoinsieme delle info totali). E' ad es. il 
caso quando copi una pagina html (non il sorgente, ma la 
selezione mouse) ed incolli in blocco note, che NON sa 
decodificare tutti i comandi del browser. ma il browser mette in 
clipboard molti formati, tra cui CF_Text.
Ora quando blocco note accede alla clipboard (tu fai control+v, 
incolla) cerca se trova qualche formato che sappia leggere, 
prima di tentare il prelievo BINARIO (se ci sono dati binari, e 
chq cmq tratta come testo puro tranne i carriage return, i 
newline, i tab e i null mi pare, e poco altro)
Allora il tuo problema è capire il nome stringa del formato con 
cui la tua applicazione (latex) registra dati nella clipboard.
Quando tu vai a leggere la clipdoard devi prelevare dati binari, 
specificando di prendere dallo scomparto riservato a Latex.
E quando vuoi reincollare il testo back to latex, non devi 
passare tramite il blocco note, il cui formato nativo è il puro 
testo, perché se usato come "server" (copio in blocco note e 
incollo in latex) gli passerà sempre e soltanto i dati CF_text.
Il tuo programma dovrebbe passare direttamente i dati (magari 
usa il drag&drop automatico o OLE) dalla clipboard al word 
processor, e parlare la sua stessa lingua.
Se in un qualsiasi punto del processo di scambio di questi 
pacchetti di dati, si mette in mezzo un programma che non 
conosce quel formato (e magari non si fa manco i cazzi suoi nel 
senso che oltre a usare soltanto il proprio formato nativo, 
pulisce la clipboard dagli altri formati) si avrà un 
arrotondamento al ribasso, con perdita dell'informazione relativa.
ciao
CCCP++Mario

[CUT]
Posso proporti due soluzioni
a) Sono sicurissimo che Scientific Workplace ha la possibiltà
    di inserire tramite scorciatoie da tastiera e/o macro o pulsanti
    predefiniti del testo precedentemente inserito.
b) Scusa, ma perché hai bisogno di inserirli con un copia incolla?
    Non puoi farlo fare a Latex?
Suppongo che il tuo problema sia risparmiare tempo ed evitare di dover
riscrivere 100 volte la stessa equazione.
Perché non ti fai un bel file con le tue formule
e ne fai un bell'include, utilizzando
poi il newcommand?
                    danilo