![]() |
Re: Listbox Eintrag fett machen
Ja klar, ich mein macht doch auch sonst keinen sinn, wie willste denn ne zahl mit nichts vergleichen, selbst wenn es weiter ginge.
|
Re: Listbox Eintrag fett machen
probiers mal so:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var i, i2, iihnhalt: integer; begin with (Control as TListBox).Canvas do begin FillRect(rect); Font.Style:= []; TextOut(Rect.Left+2, Rect.Top, listbox1.Items[index]); for i:= 0 to listbox2.Count-1 do begin iihnhalt:= strtoint(listbox2.Items[i]); If Index = iihnhalt then begin FillRect(rect); Font.Style:= [fsbold]; TextOut(Rect.Left+2, Rect.Top, listbox1.Items[index]); end ; end; end; end; |
Re: Listbox Eintrag fett machen
Zitat:
@CLRS530: Die Listbox2 speichert nur die Einträge die hervorgehoben werden sollen. |
Re: Listbox Eintrag fett machen
Achso na dann hab ich dich falsch verstanden gehabt
Delphi-Quellcode:
Mach das aber mal so, dda ist ja soviel redundanz drinne und das Textout gehört auch nicht in die Schleife mit rein, dann wird es ja womöglich viel zu oft aufgerufen.
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var i, iihnhalt: integer; begin with (Control as TListBox).Canvas do begin FillRect(rect); for i:= 0 to listbox2.Count-1 do begin iihnhalt:= strtoint(listbox2.Items[i]); If Index = iihnhalt then Font.Style:= [fsbold] else Font.Style:= []; end; TextOut(Rect.Left + 2, Rect.Top, listbox1.Items[index]); end; end; |
Re: Listbox Eintrag fett machen
Dankeschön, sieht gleich ein wenig ordentlicher aus. :)
Aber ein Fehler ist drin. Weis nicht ob es wirklich einer ist, aber wenn ich es so mache wie du es geschrieben hast dann wird wieder nur der 5. (letzter Eintrag in der lstbx2) Eintrag hervorgehoben. Wenn man aber das "Font.Style:= [];" außerhalb der For-Schleife setzt wird alles richtig angezeigt. |
Re: Listbox Eintrag fett machen
Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var i: Integer; begin with (Control as TListBox).Canvas do begin FillRect(Rect); if ListBox2.Items.IndexOf(IntToStr(Index)) <> -1 then Font.Style:= [fsbold] else Font.Style:= []; TextOut(Rect.Left + 2, Rect.Top, ListBox1.Items[Index]); end; end; |
Re: Listbox Eintrag fett machen
jo genau, das ist noch ein wenig besser :)
|
Re: Listbox Eintrag fett machen
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:
Hier noch ein kleines Beispiel um bei einem Eintrag zwichen fett und normal umzuschalten:
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;
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; |
Re: Listbox Eintrag fett machen
:o Besten Dank an alle, vorallem an Sharky!
Wow, die Sache von Sharky sieht am schönsten aus! Das mit der Object-Eigenschaft muss ich mir merken, kann ich da alles reinschreiben was ich möchte? Oder gibts da Begrenzungen, oder ist das unsauber? |
Re: Listbox Eintrag fett machen
Hai,
Die Eigenschaft Object ist eigentlisch dafür da um ein richtigs TObject mit einem Eintrag zu verbinden! Aber... letztendlich ist "Object" ja nur ein Pointer und damit ein einfacher 32-Bit Wert. In diesen kann ich also andere Integer-Werte casten (z.B: TColor,Integer,Boolen). Wenn Du mehrere Informationen zu einem Item haben möchtest solltest Du dir dafür aber ein TObject erzeugen und dieses dann "verknüpfen". Wichtig ist dabei -> Du musst die Obejekte selber wieder freigeben wenn das Item aus der Liste gelöscht wird bzw wenn die ListBox selber freigegeben werden soll (z.B. im OnClose der Form). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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