Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Schriftart in einzelnen Zellen des StringGrids ändern...
AceTheFace - Di 27.08.02 14:56
Titel: Schriftart in einzelnen Zellen des StringGrids ändern...
Hallo,
hier jetzt hoffentlich erstmal meine letzte Frage zum StringGrid:
Wie kann ich in bestimmten Zellen die Schriftart ändern? Also z.B. Sachen Fett schreiben...
Habe leider nur etwas zur Schriftart im ganzen StringGrid gefunden.
Gruss und Danke,
Ace
toms - Di 27.08.02 19:00
Hi,
Es gibt eine OnDrawCell Ereignis-Proz., wo du die Ausgabe des Textes
selber zeichnen kannst.
Wenn es z.B nur Zelle (1,1) betrifft, kannst du das mit
einer If-Abfrage machen.
Quelltext
1:
| If (ACol = 1) and (ARow = 1) then... |
AceTheFace - Fr 30.08.02 13:58
Danke für deine Hilfe, doch jetzt weiss ich nur, dass ich die Schriftart einer Zelle mit dem OnDrawCell-Ereignis verändern kann......aber wie kann ich denn konkret den Inhalt der Zelle [2,2] fett schreiben?!
Danke für eure Hilfe!!
Ace
toms - Fr 30.08.02 14:33
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with (Sender as TStringGrid) do begin if (ACol = 2) and (ARow = 2) then begin Canvas.Font.Style := Canvas.Font.Style + [fsBold]; end; Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[ACol, ARow]); end; end; |
AceTheFace - Mo 02.09.02 13:05
So, danke, jetzt weiss ich wenigstens wie das ganze ungefähr funktioniert. Da ich aber nicht immer die gleiche Zelle fettschreiben möchte sondern meine Daten sortiert in das StringGrid eintrage muss ich erst den Inhalt abfragen und dann die entsprechende Zelle "überpinseln". Ich habe es mit folgender Prozedur versucht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure fettschreiben(StringGrid:TStringGrid); var rechteck:TRect; i,j:Integer; begin
for i:=0 to StringGrid.RowCount-1 do for j:=0 to StringGrid.ColCount-1 do if (StringGrid.Cells[j,i]='Walter') then begin rechteck:=StringGrid.CellRect(j,i); StringGrid.Canvas.Font.Style:=StringGrid.Canvas.Font.Style+ [fsbold]; StringGrid.Canvas.TextRect(rechteck,rechteck.left+2,rechteck.top+2,StringGrid.cells[j,i]); end;
end; |
Er schreibt auch die entsprechenden Zellen fett, jedoch nur solange bis ich mit dem StringGrid irgendetwas anstelle (scrolle, etw. markiere etc...).
Wie kann ich die Zellen dauerhaft fett schreiben?!
Gruss,
Ace
Tino - Mo 02.09.02 14:01
Warum benutzt Du denn jetzt nicht das OnDrawCell-Event? Damit würde es nämlich funktionieren!
AceTheFace - Mo 02.09.02 14:06
Tja, da hast du wohl recht...*g* ich habe jetzt einfach mal in das OnDrawCell-Event meine fettschreiben-Prozedur reingesetzt und siehe da, es tut.....JEDOCH wird dadurch das Arbeiten mit dem Grid fast unzumutbar langsam.
Das Scrollen ist ja noch annehmbar, doch das markieren einer Zeile ist dem User so nicht zumutbar, zumal die "fetten" Zellen nicht mehr blau beim Markieren werden :(
Das Problem der Geschwindigkeit wird wohl daher kommen, dass ich bei jedem scrollen das gesamte Grid auf 'Walter' durchsuche und das jedes Mal. Kann ich das irgendwie nur auf die sichtbaren Zellen beschränken?!
Und wie bekomme ich die "fetten" Zellen wieder blau, wenn sie markiert sind?!
Gruss und Danke für eure Hilfe,
Ace
Tino - Mo 02.09.02 14:38
Hast Du Dir mal die Parameter angeschaut die Dir das Event OnDrawCell zur Verfügung stellt?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Procedure TForm1.StringGrid1DrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Begin With (Sender as TStringGrid) Do Begin If StringGrid.Cells [aCol, aRow] = 'Walter' Then Canvas.Font.Style := Canvas.Font.Style + [fsBold];
Canvas.TextRect ( Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow] ); end; end; |
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!