Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz