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
Amateurprofi

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

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
491 Beiträge
 
Delphi 11 Alexandria
 
#2

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
491 Beiträge
 
Delphi 11 Alexandria
 
#3

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
491 Beiträge
 
Delphi 11 Alexandria
 
#4

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
9.960 Beiträge
 
Delphi 12 Athens
 
#5

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
491 Beiträge
 
Delphi 11 Alexandria
 
#6

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
9.960 Beiträge
 
Delphi 12 Athens
 
#7

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
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
491 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 5. Mai 2013, 22:09
hm, kann ich nicht einfach statt dem MyListBox da die Listbox einsetzen, mit der ich das mache?
Also ich habe ja schon im OI eine Listbox platziert, und mit der will ich das auch machen.
Wenn ich die also mit Namen anspreche, wird diese ja nicht als WinControl übergeben, sondern als TListBox.
Falls das der Grund für die neue TListBox war, so müsste dies eigentlich auch funktionieren, oder?
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 6. Mai 2013, 09:21
Also ich habe ja schon im OI eine Listbox platziert, und mit der will ich das auch machen.
Es gibt keine neue Listbox... lass es einfach wie es ist und probiere es aus...
Ich habe die auch im OI gesetzt.

Das OnDrawItem bekommt diese Listbox als Sender übergeben, aber als Vorfahrtyp, nicht konkret als TListBox. Deshalb muss der Typ noch auf TListBox gecastet werden, damit man als TListBox damit arbeiten kann. Das bleibt dabei aber immer noch die selbe Listbox.
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 15:52 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