[GELÖST] Fetter Text in TBitBtn und TListBox

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

[GELÖST] Fetter Text in TBitBtn und TListBox

Beitrag von OLLI_S »

Liebe Community,

ich möchte einen Teil des Textes auf einem Button (TBitBtn) fett machen.
Hintergrund: ich habe mehrere Buttons, die etwas starten (Caption "Starte x" und "Starte y") und ich möchte die Komponente, die gestartet werden soll, gerne fett machen.

Ebenso möchte ich in einer Liste (TListBox) einen Teil des Textes von jedem Eintrag fett darstellen.
Hintergrund: in der Liste sind Einträge, die mit einem Zeitstempel (Datum und Uhrzeit) beginnen, anschließend kommt das eigentlich wichtige Unterscheidungsmerkmal, das ich hervorheben will.

System: Windows XP SP3
Lazarus 0.9.3.0

Geht das irgendwie?
Danke für Eure Hilfe!

Gruß

OLLI
Zuletzt geändert von OLLI_S am Di 10. Jul 2012, 23:02, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fetter Text in TBitBtn und TListBox

Beitrag von theo »

Bei TBitBtn glaube ich nicht.

Bei TListBox kannst du mit Style lbOwnerDrawFixed im Event OnDrawItem zeichnen was du willst, also auch Text ausgeben wie du willst.

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Fetter Text in TBitBtn und TListBox

Beitrag von OLLI_S »

Hallo theo,
theo hat geschrieben:Bei TBitBtn glaube ich nicht.
Bei TListBox kannst du mit Style lbOwnerDrawFixed im Event OnDrawItem zeichnen was du willst, also auch Text ausgeben wie du willst.
Da ich Anfänger bin und mich mit OnDrawItem nicht auskenne, benötige ich Hilfe.
Ich würde gerne den Text "Hallo" normal ausgeben (nicht fett) und den Text "Welt" in fetter Schrift.
Was muss ich dazu bitte machen?

Danke für Eure Hilfe!

Gruß

OLLI

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fetter Text in TBitBtn und TListBox

Beitrag von theo »

Du musst auf den Listbox Canvas Zeichnen. Die Parameter bekommst du mit: ARect gibt die Koordinaten an, Index die akuelle Zeile.
Du brauchst bestimmt Canvas.FillRect und Canvas.TextRect oder TextOut.
Den Text musst du nat. auch selber auseinandernehmen. Mit Canvas.TextExtent kriegst du die Dimensionen.
Es ist nicht sehr einfach und ich werde es nicht für dich programmieren. Ich finde, wer "komisches Zeuch" haben will, soll sein eigenes Hirn gebrauchen. :wink:

Vielleicht kennt jemand eine Komponente, die so etwas besser kann.

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Fetter Text in TBitBtn und TListBox

Beitrag von OLLI_S »

Hallo,

ich habe eine generelle Frage bevor ich anfange in die Tiefe zu programmieren:

Wenn ich mit folgenden Befehle Text in der Listbox ausgebe:

Code: Alles auswählen

ListBox1.Canvas.TextOut(10,10,'Zeile 1');
ListBox1.Canvas.TextOut(10,30,'Zeile 2');
dann wird dieser Text auch angezeigt.
Sobald ich aber in die Listbox klicke, ist er wieder weg.
Den Style der ListBox habe ich auf lbOwnerDrawFixed gestellt.

Ist das ein Problem, weil ich noch was machen muss oder funktioniert das ganze nicht?

Gruß

OLLI

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fetter Text in TBitBtn und TListBox

Beitrag von theo »

Du musst wie oben gesagt, im OnDrawItem Ereignis zeichnen und nicht irgendwann.
Dann auch nur das durch Index angegebene Item an der durch ARect beschriebenen Position.

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Fetter Text in TBitBtn und TListBox

Beitrag von OLLI_S »

Hallo,

ich habe auch mal in Google gesucht und folgenden Beitrag gefunden:
http://www.delphipraxis.net/116296-vers ... tring.html" onclick="window.open(this.href);return false;

Im Zweiten Beitrag (vom Benutzer shmia) findet man einen recht brauchbaren Code.
Unter Lazarus muss man den noch geringfügig verändern, das habe aber selbst ich (Einsteiger) geschafft.
Bei mir funktioniert das ganze, ich kann beliebige Texte in die ListBox hinzufügen und die durch spezielle Code-Zeichen formatieren.

Gruß

OLLI

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fetter Text in TBitBtn und TListBox

Beitrag von theo »

Das ist natürlich praktisch, wenn man sowas findet. :wink:

Das ist aber nicht gut ausgerichtet innerhalb der Zeile, probier mal OutputText zu ersetzen mit:

Code: Alles auswählen

procedure OutputText(const s:string);
  var
     tlen : Integer;
     Styl:TTextStyle;
  begin
     Inc(Rect.Left, 2);
     Styl.Layout:=tlCenter;
     Styl.Alignment:=taLeftJustify;
     Canvas.TextRect(Rect,Rect.Left,0,S,Styl);
     tlen := Canvas.TextWidth(s); //Länge des Teilstrings bzw. Platzbedarf im Canvas ermitteln
     Inc(Rect.Left, tlen); //Zum linken X-Wert der Canvas addieren (für den nächsten Teilstring)
  end;

Antworten