Wie man CR/LF in einem TStringgrid Zelle?
Ich will eine Feste Zeile als header, aber die Texte sind ziemlich lang, also würde ich gerne erhöhen Sie die Zeilenhöhe und einfügen von CR/LF in der Zelle text.
Googeln zeigt dies als eine Lösung (und es ist das erste, was ich dachte, fo, bevor googeln), aber es unten nicht sehen, um zu arbeiten. Irgendwelche Ideen?
Grid.Cells[2,3] := 'This is a sample test' + #13#10 + 'This is the second line';
Was passiert, ist, dass die Zelle enthält This is a sample testThis is the second line
(Delphi 7, wenn es einen Unterschied macht)
[Kopfgeld] "Mein bad. Ich habe tatsächlich erhielt dieser die Antwort vor zwei Jahren ohne Prüfung und jetzt feststellen, dass die Antwort nicht funktioniert. Aplogies jedermann in die Irre geführt wurde. Dies ist ein FABOWAQ (Häufig gestellte, Häufig falsch beantworteten Frage). GINYF".
Ich davon aus, dass wir suchen, um zu verwenden OnDrawCell, aber Stell dir vor, wir müssten auch die Steigerung der Höhe der string-grid-Zeile, die enthält die Zelle.
Ich vergibt die Antwort entweder code oder eine FOSS-VCL-Komponente.
[Update] muss die Arbeit mit Delphi XE2 Starter edition
- RowHeights[#] von TStringGrid würde nicht helfen? edit: AFAICS in den verlinkten code in die Antwort, RowHeights wird verwendet, um das Ausmaß.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TStringGrid
verwendetCanvas.TextRect
verwendetExtTextOut
, die wiederum nicht unterstützt Zeichnung von mehrzeiligen text.Haben Sie zu ziehen, sich in einem
OnDrawCell
event-handler mit WinAPI istDrawText
routine. Siehe zum Beispiel diese Antwort, wieDrawText
für mehrzeiligen text, und diese neue Antwort, wie zu implementieren benutzerdefinierte Zeichnung inOnDrawCell
:Gibt es auch andere StringGrid Komponenten können in der Zeichnung mit mehrzeiligem text. Zum Beispiel, diese eine, die ich selbst geschrieben habe (download-Quellen: NLDStringGrid + NLDSparseList), eventuell mit diesem Ergebnis:
requires DesignIde
Linie! Versuchen Sie Laufzeit sonst.FillWithRandomText()
fallen die loops und zuordnen einer einzelnen Zelle (sagenCells[3,3]
). Ich denke, du bekommst das Kopfgeld auf diesen einen, aber es wäre schön, wenn Sie könnte zwicken, leere Zeile Sache.UpdateRowHeights()
ausMaxHeight := 0;
zuMaxHeight := AGrid.DefaultRowHeight;
und leere Zeilen jetzt Aussehen vernünftig.Den TStringGrid ist ein Standard-renderer keine Unterstützung für mehrere Linien. Durch die Einstellung des TStringGrid im OwnerDraw-Modus (aufrufen von OnDrawCell-Ereignis) wiedergegeben werden können, wird jede Zelle von Ihrem eigenen Geschmack.
Haben Sie einen Blick auf diese ein Beispiel, das half einem vorherigen Benutzer.
Verlinkte Referenz code eingefügt:
Ich denke, das wird gut funktionieren für Sie...
RowHeights[]
innerhalb derDrawCell
routine. Uglhh...DrawText
(mit DT_CALCRECT-flag) ermittelt das Rechteck erforderlich zu ziehen, der text, die berücksichtigt, mehrere Zeilen.DT_WORDBREAK
flag), so dass Sie können am Ende mit mehr Zeilen.SetGridHeight
?