Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TImage zeigt keine PNG Bilder an (https://www.delphipraxis.net/177135-timage-zeigt-keine-png-bilder.html)

PhilmacFLy 18. Okt 2013 11:36

Delphi-Version: XE2

TImage zeigt keine PNG Bilder an
 
Mein XE3 verhält sich mal wieder sehr komisch, und zwar passiert folgendes:
Wenn ich ein TImage auf meine Form lege und ein jpg Bild rein lade funktioniert alles wunderbar,
wenn ich aber nun ein PNG Bild lade wird mir dieses zwar zur Designzeit angezeigt aber beim ausführen nicht mehr.
Woran kann das liegen?

Uwe Raabe 18. Okt 2013 11:54

AW: TImage zeigt keine PNG Bilder an
 
Du brauchst Vcl.Imaging.pngimage irgendwo in der Uses-Anweisung, dann wird PNG-Support mit eingebunden. Die IDE hat das über das Designtime-Package schon drin.

PhilmacFLy 18. Okt 2013 11:59

AW: TImage zeigt keine PNG Bilder an
 
Ist bereit eingebunden halt nur als pngimage zeigt aber auf das selbe.

Bernhard Geyer 18. Okt 2013 12:24

AW: TImage zeigt keine PNG Bilder an
 
Hast du evtl. weitere Komponentensammlungen installiert die PNG-Support mitbringen.
Im gespeicherten Stream der DFM steht am Anfang der Komponentenname der für die PNG-Anzeige zuständig ist.
Wenn nun in der IDE ein anderer PNG-Imageviewer zusätzlich installiert ist schreibt dieser dann seine "Signatur" rein. Damit kann dan die eompilierte Exe dann nichts mehr anfangen weil dort nur der Standard-Viewer sich registriert.

PhilmacFLy 18. Okt 2013 15:55

AW: TImage zeigt keine PNG Bilder an
 
Ich denke daran wirds liegen, weil ich noch eine Komponente für PNGButtons benutze, und außerdem das Projekt mal ein Delphi 2005 Projekt war, wie fix ich das am besten?

Edit: Was mir noch aufgefallen ist: Bilder zur Laufzeit laden geht!

himitsu 18. Okt 2013 16:37

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von PhilmacFLy (Beitrag 1232454)
Edit: Was mir noch aufgefallen ist: Bilder zur Laufzeit laden geht!

Ja, da nimmt er dann die Komponente, welche aktuell (in der EXE) registriert ist.

Zur DFM wird aber explizit der Klassenname gespeichert, wovon aber der Typ scheinbar nicht einkompiliert wurde.
In der IDE sind aber dennoch alle Klassen registiert, welcher grade als Package dort geladen sind.

Hier mußt du entweder dafür sorgen, daß diese "böse" PNG-Klasse aus den Packages des Projekts ausgeschlossen werden.
(z.B. Package deinstallieren oder Delphi-Referenz durchsuchenUnregisterClass in einem registrierten Package aufrufen, nachdem die "böse" PNG-Klasse registriert wurde)

Oder du definierst dir ein Alias für deine "neue" PNG-Klasse, registierst sie vor dem Laden der DFM und leitest so den Namen der "anderen" Klasse auf die "neue" Klasse um.
Delphi-Referenz durchsuchenRegisterClassAlias (geht nur, wenn die Klassen in den betreffenden Punkten kompatibel sind, ansonsten braucht man z.B. noch einen Wrapper als Zwischenschicht)

Uwe Raabe 18. Okt 2013 16:40

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von PhilmacFLy (Beitrag 1232454)
weil ich noch eine Komponente für PNGButtons benutze

Welche denn?

PhilmacFLy 19. Okt 2013 12:15

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1232464)
Zitat:

Zitat von PhilmacFLy (Beitrag 1232454)
weil ich noch eine Komponente für PNGButtons benutze

Welche denn?

TPNGButton:
http://sourceforge.net/projects/pngdelphi2/

himitsu 19. Okt 2013 12:31

AW: TImage zeigt keine PNG Bilder an
 
Ein bissl übertrieben diese Komponente?

Die bringt ihr eigenes PNG und ZLIB mit.


[edit]
Nimm diese Komponente, schmeiß die Units pngimage und zlib weg, und fertig.
Wer will, kann pngimage in Vcl.Imaging.pngimage umbenennen und das TPNGObject in TPngImage ersetzen.
Ob dann alles Funktiont, kann ich nicht sagen, aber es kompiliert schonmal problemlos und ohne Warnungen oder Hinweise.

Bernhard Geyer 19. Okt 2013 12:37

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von himitsu (Beitrag 1232508)
Ein bissl übertrieben diese Komponente?

Die bringt ihr eigenes PNG und ZLIB mit.

Wieso übertriben? PNG und ZLIB ist nicht bei allen Delphi-Versionen dabei die von der Komponente unterstützt werden.
Wer Lust und Zeit hat kann diese Komponente ja soweit anpassen das sie bei neueren Delphi-Versionen die mitgelieften PNG und ZLIB-Units verwendet oder einfach selbst im Code eine weiche der Art

Delphi-Quellcode:
type
{$IFDEF DELPH_10_UP}
  TMyPNG = <TPNG_von_Delphi>;
{$ELSE }
  TMyPNG = <TPNG_von_PNGDelphi>;
{$ENDIF}
verwenden

himitsu 19. Okt 2013 12:46

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1232510)
Wieso übertriben?

Nja, ZLib ist schon mindestens seit D7 dabei?
Es scheinen auch die selben Implementierungen zu sein.
Ein IFDEF wird da leider nicht viel bringen, denn da die beiden Units pngimage.pas auch noch gleich heißen und die Komponenten auch, kompiliert Delphi immer die zweite Implementation ein.

Ach ja, in Delphi scheint der alte Name TPNGObject nicht mehr zu registeiren, sondern nur noch den neuen TPngImage, womit diese Klasse am Ende in der IDE unter beiden Namen registriert wurde, aber in der EXE nur noch unter dem neuen Namen.
Delphi-Quellcode:
RegisterClassAlias(TPngImage, 'TPNGObject');
sollte demnach helfen, wenn man die doppelten Units nicht entfernen mag.

Uwe Raabe 19. Okt 2013 12:48

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1232510)
PNG und ZLIB ist nicht bei allen Delphi-Versionen dabei die von der Komponente unterstützt werden.

Das war genau der Grund, warum ich bei den PngComponents die Mindestversion auf Delphi 2009 gesetzt hatte. Der Source-Code ist zwar theoretisch auch bis Delphi 7 abwärtskompatibel, aber das überprüfe ich nicht mehr.

Abgesehen davon ist die Verwendung der Sourcen von Gustavo Huffenbacher Daud lizenzrechtlich eher fraglich.

Bernhard Geyer 19. Okt 2013 12:52

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von himitsu (Beitrag 1232512)
Nja, ZLib ist schon mindestens seit D7 dabei?

Ich hatte diese Komponenten schon bei D6 im Einsatz.

Zitat:

Zitat von himitsu (Beitrag 1232512)
Es scheinen auch die selben Implementierungen zu sein.

Emba hat sie ja vor Jahren gekauft (http://blogs.embarcadero.com/nickhod...08/08/13/39100)

Zitat:

Zitat von himitsu (Beitrag 1232512)
Ein IFDEF wird da leider nicht viel bringen, denn da die beiden Units pngimage.pas auch noch gleich heißen und die Komponenten auch, kompiliert Delphi immer die zweite Implementation ein.

das ist blöd. Dann müsst man in einen Wurf alle PNGs neu in die Formulare aufnehmen.

Bernhard Geyer 19. Okt 2013 12:56

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1232513)
Abgesehen davon ist die Verwendung der Sourcen von Gustavo Huffenbacher Daud lizenzrechtlich eher fraglich.

Eigentlich nicht. Sie gab es mal unter entsprechender Lizenz frei verteilt. Das Embaracadero nun diese aufgekauft hat ändern nichts an der alten Lizenz.
Problematisch wird es wenn man diese Komponenten weiterentwickeln wollte oder sie neu in anderen Sammlungen aufnehmen würde.

Übrigens hat vor dem Emba-Kauf LMD diese Komponente Lizensiert und ist jetzt integraler Bestandteil derer Bibliotheken.

PhilmacFLy 19. Okt 2013 13:02

AW: TImage zeigt keine PNG Bilder an
 
Zitat:

Zitat von himitsu (Beitrag 1232508)
Ein bissl übertrieben diese Komponente?

Die bringt ihr eigenes PNG und ZLIB mit.


[edit]
Nimm diese Komponente, schmeiß die Units pngimage und zlib weg, und fertig.
Wer will, kann pngimage in Vcl.Imaging.pngimage umbenennen und das TPNGObject in TPngImage ersetzen.
Ob dann alles Funktiont, kann ich nicht sagen, aber es kompiliert schonmal problemlos und ohne Warnungen oder Hinweise.

Vielen Dank das hats dann gefixt


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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