Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Herausheben einzelner Teile eines Strings in einer Tabelle
mccom - Mi 29.11.06 20:05
Titel: Herausheben einzelner Teile eines Strings in einer Tabelle
Hallo!
Erstmal zur Info, ich nutze Delphi 6 Personal.
So, Mein Problem ist denke ich recht einfach, nur finde ich durch suchen einfach keine Lösung, vielleicht suche ich auch einfach nur mit den falschen Worten.
Ich würde gerne Strings in eine Tabelle schreiben, also ein TStringGrid nutzen. Die Strings kommen aus einem Array. So nun sollen aber die Strings Teilweise Fett sein. Also zB.: "das ist eine dumme Frage". Kann ich so eine Art BBCode benutzen um Delphi dazu zu bekommen nur einzelne Buchstaben fett zu machen? wahlweise würde auch farbig gehen, ich will sie nur abheben vom rest.
Also kurzzusammengefasst, Strings sollen in eine tabelle, einzelne Teile eines Strings in der Tabelle sollen sich vom rest abheben.
Wäre super wenn ihr dazu eine Idee hättet.
Vielen Dank im voraus.
Lannes - Mi 29.11.06 20:56
Hallo,
das kann man innerhalb der OnDrawCell-Ereignisbehandlung realisieren.
Denk Dir doch so eine Art BBCode aus: "das ist eine #dumme# Frage"
Dann den String in die entsprechenden Teile zerlegen, interpretieren
und einzeln an der richtigen Position mit TextOut ausgeben.
Bei der Berechnung der Ausgabe-Positionen hilft einem Canvas.TextWidth.
Wenn der String auch noch umgebrochen werden soll, wird es kompliziert.
Ich wünsch Dir schon mal viel Spass dabei. :mrgreen:
jaenicke - Mi 29.11.06 20:56
Das kannst du nur durch selber zeichnen lösen! Delphi hat keine solche Lösung integriert.
Kuck dir mal die OwnerDraw Sachen an, es gibt dort glaube ich OnAdvancedOwnerDrawCell oder sowas um eine Zelle seber zu zeichnen. Dort musst du dann mit Canvas.TextOut arbeiten (und vorher die Schriftart Canvas.Font deinen Ansprüchen entsprechend einstellen). Einfach ist das nicht...
Ich weiß nicht, ob alles genau so ist, wie ich es eben geschrieben habe ;-), war einfach so aus meiner Erinnerung, aber bei Problemen schaue ich natürlich nochmal in Delphi nach... Ich wollte nur erstmal grob was dazu sagen, vor allem, dass Delphi selbst das nicht kann.
Ach so: Wie es mit einem StringGrid ist weiß ich nicht, aber in der JEDI VCL ist zumindest eine HT-ListBox dabei, die HTML-Tags, zum Beispiel für Fettdruck, versteht. Ob da auch ein StringGrid dabei ist, schau ich mal...
// EDIT:
Ok,
Lannes hat natürlich Recht... Es ist OnDrawCell, keine Ahnung, wo es das von mir angegebene Event gab. Vielleicht in der VirtualTreeView? Egal.
Es gibt jedenfalls HT-Komponenten von JEDI nur als Label, ComboBox und ListBox. Schade. Da kommst du ums Selberzeichnen nicht drumrum, denn ich glaube kaum, dass jemand solch eine Komponente schon geschrieben hat...
mccom - Do 30.11.06 07:19
So, ich hab mich gestern abend noch etwas in die handbücher gestürtzt. ich hab aber leider nur einen fetten welzer von delphi 5... Nun ja, dieser sagt mir, "das TStringGrid von TdrawGrid die Möglichkeit erbt, vom besitzer gezeichnet zu werden. Wenn sie also ein gitter-element selbst zeichnen und gleichzeitig Text in jeder Zelle speichern wollen, ist die verwendung on TStringGrid die einfachste lösung."
Aber naja, TListBox hat bei mir in Delphi6 einen unterpunkt Styls in dem ich lbOwnerDraw anmachen kann. Aber aber beide Grids haben diesen Punkt nicht.
Könntet ihr mir da helfen? Denn Listbox bringt mir leider in dem Fall weniger weil ich MIN 3 Spalten brauche...
Lannes - Do 30.11.06 09:11
Hallo,
mccom hat folgendes geschrieben: |
mccom#s Delphi-Handbuch: | ...Wenn sie also ein gitter-element selbst zeichnen und gleichzeitig Text in jeder Zelle speichern wollen, ist die verwendung on TStringGrid die einfachste lösung... |
|
Das heist, das man in Cells einen String speichern kann, aber beim Zeichnen einer Zelle etwas anderes ausgibt.
Um beim Beispiel zu bleiben:
Delphi-Quelltext
1:
| StringGrid.Cells[c,r] := 'das ist eine #dumme# Frage'; |
dann interpretieren in OnDrawCell und mit TextOut ausgeben/zeichen:
das ist eine dumme Frage
mccom hat folgendes geschrieben: |
Aber naja, TListBox hat bei mir in Delphi6 einen unterpunkt Styls in dem ich lbOwnerDraw anmachen kann. Aber aber beide Grids haben diesen Punkt nicht.... |
bei der ListBox muss man den Style umstellen, damit OnDrawItem überhaubt ausgelöst wird.
Das ist beim StringGrid nicht erforderlich, OnDrawcell wird immer ausgelöst.
Beim StringGrid kann man durch setzen der Eigenschaft DefaultDrawing entscheiden ob man alles selber Zeichnen will.
In dem Beitrag "Griechische Buchstaben in Label oder Stringgrid", findest Du ein Beispiel mit zwei Schriftarten in einer Zelle, genau dort:
Der Folgende Code benutzt Wingdings und Arial in einer Zelle... [
http://www.delphi-forum.de/viewtopic.php?p=318145#318145](mit Zeilenumbruch)
Schau Dir auch mal den Beitrag direkt davor von
alzaimar an,
das könnte eventuell auch ein Ansatz zur Lösung deines Problems sein.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!