Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zeilenumbruch im Stringgrid
moloch - Di 28.09.04 09:56
Titel: Zeilenumbruch im Stringgrid
Hallo Leute,
ich kriege einen zeilenumbruch im stringgrid hin:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure GridAlignment(Grid: TStringGrid; Rect: TRect; ACol, ARow: Integer; Alignment: TAlignment; LineBreak: Boolean); var TextOut: String; begin Grid.Canvas.FillRect(Rect); TextOut := Grid.Cells[ACol,ARow]; if LineBreak = false then begin if Alignment = taLeftJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_LEFT); if Alignment = taCenter then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_CENTER); if Alignment = taRightJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_RIGHT); end else begin if Alignment = taLeftJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_LEFT or DT_WORDBREAK); if Alignment = taCenter then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_CENTER or DT_WORDBREAK); if Alignment = taRightJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_RIGHT or DT_WORDBREAK); end; end; |
ABER: Dieser Zeilenumbruch tritt ja immer nur dann ein wenn ein Leerzeichen vorhanden ist. Gibt es eine Möglichkeit rauszufinden welcher buchstabe ("pos") nicht mehr ins feld passt, damit ich da dann ein leerzeichen und ein "-" einsetzen kann???
mfg
moloch
Moderiert von Christian S.: 144 Beiträge und kennt die Delphi-Tags noch nicht :roll: ;-)
.Chef - Di 28.09.04 10:12
Ja, du kannst mit Canvas.Textwidth die Breite bestimmen. Musst du dann solange mit einem Zeichen weniger wiederholen, bis es passt.
moloch - Di 28.09.04 12:42
also für den zeilenumbruch brauche ich ja ein leerzeichen.
also müsste ich in den string an den jeweiligen stellen ein leerzeichen einsetzen.
wie kann ich das machen?
mfg
moloch
Tino - Mi 29.09.04 17:01
Das sind doch zwei unterschiedliche Fragen?!?
GSE - Mi 29.09.04 17:06
.Chef hat gemeint, er hat ja schonmal gefragt wie man ein Zeichen an eine bestimmte Stelle setzt
mfg
GSE
DelphiJogi - Mi 18.10.23 21:01
Hallo User,
Delphi-Quelltext
1: 2:
| DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_RIGHT); DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_LEFT); |
Obige Formatierungen funktionieren hervorragend. Wie kann ich nun noch den
Rect.Top Wert integrieren?
Der Text soll entsprechend der Zeilenhöhe mittig ausgegeben werden.
Moderiert von Th69: Delphi-Tags hinzugefügt
jaenicke - Do 19.10.23 06:35
Du kannst die Textgröße mit DT_CALCRECT bestimmen und dann Rect.Top zur Ausgabe entsprechend setzen. Eine automatische vertikale Zentrierung ist leider nicht möglich, wenn der Text aus mehr als einer Zeile besteht (bei einer Zeile mit DT_SINGLELINE ginge es mit DT_VCENTER).
DelphiJogi - Fr 20.10.23 18:07
Danke Sebastian, bin erstmal weiter gekommen.
DelphiJogi - Do 26.10.23 18:11
Hallo User,
wie kann die Farbe der Linien eines StringGrids geändert werden?
jaenicke - Do 26.10.23 22:24
Du zeichnest die Linien der einzelnen Zelle im OnDrawCell so wie du sie möchtest.
DelphiJogi - Fr 27.10.23 19:17
jaenicke hat folgendes geschrieben : |
Du zeichnest die Linien der einzelnen Zelle im OnDrawCell so wie du sie möchtest. |
Danke, das ist mir aber soweit klar!
Ich kann die FontFarbe und die Zellenfarbe bestimmen ...
Delphi-Quelltext
1: 2: 3:
| Grid.Canvas.Brush.Color := clRed; Grid.Canvas.Font.Color:=clWhite; Grid.Canvas.FillRect(Rect); |
... aber nicht die Farbe des Gitters.
Im
Grid.DrawingStyle:= gdsGradient werden die Zellenrahmen hell gezeichnet. Im
gdsClassic hingegen dunkel.
Wie kann ich nun die Farbe der Zellen-Rahmen beinflussen?
Moderiert von Th69: Delphi-Tags hinzugefügt
jaenicke - Fr 27.10.23 21:36
Du hast nur die Farbe des Hintergrundes und der Schriftart gesetzt. Wie wäre es, wenn du noch die Farbe der Linien (Grid.Canvas.Pen.Color) setzt?
DelphiJogi - Fr 27.10.23 22:55
Danke, das war es was ich brauchte!
DelphiJogi - Sa 28.10.23 20:15
jaenicke hat folgendes geschrieben : |
Du hast nur die Farbe des Hintergrundes und der Schriftart gesetzt. Wie wäre es, wenn du noch die Farbe der Linien (Grid.Canvas.Pen.Color) setzt? |
Da habe ich mich wohl zu früh gefreut. Leider hat hat das setzen von
Grid.Canvas.Pen.Color keinerlei Auswirkung.
Moderiert von Th69: Delphi-Tags hinzugefügt
jaenicke - Sa 28.10.23 23:50
Verwendest du denn auch Rectangle statt FillRect? FillRect zeichnet ja explizit nur den Hintergrund des Rechtecks wie der Name schon sagt.
DelphiJogi - So 29.10.23 22:52
Danke Sebastian für deine schnelle und kompetente Hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!