Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ersatz für Buggy/Deprecated pngdelphi? (https://www.delphipraxis.net/113904-ersatz-fuer-buggy-deprecated-pngdelphi.html)

Assertor 16. Mai 2008 14:07


Ersatz für Buggy/Deprecated pngdelphi?
 
Hallo,

ich suche gerade eine PNG-fähige Grafikkomponente, die die pngdelphi ersetzen soll. pngdelphi ist jetzt seit letzter Woche bei Sourceforge offline und es gibt schon lange keine Updates/Bugfixes mehr.

Ich habe gerade eine große TPNGObject MemoryLeak Schlacht hinter mir und möchte gerne eine andere Komponente nutzen.

Gibt es eine PNG-Komponente, die PNGs in TImageList unterstützt (also ich nur die DFMs von TPNGImageList auf TXyzImageList ändern muß)?

Gruß Assertor

Assertor 17. Mai 2008 18:13

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Zitat:

Zitat von Assertor
Gibt es eine PNG-Komponente, die PNGs in TImageList unterstützt (also ich nur die DFMs von TPNGImageList auf TXyzImageList ändern muß)

Hey, nicht alle auf einmal ;)

Bei dem Wetter gibt es eh schon genug Frust. Deswegen schieb ich auch mal etwas Frust über die DP - mal eine kurze List von Threads aus 2006 bis 2008 in diesem Forum, wo mir nie jemand überhaupt geantwortet hat (!) - zum großen Teil waren das auch offene Fragen:

http://www.delphipraxis.net/internal...641&highlight=

http://www.delphipraxis.net/internal...848&highlight=
http://www.delphipraxis.net/internal...970&highlight=
http://www.delphipraxis.net/internal...359&highlight=
http://www.delphipraxis.net/internal...687&highlight=
http://www.delphipraxis.net/internal...130&highlight=
http://www.delphipraxis.net/internal...361&highlight=
http://www.delphipraxis.net/internal...203&highlight=
http://www.delphipraxis.net/internal...338&highlight=
http://www.delphipraxis.net/internal...892&highlight=
http://www.delphipraxis.net/internal...333&highlight=
http://www.delphipraxis.net/internal...100&highlight=
http://www.delphipraxis.net/internal...379&highlight=
http://www.delphipraxis.net/internal...395&highlight=

Zum Glück hat sich das meiste von selbst erledigt (bis auf diesen hier und den ersten der Liste)...

Ich glaube, wäre ich ein anderes - bekannteres - Mitglied, wäre zumindest manchmal eine Höflichkeitsantwort gekommen. Nichts gegen die DP, ich helfe hier gerne und bekomme auch gerne gute Tipps und Anregungen - aber das frustiert.

Es ist mir klar, daß nicht jeder hier für alles eine Lösung kennt. Manche Sachen - wie die Hintwindow Geschichte - führen dann zu einem QC, da hiernoch niemanden das aufgefallen war. Oder eben die OpenSSL Geschichte.

Gruß Assertor

P.S.: Trotzdem: :dp: - und wo bewirbt man sich denn hier als Moderator? ;)

mkinzler 17. Mai 2008 18:15

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Zitat:

P.S.: Trotzdem: The Delphi-PRAXiS Rules - und wo bewirbt man sich denn hier als Moderator? Wink
Durch gute Antworten :zwinker:

rotfc 17. Mai 2008 18:30

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
"deprecated" = "veraltet"

omata 17. Mai 2008 18:36

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Vielleicht hilft dir das hier weiter.

Gruss
Thorsten

Assertor 17. Mai 2008 18:43

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Zitat:

Zitat von omata
Vielleicht hilft dir das hier weiter.

Hi Thorsten, danke für die Antwort - das ist leider nur genau das gleiche. Kenn ich und basiert alles auf pngdelphi ;)

Zitat:

Zitat von rotfc
"deprecated" = "veraltet"

War das eine Frage, eine Gedächtnisstütze oder ähnliches? Deprecated steht imho sowohl für veraltet (besonders in der IT), obsolet aber auch unerwünscht oder überholt. Dies trifft ja für ein seit Jahren nicht mehr gepflegtes Projekt mit einigen Bugs zu, oder?

Zitat:

Zitat von mkinzler
Durch gute Antworten :zwinker:

Davon hab ich doch immer jede Menge, höflich und sachlich, einsatzbereit und nur sehr selten launisch wie hier ;)

Das Problem dieses Threads bleibt, aber Ihr macht mir durch Eure Antworten wieder etwas Hoffnung :)

Gruß Assertor

mkinzler 17. Mai 2008 18:44

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Es ist ja nicht das Problem, das wir dir nicht helfen wollen

omata 17. Mai 2008 18:56

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ups, du hast recht! sorry.

Bei einer Internetsuche stolpert man allerdings ständig über pngDelphi.

Ich habe folgende Dateien gefunden und da erstmal ein Package draus gemacht. Nach der Installation kann ich png-Bilder in die TImage-Komponente laden. Ich habe gerade mal einen Speichertest durchgeführt und das funktioniert wunderbar.

Was spricht den gegen diese Komponente? Vieleicht können wir ja deine Speicherleckprobleme lösen?

Gruss
Thorsten

Assertor 17. Mai 2008 19:08

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Danke für die Antworten!

Zitat:

Zitat von omata
Bei einer Internetsuche stolpert man allerdings ständig über pngDelphi.

Stimmt, da gibt es auch nicht wirklich viel Alternativen. Lediglich von Luckie las ich mal den Tipp mit den HiComponents - als er jedoch dort das Problem mit Speicherlecks hatte. Scheint für Grafik- und Kompressionslibraries ein sehr häufiges Problem zu sein :wall:

Zitat:

Zitat von omata
Was spricht den gegen diese Komponente? Vieleicht können wir ja deine Speicherleckprobleme lösen?

Ich habe gerade mir die Komponente angesehen - ist ebenfalls die 1.564. Registriert wird der Handler füt TImage, weißt Du, ob es auch für TImageList geht?

Ich prüfe das jetzt gleich mal - aber vielleicht hast Du das ja schon getestet.

Konkrete Speicherlecks gibt es bei der Thany Erweiterung für PNGdelphi 1.564 (wird ja auch nicht mehr gepflegt).

Mein Code:
Delphi-Quellcode:
procedure Txxx.MakeDisabledImage(var AImage: TImage);
var
  pngimg1: TPNGObject;
begin
  if Assigned(AImage) then
  begin
    pngimg1 := TPNGObject.Create;
    try
      ConvertToPNG(AImage.Picture.Graphic, pngimg1); // hier...
      MakeImageBlended(pngimg1); // ...und hier gibt es Lecks
      AImage.Picture.Assign(pngimg1);
    finally
      FreeAndNil(pngimg1);
    end;
  end;
end;
Die Funktionen MakeImageBlended und ConvertToPNG stammen dabei aus der "pngfunctions.pas" von Thany... Ich versuche noch mal schnell aus dem Projekt ein LeakLog zu erstellen. Dauert aber kurz wegen der Projektgröße...

Gruß und Danke
Assertor

omata 17. Mai 2008 19:21

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
In der normalen TImageList geht es leider nicht. Aber in der TImageList32 aus Graphics32 geht es!

Gruss
Thorsten

Assertor 17. Mai 2008 19:23

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Hier das kurze Log:

Delphi-Quellcode:
--------------------------------2008/5/17 20:10:14--------------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

5 - 12 bytes: TIdThreadSafeInteger x 1
13 - 20 bytes: TPNGList x 2
21 - 28 bytes: TIdCriticalSection x 2, TPen x 2, TBrush x 2
29 - 36 bytes: TFont x 2, Unknown x 2
53 - 68 bytes: Unknown x 1
85 - 100 bytes: TCanvas x 2
549 - 612 bytes: TPNGObject x 2
TIdThreadSafe und TIdCriticalSection ist von Indy und klar (by Design).

Kommentiere ich die beiden fraglichen Zeilen aus gibt es keine (bzw. nur die gewollten Indy) Leaks.

Gruß Assertor

Edit: Endlich ein roter Kasten ;) Das prüfe ich gleich mal ab mit Graphics32.

omata 17. Mai 2008 19:35

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Ich kenne deine Anwendung ja nicht, aber kann es vielleicht sein, dass das Speicherleck von TPNGObject auch durch die Indys entsteht? Immerhin sind dort auch zwei TIdCriticalSection offen geblieben.

Mit MemProof habe ich keine Probleme. Vielleicht solltest du nochmal einen Test ohne die Indys durchführen.

Gruss
Thorsten

Assertor 17. Mai 2008 19:48

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Nein, Lecks sind nicht von Indy. Ich verwende die aktuelle FPC/Lazarus Indy Port für die Delphi VCL - alles sehr aktuell. Daher nicht so typisch die Meldungen.

Aber TPNGObjects werden da nicht verwendet ;)

Gruß Assertor

P.S.: Hab grad Graphics32 gesehen. Da ist auch kein adäquater Ersatz für TPNGImageList. Ich versuche mal das nachzuprüfen...

omata 17. Mai 2008 19:50

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kannst du nicht einfach mal eine leere Anwendung zum testen benutzen.

Edit: Die TPNGImageList musste ich erstmal finden! (hier)
Edit2: Anhang enthält mal das Archiv (ohne Setup!)

Andreas L. 17. Mai 2008 20:45

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei TBX 2.2 Alpha ist eine sehr funktionale ImageListe dabei. Leider ist die Projektseite (http://www.g32.org) schon seit Monaten down. Im Anhang das komplette Paket. Die ImageList sollte sich auch ohne installiertes Toolbar2000 installieren lassen. Vielleicht hilfts dir ja weiter, ansonsten eine der unzähligen Grafik-Libs wie z. B. Graphics32 (da hat der TBX-Autor mitgewirkt).

omata 17. Mai 2008 20:52

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
So, ich habe jetzt mal alle Komponenten aus #14 ausprobiert und mit FastMM auf Speicherlecks getestet. Da ist alles in Ordnung!

Der Fehler muss in deinem Quellcode liegen.

Gruss
Thorsten

Assertor 17. Mai 2008 21:08

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Zitat:

Zitat von omata
So, ich habe jetzt mal alle Komponenten aus #14 ausprobiert und mit FastMM auf Speicherlecks getestet. Da ist alles in Ordnung!

Der Fehler muss in deinem Quellcode liegen.

Hast Du auch die Heap-Überwachung an. Da kommt etwas von Zugriff auf bereits destroyed Objects in den beiden...

An alle anderen: Danke für die Tipps, ich prüfe das nochmal ab.

omata 17. Mai 2008 21:23

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Ja habe ich, mein Testfall ist folgender...
Delphi-Quellcode:
procedure TForm.FormCreate(Sender: TObject);
type
  TMyType = record
    a:integer;
  end;
  TMyPType = ^TMyType;

var MyP:TMyPType;
begin
  new(MyP);
end;
Den zeigt mir FastMM auch als einziges an...
Code:

--------------------------------2008/5/17 22:22:17--------------------------------
A memory block has been leaked. The size is: 4

Stack trace of when this block was allocated (return addresses):
402963 [System][@GetMem]
4725AA [Unit1.pas][Unit][TForm.FormCreate]
452CCB [Forms][TCustomForm.DoCreate]
4529AB [Forms][TCustomForm.AfterConstruction]
4037D2 [System][@AfterConstruction]
452981 [Forms][TCustomForm.Create]
7C91FB6C [RtlNtStatusToDosError]
7C91FB71 [RtlNtStatusToDosError]
7C809382 [GetTickCount]
7C84051D [ValidateLocale]

The block is currently used for an object of class: Unknown

The allocation number is: 744

Current memory dump of 256 bytes starting at pointer address 1022320:
[...unwichtig, deshalb gelöscht...]

--------------------------------2008/5/17 22:22:17--------------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

1 - 4 bytes: Unknown x 1

Note: Memory leak detail is logged to a text file in the same folder as this application. To disable this memory leak check, undefine "EnableMemoryLeakReporting".
Gruss
Thorsten

Assertor 17. Mai 2008 23:51

Re: Ersatz für Buggy/Deprecated pngdelphi?
 
Hallo,

danke für die ganze Hilfe. Ich habe jetzt beschlossen, die MemoryLeaks zu ignorieren, da ja PNGdelphi dank Gustavo Daud in Tiburón enthalten sein wird.

Somit liegt das Problem dann in der VCL und nicht bei mir ;)

Gruß Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.

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