Autor Beitrag
AceTheFace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Di 27.08.02 14:56 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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.

ausblenden Quelltext
1:
If (ACol = 1) and  (ARow = 1) then...					
AceTheFace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.08.02 14:33 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 02.09.02 14:01 
Warum benutzt Du denn jetzt nicht das OnDrawCell-Event? Damit würde es nämlich funktionieren!
AceTheFace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 02.09.02 14:38 
Hast Du Dir mal die Parameter angeschaut die Dir das Event OnDrawCell zur Verfügung stellt?
ausblenden 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;