Einzelnen Beitrag anzeigen

Alallart

Registriert seit: 8. Dez 2015
177 Beiträge
 
#1

Was mache ich hier falsch? Objektabfrage in ListBoxDrawItem

  Alt Gestern, 20:18
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;
  Mit Zitat antworten Zitat