Tastaro hat folgendes geschrieben : |
Die Frage ist, wo Du die Variable deklariert hast. |
Nach dem ich die Grafik in ein TBitmap eingelesen habe. Dazu lese ich eine Datei in ListBox1 ein und wandle mit
StringToBitmap einen String daraus in ein Bitmap um.
Siehe:
www.developpez.net/f...tream-ms-erreur-etc/
Ich habe nun aber etwas entdeckt: OnMeasureItem wird unmittelbar
nach ListBox1.LoadFromFile aufgerufen, jedenfalls
bevor ich
StringToBitmap aufrufe, was ja logischerweise erst nach
LoadFromFile erfolgen kann. Hier hat die Variable noch den Wert 0. Dann wird ihr ein Wert zugewiesen, nämlich die Höhe der Grafik. Und sie hat diesen Wert dann auch, aber OnMeasureItem wird dann nicht mehr aufgerufen!
Das erklärt das auf den ersten Blick seltsame Verhalten, warum es mit einer Konstante, nicht aber mit einer Variablen funktioniert!
Also habe ich die Datei zunächst in eine TStringList geladen, daraus dann den String, aus dem ich die Grafik "machen" will, ausgelesen und mit
StringToBitmap verarbeitet. Dann der Variablen den Wert zugewiesen und erst danach ListBox1 mit den Zeilen befüllt. Nun habe ich die korrekte Zeilenhöhe, aber es wird kein Bitmap gezeichnet!
Wie kann ich das lösen? Wenn nicht, auch nicht schlimm, dann eben mit fixer Höhe!
//Edit:
Lösung:
Delphi-Quelltext
1: 2: 3: 4:
| iGraphicHeight := Image1.Picture.Bitmap.Height; ListBox1.Items[10] := ListBox1.Items[10]; |
Normalerweise würde ich ja sagen, den selben String nochmals zuweisen ist Unsinn, aber so funktioniert es! Habe ListBox1.Invalidate/Update/Repaint/Refresh und sogar den Aufruf von OnMeasureItem versucht, alles erfolglos. So klappt es wenigstens, aber es ist irgendwie unschön.
Offenbar geht es nur um's Neuzeichnen. Vielleicht fällt jemandem ja etwas Besseres ein!
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!