Ich bekomme hier einen falsche Wert raus (in der Prozedur ListBoxDrawItem). Das Ganze sieht in etwa so aus (ist natürlich etwas komplexer, aber ich habe es auf das Nötigste reduziert). Die Prozedur DatenLaden lädt Daten in die ListBox. Da außer der Textliste noch paar Infos mehr dazugehören, wird ein Object an jeden Item gehängt. Dazu auch ein Byte mit einer ErrorInfo. Der hat die Aufgabe das Item farblich zu kennzeichnen, falls es in dem Item einen Fehler gab. Es ist eine Byte-Zahl, die die Art des Fehlers angibt.
Mein Problem ist, dass bei der Abfrage Müll zurück kommt. In der Regel soll es eine 0 sein, für kein Fehler. Ich bekomme aber alle möglichen Zahlen zurück - 32, 37, usw. Die Zahlen die ich zuweise sind max. bis 5.
Delphi-Quellcode:
type
TInfo = class
ErrInfo: Byte;
end;
procedure DatenLaden(Liste: TStrings);
var
sl: TStringList;
Info: TInfo;
i: Integer;
begin
sl := TStringList.Create;
try
ListeLaden(sl);
for i := 0 to sl.Count - 1 do
begin
ErrInfo := MachWas(sl[i]);
Info := TIniInfo.Create;
Info.ErrInfo := ErrInfo;
Liste.AddObject(sl[i], Info);
end;
finally
sl.Free;
end;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ListBoxDrawItem(Control, Index, Rect, State, ImageList1);
end;
Diese Prozedur ist in eine Extra-
Unit ausgelagert.
Delphi-Quellcode:
procedure ListBoxDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState; ImageList: TImageList);
var
Info: TInfo;
LB: TListBox;
begin
LB := Control as TListbox;
//Code...
Info := TInfo(LB.Items[Index]);
if Info.ErrInfo > 0 then
Canvas.Brush.Color := clRed;
//Code...
end;