Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.
Seite 1 von 2  1 2      

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