AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Was mache ich hier falsch? Objektabfrage in ListBoxDrawItem

Was mache ich hier falsch? Objektabfrage in ListBoxDrawItem

Ein Thema von Alallart · begonnen am 7. Sep 2025 · letzter Beitrag vom 7. Sep 2025
Antwort Antwort
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
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
136 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Was mache ich hier falsch? Objektabfrage in ListBoxDrawItem

  Alt Gestern, 20:44

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;
Sollte das nicht sein

Info := TInfo(LB.Items.Objects[Index]) ?
Renate
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.815 Beiträge
 
Delphi 12 Athens
 
#3

AW: Was mache ich hier falsch? Objektabfrage in ListBoxDrawItem

  Alt Gestern, 20:47
Hättest du das als Info := LB.Items[Index] as TInfo geschrieben, wäre das schon dem Compiler aufgefallen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Alallart

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

AW: Was mache ich hier falsch? Objektabfrage in ListBoxDrawItem

  Alt Gestern, 22:06
Danke, das war der Fehler. Manchmal sieht man vor lauter Bäume...

Wobei da war noch ein zweiter Fehler, der sich aber erst nach dem lösen des ersten Problems zeigte.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz