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

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

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
Dennis07

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

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 6. Mai 2013, 22:29
Achso, das war mir noch nicht so ganz klar gewesen.
Werde ich gleich morgen ausprobieren, danke.

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 9. Mai 2013, 01:17
Hm, also entweder habe ich beim copy&paste erheblich was falsch gemacht, oder es funktioniert nicht.
Der Quelltext, so wie beschrieben, kann gar nicht funktionieren, da DrawText den HighlightText als PChar benötigt.
Und selbst wenn man das Problem dann behoben hat, so hat das Resultat kaum etwas mit dem gemeinsam, was ich brauche.

1. Der Text wird nicht ge-highlighted.
2. Das einzige, was sich ändert ist, dass ich nun so hässliche permanente FocusRects überall habe, und der Selected-Hintergrundfokus nicht über die Gesamte Breite verläuft.

(Screenshot beiliegend)

Danke trotzdem bis hierher.
Angehängte Grafiken
Dateityp: jpg program.jpg (21,9 KB, 24x aufgerufen)
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 9. Mai 2013, 06:31
Das mit dem PChar liegt daran, dass du Delphi 7 hast, darauf hatte ich nicht weiter geachtet. Damals (ist ja nun immerhin 11 Jahre alt) gab es die Stringversion von DrawText noch nicht.
Das mit der Markierung war noch ein Fehler, da fehlte ein FillRect um die Markierung aufzuräumen.

Mit Delphi 7 funktioniert es bei mir so:
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;
  MyListBox.Canvas.FillRect(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, PChar(CurrentItem), Length(CurrentItem), CurrentRect, FormatValue); // erst den Text dahinter
    MyListBox.Canvas.Font.Style := [fsBold];
    DrawText(MyListBox.Canvas.Handle, PChar(TextToHighlight), Length(TextToHighlight), CurrentRect, FormatValue); // nun den Namen vorne
  end
  else
    DrawText(MyListBox.Canvas.Handle, PChar(CurrentItem), Length(CurrentItem), CurrentRect, FormatValue);
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dennis07

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

AW: Einzelne Wörter in TListBox fett zeichnen

  Alt 9. Mai 2013, 13:26
Ehm, zumindest danke für die Mühe bis hierher.
Zuerst die gute Nachricht: Die optischen "Zwischenfälle" sind nun behoben, es funktioniert nun wieder alles.
Nur leider wird auch nichts ge-highlighted (siehe Screenshot).
Angehängte Grafiken
Dateityp: jpg program.jpg (9,4 KB, 14x aufgerufen)
Dennis
  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 02:26 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