Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PNG-Graphik über "System" laden ... ? (https://www.delphipraxis.net/102058-png-graphik-ueber-system-laden.html)

EWeiss 23. Okt 2008 18:54

Re: PNG-Graphik über "System" laden ... ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oder hier das

gruss Emil

lbccaleb 24. Okt 2008 09:14

Re: PNG-Graphik über "System" laden ... ?
 
ich hab es schon über die gdi hinnbekommen, aber bisher ohne alpha wert...

ich weiß nicht woran es liegt ;-(
wollte eigentlich nur ein png mit transparenz laden und als hintergrund für das fenster verwenden, nur irgendwie will er nicht ;-( das laden und das anzeigen hab ich hinnbekommen..

turboPASCAL 24. Okt 2008 10:52

Re: PNG-Graphik über "System" laden ... ?
 
VCL oder nonVCL ?

lbccaleb 24. Okt 2008 11:04

Re: PNG-Graphik über "System" laden ... ?
 
nonvcl, ist das ganze, vcl währe ja easy oO

turboPASCAL 24. Okt 2008 14:02

Re: PNG-Graphik über "System" laden ... ?
 
- 32 Bit-Bitmap erstellen mit CreateBitmap
- Window mit SetLayeredWindowAttributes und LWA_ALPHA bearbeiten
- png_image laden
- im WM_PAINT das Png aufs Fenster pappen
- fertig

:stupid:

EWeiss 24. Okt 2008 14:55

Re: PNG-Graphik über "System" laden ... ?
 
Hier ein Sample
mußt selbst übersetzen dürfte aber kein problem sein.

Delphi-Quellcode:
Private Function MakeTrans(pngPath As String) As Boolean
Dim tempBI As BITMAPINFO
Dim lngHeight As Long
Dim lngWidth As Long
Dim curWinLong As Long
Dim img As Long
Dim graphics As Long
Dim winSize As Size
Dim srcPoint As POINTAPI
    With tempBI.bmiHeader
        .biSize = Len(tempBI.bmiHeader)
        .biBitCount = 32
        .biHeight = ScaleHeight
        .biWidth = ScaleWidth
        .biPlanes = 1
        .biSizeImage = .biWidth * .biHeight * (.biBitCount / 8)
    End With
        mDC = CreateCompatibleDC(hdc)
        mainBitmap = CreateDIBSection(mDC, tempBI, DIB_RGB_COLORS, ByVal 0, 0, 0)
        oldBitmap = SelectObject(mDC, mainBitmap)
        Call GdipCreateFromHDC(mDC, graphics)
        Call GdipLoadImageFromFile(StrConv(pngPath, vbUnicode), img)
        Call GdipGetImageHeight(img, lngHeight)
        Call GdipGetImageWidth(img, lngWidth)
        Call GdipDrawImageRect(graphics, img, 0, 0, lngWidth, lngHeight)
        curWinLong = GetWindowLong(hwnd, GWL_EXSTYLE)
        SetWindowLong hwnd, GWL_EXSTYLE, curWinLong Or WS_EX_LAYERED
        SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
        srcPoint.x = 0
        srcPoint.y = 0
        winSize.cx = lngWidth
        winSize.cy = lngHeight
    With blendFunc32bpp
        .AlphaFormat = AC_SRC_ALPHA
        .BlendFlags = 0
        .BlendOp = AC_SRC_OVER
        .SourceConstantAlpha = 255
    End With
Call GdipDisposeImage(img)
Call GdipDeleteGraphics(graphics)
Call UpdateLayeredWindow(hwnd, hdc, ByVal 0&, winSize, mDC, srcPoint, 0, blendFunc32bpp, ULW_ALPHA)
End Function
Alle Call's entfernen ..

gruss Emil

lbccaleb 24. Okt 2008 18:02

Re: PNG-Graphik über "System" laden ... ?
 
ok, danke werd ich mal so probieren, eine frage hätt ich aber noch ;-)
wie genau lade ich das png direkt aus der ressource??

turboPASCAL 24. Okt 2008 19:12

Re: PNG-Graphik über "System" laden ... ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Natürlich UpdateLayeredWindow verwenden an stelle von SetLayeredWindowAttributes, ich Schussel. :wall:

Im Anhang ist eine Demo mit der du die Images auch aus der Resource laden kannst.

Mithrandir 11. Okt 2009 20:56

Re: PNG-Graphik über "System" laden ... ?
 
Moin Matti,

wollte mir deinen Code mal zu lernzwecken angucken. Aber irgendwie hast du den Ordner "_unit" vergessen. Also, falls du den noch irgendwie haben solltest.... :stupid:

lbccaleb 11. Okt 2009 21:04

Re: PNG-Graphik über "System" laden ... ?
 
Mhh er hat schon eine neuere Version erstellt, vllt ists Absicht das er den Ordner entfernt hat!

Wenn nicht, ich müsste glaub ich die alte Version noch irgendwo auf meinem alten Notebook haben, muss ich morgen mal durchforsten und suchen :)
Wenn ichs finde kann ichs ja noch mal hier anhängen....
Wenn er damit einverstanden ist :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz