Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi in TStringgrid nur erste Zeile mit fettem Text (https://www.delphipraxis.net/44976-tstringgrid-nur-erste-zeile-mit-fettem-text.html)

toko 27. Apr 2005 18:21


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!

Jens Schumann 27. Apr 2005 18:41

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.

Hansa 27. Apr 2005 18:43

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
?

toko 27. Apr 2005 19:36

Re: in TStringgrid nur erste Zeile mit fettem Text
 
:thumb: vielen Dank, ich probier es nachher mal aus.

mfg

toko 28. Apr 2005 00:02

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:

Stellen Sie FixedRows nicht auf einen größeren Wert als RowCount - 1 ein.
Die oberste Zeile bleibt aber erst stehen, wenn ich RowCount auf zwei setzte. Es erscheinen dann aber immer noch alle Texte fett. Verstehe ich ja auch, denn strgrdCDListe. Row verändert sich erst, wenn man eine Zelle des StringGrid mit der Maus markiert. Ich zeig mal den Code ...

Delphi-Quellcode:
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;
Wie erkennt das DrawCell-Ereignis denn die Veränderung, ohne den Mausclick :cry: ?

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.

toms 28. Apr 2005 00:52

Re: in TStringgrid nur erste Zeile mit fettem Text
 
Zitat:

Zitat von toko
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.

Klar, du kannst einen beliebigen Hexadezimal-Wert nehmen.
Über den Objektinspektor kannst du im Color Editor eine beliebige Farbe auswählen.

Robert Marquardt 28. Apr 2005 04:50

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.

toko 28. Apr 2005 10:17

Re: in TStringgrid nur erste Zeile mit fettem Text
 
Hallo,

@Robert Marquardt
die größer werdende Schrift ist kein Problem.

Lannes 28. Apr 2005 10:46

Re: in TStringgrid nur erste Zeile mit fettem Text
 
Hallo,
Zitat:

Zitat von toko
Hallo,

ich habs gerade mal bei mir ausprobiert. Bei werden alle Texte Fett gezeichnet...

ersetz mal deinen Codeteil:
Delphi-Quellcode:
    if strgrdCDListe.Row <= strgrdCDListe.FixedRows then
durch:
Delphi-Quellcode:
if (ARow < strgrdCDListe.Fixedrows) or (ACol < strgrdCDListe.Fixedcols) then
dann klappt es. :wink:

toko 28. Apr 2005 10:56

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:
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;
Die erste Zeile bleibt dann aber leider nicht stehen :gruebel:

mfg

Lannes 28. Apr 2005 11:43

Re: in TStringgrid nur erste Zeile mit fettem Text
 
Hallo,

wie du weiter oben schon richtig zitiert hast:
Zitat:

Zitat von toko
Stellen Sie FixedRows nicht auf einen größeren Wert als RowCount - 1 ein.

danach schreibst Du :
Zitat:

Zitat von toko
Die oberste Zeile bleibt aber erst stehen, wenn ich RowCount auf zwei setzte.

Genau, beides ist richtig :mrgreen:

z.B RowCount ist 2, wie im Zitat gerechnet : 2-1 = 1
also kann RowCount = 1 und FixedRows = 1 nicht funktionieren.

deshalb ist auch dein letzter Satz richtig:
Zitat:

Zitat von toko
Die erste Zeile bleibt dann aber leider nicht stehen :gruebel:

Da wirst Du wohl Deine Indizes anpassen müssen.


Anmerkung zu meinem letzten Post:

strgrdCDListe.Row >> Delphi-Hilfe:
Zitat:

Die Eigenschaft Row bezeichnet den Index der Zeile, die die ausgewählte Zelle enthält.
ARow >> Delphi-Hilfe:
Zitat:

Die Parameter ACol und ARow beschreiben den Zeilen- und Spaltenindex der Zelle, die gezeichnet werden soll.
Bei D3 sind sowohl die Eigenschaft als auch Die Parameter mit Col und Row benannt. :wall:
Ab D4 sind die Parameter dann auf ACol und ARow geändert worden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 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