Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117

    [VB6] Immagine di sfondo in un form

    Salve a tutti,
    ho un problema con il Visual Basic 6 per quanto riguarda l'immagine di sfondo di un Form che si puo' attribuire attraverso il comando LoadPicture.
    Il problema si presenta quando l'immagine da caricare è piu' piccola del Form in cui si vuole introdurre l'immagine.

    Vi è una maniera per duplicare l'immagine che si vuole introdurre affinche si possa riempire totalmente l'intero form onde evitare di vedere solo l'immagine in alto a sinistra e tutto il restante form in grigio?

    Grazie anticipatamente per la risposta

  2. #2
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, in rete ho trovato questo esempio:
    codice:
    Private Declare Function BitBlt Lib "Gdi32.dll" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function SelectObject Lib "Gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function CreateCompatibleDC Lib "Gdi32.dll" (ByVal hdc As Long) As Long
    Private Declare Function DeleteObject Lib "Gdi32.dll" (ByVal hObject As Long) As Long
    Private Declare Function DeleteDC Lib "Gdi32.dll" (ByVal hdc As Long) As Long
    Private Sub TileForm(frm As Form, sTilePicture As String)
        Dim hTileDC As Long
        Dim hBitmap As Long, hBitmapOld As Long
        Dim Pic As IPicture
        Dim X As Integer, Y As Integer
        Dim MaxX As Integer, MaxY As Integer
        Dim TileWidth As Single, TileHeight As Single
        
        Set Pic = LoadPicture(sTilePicture)
        
        TileWidth = frm.ScaleX(Pic.Width, vbHimetric, vbPixels)
        TileHeight = frm.ScaleY(Pic.Height, vbHimetric, vbPixels)
        If TileWidth = 0 Or TileHeight = 0 Then Exit Sub
        
        hBitmap = Pic.Handle
        hTileDC = CreateCompatibleDC(frm.hdc)
        hBitmapOld = SelectObject(hTileDC, hBitmap)
        MaxX = frm.ScaleX(frm.Width + Pic.Width, vbTwips, vbPixels)
        MaxY = frm.ScaleX(frm.Height + Pic.Height, vbTwips, vbPixels)
        For Y = 0 To MaxY Step TileHeight
            For X = 0 To MaxX Step TileWidth
                Call BitBlt(frm.hdc, X, Y, TileWidth, TileHeight, hTileDC, 0, 0, vbSrcCopy)
            Next X
        Next Y
        Call SelectObject(hTileDC, hBitmapOld)
        Call DeleteObject(hBitmap)
        Call DeleteDC(hTileDC)
        Set Pic = Nothing
    End Sub
    
    Private Sub Form_Paint()
        'Disegna lo sfondo.
        TileForm Me, App.Path & "\Sfondo.jpg"
        With Me
            If .Picture <> 0 Then .PaintPicture .Picture, 0, 0
        End With
    End Sub
    Jupy

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117
    Per prima cosa Grazie pero' di funzionare funziona ma appena minimizzo la finestra e poi la massimizzo sparisce tutto lo sfondo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117
    ...niente da fare, ho provato anche a modificare il prg che mi hai scritto ma appena sovrappongo una qualsiasi finestra al form in cui ho inserito l'immagine, l'immagine di sfondo sparisce e mi riappare il grigio di default del form.

    Cmq mi sembra strano che sul visual basic non ci sia una semplice routine per impostare un immagine di sfondo a pieno schermo anche se l'immagine è piu' piccola del form o che cmq non is possa con loadpitcure dupplicare l'immagine per riempire tutto il forum.

  5. #5
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Ciao Alexinfa,

    per risolvere, devi impostare la proprietà Autoredraw del Form a True.

    Boolean

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117
    incredibile, mi hai risposto 10 secondi dopo eheheeh

    Cmq grazie infinite, funziona.

    Ho dovuto pero' mettere:

    Form1.WindowState = 1
    Form1.WindowState = 2

    cioe' minimizzare la finestra e poi riingrandirla perche' lo sfondo me la carica solo dopo che la massimizzo ma questo non e' assolutamente un problema.

    Grazie ancora!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.