Hai BenniP,
ich habe hier mal einen anderen Lösungsweg. Ich "missbrauche" einfach die Eigenschaft
Object die jedes Item einer TStringList hat.
In diesem Fall caste ich einfach ein boolean auf dieses Object und werte dies dann im OnDrawItem aus. Der Vorteil ist das ich absolut unabhängig von der Postition des Eintrages in der ListBox bin. Also auch wenn ein Eintrag verschoben wird bleibt die Information über das formatieren erhalten:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl;
Index: integer;
Rect: TRect; State: TOwnerDrawState);
begin
with (Control
as TListBox)
do
begin
canvas.Font.Style := [];
canvas.FillRect(rect);
if Assigned (Items.Objects[
Index])
then
begin
if boolean(Items.Objects[
Index])
then // Casting nach True/False
begin
canvas.Font.Style := [fsBold]
end;
end;
canvas.TextOut(Rect.Left + 2, Rect.Top, Items[
index]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.AddItem('
blubb', TObject(True));
// True = Bold
ListBox1.Items.Add('
meow');
ListBox1.AddItem('
><((((>°>', TObject(True));
ListBox1.Items.Add('
wuppdi');
ListBox1.AddItem('
Was weis denn ich?', TObject(True));
end;
Hier noch ein kleines Beispiel um bei einem Eintrag zwichen fett und normal umzuschalten:
Delphi-Quellcode:
procedure TForm1.SwitchLBItem(aIndex: integer);
begin
if ((aIndex < 0)
or (aIndex > ListBox1.Count-1))
then
begin
raise Exception.Create('
Parameter liegt ausserhalb des gültigen Bereichs');
end
else
begin
ListBox1.Items.Objects[aIndex] := TObject(
not boolean(ListBox1.Items.Objects[aIndex]));
ListBox1.Repaint;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SwitchLBItem(1);
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"