Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB6] - Memorizzare e stampare solo una form oppure solo una PictureBox con linee e p

    Salve ragazzi.
    Ho fatto una ricerca sul forum ma non sono riuscito a trovare nulla che potesse aiutarmi.
    Il mio problema è questo:
    ho una picture dentro la quale disegno tramite i metodi .line e .pset linee e punti. Ho anche alcune label, frame e option. Non ho immagini nella picture in questione.

    Sto cercando un sistema per poter stampare la picture su stampante, senza usare l'oggetto printer (in quanto la procedura per poter realizzare le linee e i punti nella picture è complessa).
    Avevo pensato a questo: memorizzo il contenuto della picturebox (cioe tutto, linee, punti, ecc) nella clipboard. e poi lo mando in stampa. Ma non riesco a trovare nulla per poter memorizzare SOLO la picturebox nella clipboard. Tramite le API, e qualche esempio che si trova in internet, ho trovato che è possibile simulare la pressione di ALT+STAMP per memorizzare la form attiva in clipboard. Ma non ho trovato nulla che permettesse di memorizzare SOLO UNA PARTE della form o addirittura solo la picture.

    Qualcuno può aiutarmi a risolvere questa cosa?
    grazie anticipatamente

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Usa il metodo PaintPicture

    Vedi la guida per i numerosi parametri e loro descrizione!

    Ciao

  3. #3
    ciao gibra.
    ho questo codice che usa proprio quel metodo:

    ---------------------
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
    bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

    Private Const VK_SNAPSHOT = &H2C

    Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long

    Private Type POINTAPI
    x As Long
    y As Long
    End Type



    Private Sub Command1_Click()
    Dim picTmp As PictureBox

    Dim CaptPic As StdPicture
    Dim pt As POINTAPI
    Dim Px As Long
    Dim Py As Long
    Dim pW As Long
    Dim pH As Long


    If frmStampa.Picture3 <> 0 Then


    Clipboard.Clear
    keybd_event VK_SNAPSHOT, 0, 0, 0
    DoEvents

    Set CaptPic = Clipboard.GetData()

    ClientToScreen Picture3.hWnd, pt

    Px = pt.x * Screen.TwipsPerPixelX
    Py = pt.y * Screen.TwipsPerPixelY
    pW = Picture3.ScaleWidth
    pH = Picture3.ScaleHeight

    Set picTmp = Me.Controls.Add("VB.PictureBox", "tmp")

    picTmp.Width = Picture3.Width
    picTmp.Height = Picture3.Height
    picTmp.AutoRedraw = True
    picTmp.PaintPicture CaptPic, 0, 0, pW, pH, Px, Py, pW, pH

    'SavePicture picTmp.Image, "C:\ImmagineSalvata.bmp"
    '...stampa


    Me.Controls.Remove ("tmp")
    Set picTmp = Nothing

    End If

    End Sub
    ---------------------


    ma non dà l'esito previsto. Ossia se lo lancio e poi provo a incollare l'immagine che ho catturato, con il codice riportato, in un programma di grafica (paint di windows) mi si ripropone tutto lo schermo catturato e non solo la picture che mi serve. Cioè, credo che non effettui il crop in memoria insomma.

  4. #4
    a complicare la cosa c'è anche il fatto che la picture che vorrei stampare è nascosta sotto i bordi della form (ossia non voglio che si veda, la riempio con i dati e poi la stampo).

  5. #5
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Originariamente inviato da Paco.Baldacci
    ciao gibra.
    ho questo codice che usa proprio quel metodo:

    ---------------------
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
    bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

    Private Const VK_SNAPSHOT = &H2C

    Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long

    Private Type POINTAPI
    x As Long
    y As Long
    End Type



    Private Sub Command1_Click()
    Dim picTmp As PictureBox

    Dim CaptPic As StdPicture
    Dim pt As POINTAPI
    Dim Px As Long
    Dim Py As Long
    Dim pW As Long
    Dim pH As Long


    If frmStampa.Picture3 <> 0 Then


    Clipboard.Clear
    keybd_event VK_SNAPSHOT, 0, 0, 0
    DoEvents

    Set CaptPic = Clipboard.GetData()

    ClientToScreen Picture3.hWnd, pt

    Px = pt.x * Screen.TwipsPerPixelX
    Py = pt.y * Screen.TwipsPerPixelY
    pW = Picture3.ScaleWidth
    pH = Picture3.ScaleHeight

    Set picTmp = Me.Controls.Add("VB.PictureBox", "tmp")

    picTmp.Width = Picture3.Width
    picTmp.Height = Picture3.Height
    picTmp.AutoRedraw = True
    picTmp.PaintPicture CaptPic, 0, 0, pW, pH, Px, Py, pW, pH

    'SavePicture picTmp.Image, "C:\ImmagineSalvata.bmp"
    '...stampa


    Me.Controls.Remove ("tmp")
    Set picTmp = Nothing

    End If

    End Sub
    ---------------------


    ma non dà l'esito previsto. Ossia se lo lancio e poi provo a incollare l'immagine che ho catturato, con il codice riportato, in un programma di grafica (paint di windows) mi si ripropone tutto lo schermo catturato e non solo la picture che mi serve. Cioè, credo che non effettui il crop in memoria insomma.

    Grazie per il codice,era più o meno questo che mi serviva(gibra).Ora me lo studio e poi lo utilizzo nel migliore dei modi
    Ciao

  6. #6

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.