Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listbox Eintrag fett machen (https://www.delphipraxis.net/51026-listbox-eintrag-fett-machen.html)

BenniP 4. Aug 2005 17:29


Listbox Eintrag fett machen
 
Hallo,

ich habe eine ListBox und in dieser würde ich gerne unterschiedliche Einträge fett machen.
Also z.b. mal den ersten, dann mal den 2. und den 6. Eintrag.

Das mit den Fett machen in der OnDraw-Procedure hab ich gemacht, ob ichs verstanden hab ist etwas anderes :)

Mein Problem ist das ich nicht weiß, wie ich es abfragen kann das er z.b. den 1. und 2. Index normal läßt und den 3. Fett macht und den 4. wieder normal läßt.
Die Test wo ich gemacht hab, hat er immer alle Einträge Fett gemacht.

Könnte mir da jemand auf die Sprünge helfen?

Besten Dank
BenniP

100nF 4. Aug 2005 17:32

Re: Listbox Eintrag fett machen
 
hi,

Zitat:

Die Test wo ich gemacht hab, hat er immer alle Einträge Fett gemacht.
könntest du vielleicht den code posten, bei dem das passierte? dann wäre es vielleicht möglich diesen abzuändern

gruss
urbanbruhin

CLRS530 4. Aug 2005 17:34

Re: Listbox Eintrag fett machen
 
Du bekommst doch bei der prozedur index übergeben, so musst du einfach nur prüfen oder dieser 4 oder 6 ist oder sonstwas und dann deine methode ausführen.

EDIT:
Hier der Code

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  If (Index = 4) or (Index = 6) then
    //Hier die Methode zum fett zeichnen
end;

BenniP 4. Aug 2005 18:03

Re: Listbox Eintrag fett machen
 
@urbanbruhin:
Oh ja, Verzeihung:

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
   listbox1.canvas.FillRect(rect);
   Listbox1.canvas.Font.Style:= [fsbold];
   Listbox1.canvas.TextOut(Rect.Left+2, Rect.Top, listbox1.Items[index]);
end;
@CLRS530:
Werd ich gleich probieren.

100nF 4. Aug 2005 18:16

Re: Listbox Eintrag fett machen
 
Zitat:

Zitat von BenniP
@urbanbruhin:
Oh ja, Verzeihung:

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
   listbox1.canvas.FillRect(rect);
   Listbox1.canvas.Font.Style:= [fsbold];
   Listbox1.canvas.TextOut(Rect.Left+2, Rect.Top, listbox1.Items[index]); // Hier ist ja der Index
end;
@CLRS530:
Werd ich gleich probieren.

Ich denke, es müsste schon so gehen wie es CLRS530 beschrieben hat.

BenniP 4. Aug 2005 18:21

Re: Listbox Eintrag fett machen
 
Geht auch! Dankeschön für die schnelle und hilfreiche Antwort! :)

Nur noch eine abschließende Frage, kann ich in dieser OnDraw-Procdure auch for-Schleifen ausführen?

dahead 4. Aug 2005 18:23

Re: Listbox Eintrag fett machen
 
klar, du kannst da alles ausführen was du willst.

die schleife wird dann halt jedesmal bei einem ondraw-event aufgerufen.

BenniP 4. Aug 2005 18:44

Re: Listbox Eintrag fett machen
 
Ok, jetzt hab ich mal meine OnDraw-Procdure erweitert.

In Listbox2 stehen die Einträge [0, 2, 5] drin.
Die versuche ich mit einer For-Schleife auszulesen und dann mit dem Index zu vergleichen.

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
  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
   else
   begin
    FillRect(rect);
    Font.Style:= [];
    TextOut(Rect.Left+2, Rect.Top, listbox1.Items[index]);
   end;
  end; //DO
 end; //with
end;
Allerdings, markiert er mir nur den fünften Eintrag, also den letzten der Listbbox, fett. Alle anderen sind normal.

CLRS530 4. Aug 2005 19:13

Re: Listbox Eintrag fett machen
 
Das macht absolut kein Sinn wie du es machst.
OnDraw ist eine Prozedur die so lange aufgerufen wird, wie Elemente in der Listbox sind.
Es geht also alle durch.

Versuch es mal folgendermaßen:

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
                                  Rect: TRect; State: TOwnerDrawState);
var iihnhalt: integer;
begin
  with (Control as TListBox).Canvas do
  begin
    FillRect(rect);
    iihnhalt:= strtoint(listbox2.Items[Index]);
    If Index = iihnhalt then
      Font.Style:= [fsbold]
    else
      Font.Style:= [];
    TextOut(Rect.Left+2, Rect.Top, listbox1.Items[index]);
  end; //with
end;
EDIT : Habs getestet, das funzt so :)
Ist doch auch gleich viel angenehmer der Code oder? ;)

BenniP 4. Aug 2005 19:27

Re: Listbox Eintrag fett machen
 
Ok ich werds mal testen. Danke schon mal im Vorraus :)

Edit: Ok, aber es funktioniert nur wenn die Anzahl der Listbox2 Einträge mit dem der Listbox1 übereinstimmt. Denn der Index geht ja von 0 bis zum Ende der Listbox1.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz