AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Einzelne Wörter in TListBox fett zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Einzelne Wörter in TListBox fett zeichnen

Ein Thema von Dennis07 · begonnen am 20. Apr 2013 · letzter Beitrag vom 11. Mai 2013
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#1

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 22. Apr 2013, 09:34
Ich würde einfach TJvHTListBox aus der JVCL verwenden. Da kannst du einfach HTML zur Formatierung nutzen. Das ist sicher ein klein wenig langsamer, aber in einer Listbox hat man ja auch kaum tausende von Einträgen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#2

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 22. Apr 2013, 12:16
Hallo,
Ich habe noch keine OnDrawItem-Prozedur für DIESE ListBox, da ich es im Grunde nur für den Highlight des jeweiligen Texts zwischen dem Zeichen #9 und : brauche.
Das ist die erste ListBox. Die zweite, die man auch auf dem Screenshot meines letzten Beitrags sehen kann, hat folgenden Code:

Delphi-Quellcode:
  TfmChat = class(TForm)
  public
    { Public-Deklarationen }
    NickName: String; //Anzeigename
  end;

{ ... }

procedure TfmChat.lbPeopleDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
{ Eigenen Namen fett anzeigen }
begin
  if Index = lbPeople.Items.IndexOf(NickName) then
  begin
    (Control as TListBox).Canvas.Font.Style := [fsBold];
  end else
  begin
    (Control as TListBox).Canvas.Font.Style := [];
  end;
  with Control as TListBox do
  begin
    Canvas.Pen.Color := lbPeople.Color;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 2,Rect.Top - 1,Items[Index]);
  end;
end;
Dennis
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 22. Apr 2013, 13:37
Zitat:
Wie kann ich verhindern, dass Fett gedruckter Text in manchen Windows-Designs so hässlich über den Rand der TListbox steht?
Ich vermute, du meinst, dass oberhalb des Textes 1 Pixel oberhalb der eigentlichen Zeile blau eingefärbt ist.
Das hast du mit Canvas.TextOut(Rect.Left + 2,Rect.Top - 1,Items[Index]); so vorgegeben.
Mit Rect.Top-1 positionierst du den Text 1 Pixel oberhalb der Zeile.
Abhilfe:
Canvas.TextRect(Rect,Rect.Left+2,Rect.Top-1,Items[Index]); Das "FillRect" kannst du dir dann auch sparen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#4

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 22. Apr 2013, 14:27
Danke, das hat (zumindest für WinAero) schonmal geholfen.
Der Grund, weshalb ich den einen Pixel abziehen musste war, dass es sonst auf WinXP im Klassischen Design zu genau dem umgekehrten Fehler kam.

MFG
Dennis
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#5

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 30. Apr 2013, 16:10
Könnte mir evtl. jemand mal ein beispiel zu den fetten Wörtern in der TListBox geben, irgendwie kriege ich das nicht mal in ansätzen richtig hin.
Danke ;D
Dennis
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#6

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 4. Mai 2013, 10:39
Hallo, kann mir denn keiner hier helfen?
Außerdem stehe ich nach wie vor vor dem Problem mit den Tabsprüngen, die beim Draw-en nicht richtig angezeigt werden. Meine Suchen bisher waren leider erfolglos.
MFG
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#7

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 5. Mai 2013, 06:05
Mach es dir doch nicht so schwer... ich habe dir oben schon eine sehr einfache Lösung gepostet... ein Beispiel, folgender Text in der TJvHTListBox:
Zitat:
<b>Dennis:</b><ind=70>Test</ind>
Sebastian:<ind=70>Test2</ind>
Noch jemand:<ind=70>Ihr seid ja langweilig</ind>
<b>Dennis:</b><ind=70>Klappe</ind>
Ansonsten hat Luckie oben schon geschrieben wie Tabs korrekt angezeigt werden, so ca., bisschen Feintuning ist noch nötig:
Delphi-Quellcode:
procedure TForm246.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
const
  TextToHighlight = 'Dennis:';
var
  MyListBox: TListBox;
  CurrentItem: string;
  CurrentRect: TRect;
  CurrentPaintLeft: Integer;
  FormatValue: Integer;
begin
  MyListBox := Control as TListBox;
  CurrentItem := MyListBox.Items[Index];
  CurrentRect := Rect;
  FormatValue := DT_LEFT or DT_EXPANDTABS or DT_TABSTOP;
  LongRec(FormatValue).Bytes[1] := 14; // Tabbreite in Buchstaben
  if AnsiSameText(Copy(CurrentItem, 1, Length(TextToHighlight)), TextToHighlight) then
  begin
    Delete(CurrentItem, 1, Length(TextToHighlight));
    DrawText(MyListBox.Canvas.Handle, CurrentItem, Length(CurrentItem), CurrentRect, FormatValue); // erst den Text dahinter
    MyListBox.Canvas.Font.Style := [fsBold];
    DrawText(MyListBox.Canvas.Handle, TextToHighlight, Length(TextToHighlight), CurrentRect, FormatValue); // nun den Namen vorne
  end
  else
    DrawText(MyListBox.Canvas.Handle, CurrentItem, Length(CurrentItem), CurrentRect, FormatValue);
end;
Heraus kommt dann das (links: TJvHTListBox mit obigem Text, rechts: selbst gezeichnet):
htlistbox.png
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#8

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 5. Mai 2013, 18:35
Hm, danke schonmal.
Wieso erstellst du eine neue TListBox ("MyListbox")?
Wir haben doch schon eine?
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#9

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 5. Mai 2013, 19:30
Die TListBox wird im Sender als TWinControl übergeben, das hat aber keinen Canvas. Also caste ich den Sender auf TListBox, wobei as vorher prüft, ob das auch wirklich eine TListBox ist.
So kann der Code benutzt werden ohne eine bestimmte TListBox anzusprechen, ich bekomme sie ja im Sender.

Eine neue erstellt wird da nirgends.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:50 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