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.
Antworten
Zu viele Anzeigen?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.
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).