Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einzelne Wörter in TListBox fett zeichnen (https://www.delphipraxis.net/174396-einzelne-woerter-tlistbox-fett-zeichnen.html)

Dennis07 22. Apr 2013 14:27

AW: Einzelne Wörter in TListBox fett zeichnen
 
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

Dennis07 30. Apr 2013 16:10

AW: Einzelne Wörter in TListBox fett zeichnen
 
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

Dennis07 4. Mai 2013 10:39

AW: Einzelne Wörter in TListBox fett zeichnen
 
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

jaenicke 5. Mai 2013 06:05

AW: Einzelne Wörter in TListBox fett zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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: :wink:
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):
Anhang 39164

Dennis07 5. Mai 2013 18:35

AW: Einzelne Wörter in TListBox fett zeichnen
 
Hm, danke schonmal.
Wieso erstellst du eine neue TListBox ("MyListbox")?
Wir haben doch schon eine?

jaenicke 5. Mai 2013 19:30

AW: Einzelne Wörter in TListBox fett zeichnen
 
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.

Dennis07 5. Mai 2013 22:09

AW: Einzelne Wörter in TListBox fett zeichnen
 
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?

jaenicke 6. Mai 2013 09:21

AW: Einzelne Wörter in TListBox fett zeichnen
 
Zitat:

Zitat von Dennis07 (Beitrag 1214247)
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.

Dennis07 6. Mai 2013 22:29

AW: Einzelne Wörter in TListBox fett zeichnen
 
Achso, das war mir noch nicht so ganz klar gewesen.
Werde ich gleich morgen ausprobieren, danke.

MFG

Dennis07 9. Mai 2013 01:17

AW: Einzelne Wörter in TListBox fett zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.
Seite 2 von 3     12 3      

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