![]() |
in TStringgrid nur erste Zeile mit fettem Text
Hallo,
Ich habe ein TStringGrid welches ich zur Laufzeit mit Daten fülle. Die Spaltenbeschriftung möchte ich aber bereits beim Ereignis "FormCreate" darstellen. Um Diese von den restlichen Einträgeb hervozuheben, suche eine Möglichkeit die erste Zeile im fetter Schrift darzustellen. Mit "Canvas.Font.Style := [fsBold]" setze ich den gesammten Text. Muss das eventuell im OnDrawCell-Ereignis des TStringgrids gemacht werden? Bin für jede Hilfe dankbar! |
Re: in TStringgrid nur erste Zeile mit fettem Text
Hallo,
dann musst Du im Event OnDrawCell den Zellinhalt selber zeichnen. In der OH steht sogar ein Beispiel. |
Re: in TStringgrid nur erste Zeile mit fettem Text
genau so siehts aus. Wie wäre es mit
Delphi-Quellcode:
?
if StringGrid.Row <= StringGrid.FixedRows then
|
Re: in TStringgrid nur erste Zeile mit fettem Text
:thumb: vielen Dank, ich probier es nachher mal aus.
mfg |
Re: in TStringgrid nur erste Zeile mit fettem Text
Hallo,
ich habs gerade mal bei mir ausprobiert. Bei werden alle Texte Fett gezeichnet... Im FormCreate-Ereignis habe ich FixedRows und RowCount des StringGrids auf 1 gesetzt. Laut OH ist dass soweit ja auch OK Zitat:
Delphi-Quellcode:
Wie erkennt das DrawCell-Ereignis denn die Veränderung, ohne den Mausclick :cry: ?
procedure TfrmMain.strgrdCDListeDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); var txtcenter, txtwidth : integer; begin Label1.Caption := 'strgrdCDListe.Row '+IntToStr(strgrdCDListe.Row); //zur Kontrolle Label2.Caption := 'strgrdCDListe.fixedRow '+IntToStr(strgrdCDListe.FixedRows); // zur Kontrolle with strgrdCDListe.Canvas do begin if strgrdCDListe.Row <= strgrdCDListe.FixedRows then Font.Style := [fsBold]; if not Odd(ARow) then begin // Jede zweite farbig Brush.Color := cl3DLight; FillRect(Rect); TextOut(Rect.Left+2, Rect.Top+2, strgrdCDListe.Cells[ACol,ARow]); end; // Text zentrieren und ausgeben txtwidth := TextWidth(strgrdCDListe.Cells[ACol,ARow]); txtcenter := Rect.Left + (Rect.Right - Rect.Left - txtwidth) div 2; TextRect(Rect,txtcenter,Rect.Top+2,strgrdCDListe.Cells[ACol,ARow]); end; end; Danke im voraus! PS: Eine Frage nebenher. Gibt es eigentlich noch andere Farben, als die Vordefinierten? Ich bräuchte nämlich ein etwas helleres Grau als das obige cl3DLight. |
Re: in TStringgrid nur erste Zeile mit fettem Text
Zitat:
Über den Objektinspektor kannst du im Color Editor eine beliebige Farbe auswählen. |
Re: in TStringgrid nur erste Zeile mit fettem Text
Die Idee des Hervorhebens mit fett ist schlecht.
Es ergibt sich aehnlich wie beim Control Panel "Software" ein wirklich grausiger Anblick. Der Grund ist das der Text groesser wird und nun entweder eine groessere Zelle braucht oder nicht reinpasst. Aber Microsoft macht es vor und die Leute glauben es sei richtig und schoen. |
Re: in TStringgrid nur erste Zeile mit fettem Text
Hallo,
@Robert Marquardt die größer werdende Schrift ist kein Problem. |
Re: in TStringgrid nur erste Zeile mit fettem Text
Hallo,
Zitat:
Delphi-Quellcode:
durch:
if strgrdCDListe.Row <= strgrdCDListe.FixedRows then
Delphi-Quellcode:
dann klappt es. :wink:
if (ARow < strgrdCDListe.Fixedrows) or (ACol < strgrdCDListe.Fixedcols) then
|
Re: in TStringgrid nur erste Zeile mit fettem Text
Hallo,
@Lannes Danke, das funktioniert, aber auch nur wenn Rowcount um 1 größer ist als FixedRows. Dann kommen aber meine ganzen Indezes durcheinander. Ich habe auch gerade herausgefunden, die fette Schrift über ARow=0 zu setzen ...
Delphi-Quellcode:
Die erste Zeile bleibt dann aber leider nicht stehen :gruebel:
procedure TfrmMain.strgrdCDListeDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); var txtcenter, txtwidth : integer; begin Label1.Caption := 'strgrdCDListe.Row '+IntToStr(strgrdCDListe.Row); //zur Kontrolle Label2.Caption := 'strgrdCDListe.fixedRow '+IntToStr(strgrdCDListe.FixedRows); // zur Kontrolle with strgrdCDListe.Canvas do begin if (ARow < strgrdCDListe.Fixedrows) or (ACol < strgrdCDListe.Fixedcols) then Font.Style := [fsBold]; {if ARow=0 then begin Font.Style := [fsBold]; Brush.Color := clBtnFace; end; } if (ARow>1) and not (Odd(ARow)) then begin // Jede zweite farbig Brush.Color := $00EFEFEF; FillRect(Rect); TextOut(Rect.Left+2, Rect.Top+2, strgrdCDListe.Cells[ACol,ARow]); end; // Text zentrieren und ausgeben txtwidth := TextWidth(strgrdCDListe.Cells[ACol,ARow]); txtcenter := Rect.Left + (Rect.Right - Rect.Left - txtwidth) div 2; TextRect(Rect,txtcenter,Rect.Top+2,strgrdCDListe.Cells[ACol,ARow]); end; end; mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz