![]() |
PNG-Graphik über "System" laden ... ?
XP kann es, Vista kann es... nur ich kann es nicht.
Windows XP und (ins besondere) Vista können von Haus aus PNG - Graphiken laden und anzeigen. Das müsste man doch dann auch für Delphi nutzen. Wie stellt man das denn an ? |
Re: PNG-Graphik über "System" laden ... ?
Du könntest
![]() |
Re: PNG-Graphik über "System" laden ... ?
Zitat:
Zitat:
|
Re: PNG-Graphik über "System" laden ... ?
Die GDI kann es meines Wissens nach nicht aber GDI+ kann es.
![]() Ist zwar C++ aber sollte grundsätzlich ja gleich sein. Bzw sind in den Beispielen bei der GDI+ Übersetzung auch PNGs enthalten. |
Re: PNG-Graphik über "System" laden ... ?
Danke, das hilft schon mal was weiter.
|
Re: PNG-Graphik über "System" laden ... ?
oder nutze :
![]() müsste auch unter Delphi Laufen. Aber es gibt viele Möglichkeiten unter Delphi: z.b. eine davon währe einfach TGrafik32 zu nutzen, wobei Grafik englisch sein muss(das kann ich leider nicht schreiben) |
Re: PNG-Graphik über "System" laden ... ?
Ich will ja keine Komponenten in dem Sinne. Windows, bzw. die GDI+ von Windows kann
PNG's laden und Anzeigen. Warum soll ich dann ein oder mehrere "fette" Unit(s) einbauen. ;) |
Re: PNG-Graphik über "System" laden ... ?
opBitmap sind keine Komponenten, es sind einfache units und müssen noch nicht mal Installiert sein.
die Können neben png, auch noch andere Formate anzeigen. oder z.b. halbtranparente Flächen zeichnen..... Allerdings verwendet opBitmap zwischen Format d.h. du musst es von bitmap nach disem Format umwandeln. Ich habe einige Vereinfachungen geschrieben. Das Projekt wurde aber nicht von mir entwickelt sondern von theo ein Mitglied vom Lazarus-Forum...... |
Re: PNG-Graphik über "System" laden ... ?
Hallo,
auf ![]() Gruß xaromz |
Re: PNG-Graphik über "System" laden ... ?
Zitat:
- Wenn du die mitlieferst mußt du darauf hoffen das nicht wieder mal ein Bug in irgendeiner GDI+Implementierung von Zeichenroutinen vorhanden ist welche dein Programm anfällig für Angriffe macht - Kann die GDI+-Implementierung wirklich komplett PNG oder nur die MS-Interpretations von PNG (siehe fehlende Transparent bei PNG's bis IE7) |
Re: PNG-Graphik über "System" laden ... ?
Wie gesagt ich kann dir nur opBitmap empfehlen.
Ob du das auch für Komizelle Projekte(also Projekte wo für du Geld bekommst) verwenden darf, weiß ich nicht. Aber wenn ja, dann währe es die "beste" Möglichkeit.... (schleichwerbung *G*) |
Re: PNG-Graphik über "System" laden ... ?
Hallo,
Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: PNG-Graphik über "System" laden ... ?
Zitat:
Zitat:
Zitat:
|
Re: PNG-Graphik über "System" laden ... ?
Hallo,
Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: PNG-Graphik über "System" laden ... ?
es gibt halt noch sehr viele firmen, welche WIN2000 oder sogar NT noch einsetzen. da ist von XP noch keine spur.
firmen sind halt meist nicht so technikgeil, wie manche (private) anwender. bei dennen muss es halt einfach funktionieren und darf nix (nicht viel) kosten. also, auch das die welt vor dem jahr 2000 nicht ganz vergessen (der normale updatezyklus liegt so bei 10 jahren)... grüsse gg |
Re: PNG-Graphik über "System" laden ... ?
Zitat:
Ich meine eher mit der Bindung an GDI+ verliert man einen Nachteil von Delphi. Und zwar das man ohne was mitzuliefern was man installieren sollte bzw. je nach Windows Version schon Bestandteil dieser Windows-Version ist die Windows-Plattformunabhängigkeit verliert. Setzt man eh nur XP und neuer vorraus so ist der Nachteil geringer da man hier nix mitliefert und gut ist (haben wir z.B. mit mindestens IE4 als Vorraussetzung). |
Re: PNG-Graphik über "System" laden ... ?
Also, die bzw. das Programm ist eh ab Windows XP. windows Vista arbeitet bei seinen Styles
nur noch mit PNG's was mich ein wenig erstaunt hat. Komerzielle Programme schreib ich zur Zeit nicht, ist also nicht das Problem. Irgend wer hatte mal in der DP für nonVCL einen JPG-Button gezeigt der die Graphic ohne die VCL sondern über die Betriebssystem vorhandenen Funktionen läd (GDI+ denk ich mal). Ich finde es nur nicht. Ich glaube x000x war's. |
Re: PNG-Graphik über "System" laden ... ?
Moin moin,
Habe grad mal alte Beiträge durchgestöbert und bin bei diesem hängengeblieben... Der gesuchte Thread befindet sich hier: ![]() |
Re: PNG-Graphik über "System" laden ... ?
Seid Ihr hier jetzt noch weiter gekommen?? Hat vllt einer nen Bsp., wie ich PNGs laden kann??!! Aber ohne VCL..
Danke.. |
Re: PNG-Graphik über "System" laden ... ?
|
Re: PNG-Graphik über "System" laden ... ?
Liste der Anhänge anzeigen (Anzahl: 1)
Oder hier das
gruss Emil |
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.. |
Re: PNG-Graphik über "System" laden ... ?
VCL oder nonVCL ?
|
Re: PNG-Graphik über "System" laden ... ?
nonvcl, ist das ganze, vcl währe ja easy oO
|
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: |
Re: PNG-Graphik über "System" laden ... ?
Hier ein Sample
mußt selbst übersetzen dürfte aber kein problem sein.
Delphi-Quellcode:
Alle Call's entfernen ..
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 gruss Emil |
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?? |
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. |
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: |
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: |
Re: PNG-Graphik über "System" laden ... ?
In der Tat, der Ordner "_unit" ist leer, :gruebel:
Naja, ab einem gewissen Alter ... Ich habe es mir gerade auf meiner Festplatte noch mal angesehen und festgestellt das dieses Ding nicht zu gebrauchen ist. Der Grund, es werden keine Controls, also Buttons, Edits etc. dargestellt. Das wollte ich mal Ändern, habe es aber nie weiter fortgesetzt. war mir zu aufwendig Möchtest du das Demo für die VCL oder nonVCL ? |
Re: PNG-Graphik über "System" laden ... ?
Moin Matti,
nonVCL wäre super. Meine Vorhaben ist eigentlich simpel: Gebe ich einem Static-Control die Eigenschaft SS_BITMAP oder SS_ICON, dann kann ich darauf das jeweilige Format abbilden. Nun bilde ich mir ein, dass, wenn ich SS_OWNERDRAW nutze, ich dank GDI+ auch ein PNG-Image aus einer Resource laden kann. Ich hab dein altes Projekt über Umwege schon heute morgen erhalten, konnte es mir aber nicht ansehen. Kann man das als Grundlage nutzen, um selber auf die weitere Vorgehensweise zu kommen? //Nachtrag: Ich scheitere schon am Laden der Resource. :wall:
Delphi-Quellcode:
gpImage hat immer den Wert "nil". :wall: Die Funktion, die Funktion aufruft liefert auch keinen Fehler. :gruebel:
GdipLoadImageFromResource(hInstance, 'ALBUM', gpImage)
|
Re: PNG-Graphik über "System" laden ... ?
Sick's mal bitte.
|
Re: PNG-Graphik über "System" laden ... ?
Sie haben Post. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr. |
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