6 Stimmen

Delphi IDE ändert Imageliste in geerbten DFM-Dateien

Beim Öffnen eines Formulars, das eine geerbte TImageList in Delphi enthält (in diesem Fall 2010, aber es kann auch für andere Versionen gelten), fügt die IDE immer (ich kann keinen Reim oder Rhythmus dafür finden) die Bilddaten erneut zum geerbten Formular hinzu. Das erhöht dann die Größe der ausführbaren Datei. Weiß jemand, warum das so ist und wie ich das verhindern kann? Ich wiederhole, das Bild hat pas geändert.

5voto

Mason Wheeler Punkte 79858

Dies ist ein bekanntes Problem mit TImageList, und es gibt nicht viel, was man dagegen tun kann, außer den Datenmüll wieder zu löschen. (BeyondCompare kann hier sehr nützlich sein, besonders in Verbindung mit der Versionskontrolle). Wenn Sie wollen, dass das Problem behoben wird, stimmen Sie bitte für den QC-Bericht darüber.

5voto

Jamie Punkte 3140

Was ich tue, ist die imagelist auf ein Datenmodul setzen und dann fügen Sie es auf die Formulare verwendet Klausel. Der Formulardesigner kann die Bilderliste sehen

4voto

Allen Bauer Punkte 16377

Dies ist keine "Lösung" für das Problem, sondern eher eine Erklärung, was vor sich geht. Die Bilddaten für eine bestimmte Bildliste werden als binärer Datenblock gespeichert. Dieser Datenblock wird von der zugrunde liegenden IMAGELIST-Implementierung aus der comctl32.dll bezogen.

Wahrscheinlich ist es so, dass die Windows-Implementierung in comctl32.dll aus irgendeinem Grund die Bilddaten zwischen der "Vorgänger"-Instanz und der "Nachfolge"-Instanz unterschiedlich weiterleitet. Für Windows gibt es keine Beziehung zwischen diesen beiden Instanzen.

Die Vererbung von Formularen funktioniert so, dass beim Streaming ein eigenschaftsweiser Vergleich zwischen dem "Nachfahren" und dem "Vorfahren" durchgeführt wird, um festzustellen, ob eine bestimmte Eigenschaft in das Formular geschrieben werden soll. Da es sich bei den Bilddaten um einen undurchsichtigen Klecks handelt, können wir nur einen Byte-für-Byte-Vergleich zwischen dem, was die TImageList-Instanz des Vorgängers schreibt, und dem, was die TImageList-Instanz des Nachfolgers schreibt, durchführen. Wenn nur ein Byte unterschiedlich wäre, hätte das Streaming-System keine andere Wahl, als die Daten von der Nachfolgeinstanz zu schreiben, unter der Annahme, dass etwas geändert. Wenn der Klecks Glibber beispielsweise einen Zeitstempel enthielte, wäre es denkbar, dass die Daten jedes Mal, wenn er geschrieben wird, anders sind (und ich kenne die Details nicht, da sie undurchsichtig sind).

2voto

David Heffernan Punkte 585606

Meine Empfehlung: Bewahren Sie Bilder niemals in .dfm-Dateien auf. Legen Sie sie immer in Ressourcendateien ab und gewinnen Sie die Kontrolle über Ihre Anwendung zurück.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X