11. februar 2002 - 08:40Der er
3 kommentarer og 1 løsning
Indsætnig af billede at runtime
Jeg skal have indsat et billede at runtime. Man kunne selvfølgelig have lavet en imageramme på formen at designtime, og så hente billedet ind i den at runtime, men da jeg har små hundere billeder der i teorien skulle sættes ind på samme tid, vil jeg gerne have lavet en løsning som selv generere en imageramme og indsætter et billede på et bestemt tidspunkt på en bestemt position. Imagerammen skal så kunne unloades når man vil have billedet fjernet. For at opsumere skal man altså at runtime kunne indsætte et billede på en form, og fjerne det igen, uden at der er forudbestemte imagerammer.
Denne kode viser hvordan du kan gøre det med en blanding af IPictureDisp objektet samt Windows GDI. Din form skal have Autoredraw property sat til true for at det virker. I stedet for BitBlt api'et for du nok større success (mere flesibilitet) hvis du bruger StretchBlt:
Option Explicit
Private Declare Function DeleteDC Lib "gdi32" _ (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" _ (ByVal hdc As Long, _ ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" _ (ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" _ (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 CreateCompatibleDC Lib "gdi32" _ (ByVal hdc As Long) As Long
Private Const SRCAND = &H8800C6 ' (DWORD) dest = source AND dest Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source Private Const SRCERASE = &H440328 ' (DWORD) dest = source AND (NOT dest ) Private Const SRCINVERT = &H660046 ' (DWORD) dest = source XOR dest Private Const SRCPAINT = &HEE0086 ' (DWORD) dest = source OR dest
Private Sub Form_Load() Dim lOldBitmap As Long Dim lDC As Long Dim pic As IPictureDisp Dim lReturn As Long
Jeg vil gerne acceptere dit svar hvis du gider at forklare hvad det er der præcis sker i koden. Kan du ikke også komme ind på hvordan man får unloaded billede
Det der sker er, at jeg først loader billedet med linien: Set pic = LoadPicture("E:\Show.jpg")
Nu har jeg så mit billede, men mht. Windows GDI skal man bruge et handle til en DC (Device Context) og ikke et billede. Derfor laver jeg først en DC, der er kompatibel med min form (mht. opløsning farver m.m.) hvorefter jeg 'putter' mit billede (pic) ind i det DC. Dette sker i linierne:
Her kan du alternativt benytte StretchBlt, der udover at kopiere billedet også kan udvide/formindske det (Stretch).
De næste tre linier ryder op efter mig. Jeg kopierer det originale billede tilbage til form'ens DC sletter min nye DC samt releaser mit pic object.
Linien: Set Form1.Picture = Form1.Image bruges til at 'gemme' billedet på formen. GDI funktionerne 'skriver' til den VB property der hedder image. VB gemmer derfor Image i sin picture property.
Når du vil have slettet billederne igen kan du bruge: Set form1.picture = Nothing
mvh/Kenneth
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.