Newsgroup: it.comp.lang.visual-basic
Titolo: salvare la schermata e poi poterla visualizzare

Windows xp-sp3
visual basic vb6-sp6
AIUTO ! non sono bravo in materia.
Se e com'� possibile salvare l'intera schermata presente in un determinato 
momento sul monitor, e come poterla visualizzare poi in tempi successivi.
Qualche riga di codice da inserire poi in un commandbutton.
Salvare tutti i dati presenti nelle text box (sono oltre 100) sarebbe troppo 
complicato e lungo.
Grazie per l'aiuto
giap

ag ha scritto...

Cosa vuoi fare esattamente?
Salvare tutti i dati visualizzati dalle 100 textbox?
Se le indicizzi e non sono multilinea, � un attimo:
Salvataggio informazioni:
ff=freefile
open app.path & "\DatiBackUp.txt" for output as #ff
    for i=0 to 99
        print #ff,textbox(i)
    next i
close #ff
-----------------------------------------------------------
Visualizzazione successiva:
ff=freefile
open app.path & "\DatiBackUp.txt" for binary as #ff
    s=split(input(lof(ff),#ff),vbcrlf)
close #ff
if isarray(s) then
    if ubound(s)=99 then
        for i=0 to 99
            textbox(i)=s(i)
        next i
    end if
end if
-- 
Ciao Fede
By Chicco Production
http://bcp.freetools.it

 close #ff
Anche non sono indicizzate non � che sia tanto pi� complicato,
basta ciclare la collection Controls.
   For Each Ctl In Me.Controls
      If TypeOf Ctl Is TextBox Then
Se sono presenti sia elementi indicizzati che non, si pu� fare
un controllo in pi�:
   Dim N As Long
   Dim Ctl As Control
   For Each Ctl In Me.Controls
      If TypeOf Ctl Is TextBox Then
         Debug.Print Ctl.Name
         If TypeName(Me.Controls(Ctl.Name)) = "Object" Then
            ' "SporcoTrucco�" per vedere se fa parte di un array,
            ' in questo caso vediamo anche l'indice
            Debug.Print Ctl.Index
         End If
         Debug.Print Ctl.Text
         Debug.Print
      End If
   Next Ctl
Poco pi� complesso in questo caso � salvare e rivisualizzare i dati.
Io salverei tutto in un INI, usando come chiave il nome ed eventualmente
l'indice del controllo.
Bye, G. 

Grazie Fede, ti ringrazio, � una metologia che sicuramente pu� tornarmi
utile, non so se anche in questa circostanza.  Ho 93 textbox indicizzate da
text1(0) a text1(92), pi� oltre 20/25 textbox numerate progressivamente,
immagino, dalla 2 in poi.
Non mi sar� facile utilizzare il tuo codice perch� non sono bravo e devo
provare prima a capirne qualcosa.
Per� in effetti io vorrei proprio che ci� che mi fornisce il comando
"Form1.printform"   su carta, averlo memorizzato (probabilmente in formato
immagine) su un file da archiviare, insomma una istantanea del monitor, cos�
da poterlo utilizzare, visionare e/o stampare nuovamente, come dato di
archivio, quando necessita. Peraltro non vorrei utilizzare software esterno
per la cattura della schermata.
Io ho trovato qualcosa del genere in Internet, ma guardacaso, nessuno
funziona perfettamente per la presenza di errori nel codice che per la mia
scarsa preparazione non sono in condizioni di correggere.
Grazie ancora
giap

 scarsa preparazione non sono in condizioni di correggere.
Fai un programma nuovo con un Form, un Command e una PictureBox.
Metti questa dichiarazione nel form:
'**************
Private Declare Sub keybd_event Lib "user32" _
   (ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
'**************
Nel command1_click metti 'sta roba:
'**************
keybd_event vbKeySnapshot, 0&, 0&, 0&
DoEvents
Picture1.AutoRedraw = True
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
SavePicture Picture1.Picture, "c:\schermata.bmp"
'**************
Prova e fai sapere.
Ci sono altre soluzioni, tecnicamente migliori, ma *molto* pi� complesse.
Bye, G. 

 l'indice del controllo.
Per questo ho evitato...
Sapevo che sarebbe scappato...
...� scappato comunque!


Caro Fred,
Ti ringrazio della tua premura, cos� come ringrazio l'altro interlocutore.
Non sono scappato ed infatti sono qui nella speranza di trovare una 
soluzione semplice al mio piccolo problema..
La ovvia soluzione sarebbe utilizzare uno dei tanti piccoli software di 
cattura schermata, insomma esterni alla mia realizzazione. Ma io preferirei 
che si potesse fare direttamente in VB6 per semplicit� verso chi utilizza il 
programma.
Comunque grazie infinite a tutti.
Ho realizzato la prova come suggeritomi
Apparentemente tutto funziona bene, per� c'� un piccolo problema immagino.
Premetto che ho controllato rigorosamente che le righe di codice fossero 
state copiate per intero e perfettamente.
Il file schermata che mi ritrovo sull'HD, � di appena 1,36 Kb e si presenta 
come una piccola icona.
Probabilmente bisogna modificare qualche propriet� della Picturebox o non so 
cosa di altro.
Ti ringrazio comunque.
Cordialissimi saluti
giap

 so cosa di altro.
Non c'� da modificare niente!!!
E' perfetto e banale cos� com'�.
Fai un programma nuovo con un Form, un CommandButton e una PictureBox.
Copia e incolla nel codice del form:
Private Declare Sub keybd_event Lib "user32" _
   (ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
Private Sub Command1_Click()
    keybd_event vbKeySnapshot, 0&, 0&, 0&
    DoEvents
    Picture1.AutoRedraw = True
    Picture1.Picture = Clipboard.GetData(vbCFBitmap)
    SavePicture Picture1.Picture, "c:\schermata.bmp"
End Sub
Adesso avvia l'applicazione e premi il pulsante...
E' impossibile sbagliare e che non ti funzioni!!!


Ciao Fred,
Tutto OK.  Grazie infinite sopratutto per la semplicit� della soluzione 
facilmente applicabile ad altre situazioni analoghe.
Grazie veramente di cuore.
Non chiedermi come o cosa sia cambiato.
Non so. io assolutamente nulla. boh
Ho rilanciato il programmino come da te suggerito ed adesso rilascia un file 
di ben 3,51 MB che una volta aperto mostra inequivocabilmente la schermata 
presente a video.  Solo per mia sicurezza ho aggiunto altri commandbutton, 
cosi' da non fare confusione con il file precedente.
Adesso mi adoprer� per fare in modo che il nome del file sia quello che io 
desidero sia, per evitare che un salvataggio poi copra un altro precedente.
Grazie ancora e scusami, io poi non sono bravo quanto te, ma ti assicuro che 
il primo file era di appena 1,36 KB, una icona forse, boh.
Cordialissimi saluti
giap